Android第三方账号登录

第三方账号登录协议是“OAuth2.0”


QQ账号登录:

http://wiki.open.qq.com/wiki/website/OAuth2.0%E7%AE%80%E4%BB%8B

新浪微博登录

http://open.weibo.com/wiki/%E7%A7%BB%E5%8A%A8%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%8E%A5%E5%85%A5


QQ登录OAuth2.0总体处理流程

QQ登录OAuth2.0总体处理流程如下:
Step1:申请接入,获取appid和apikey;
Step2:开发应用,并设置协作者帐号进行测试联调;
Step3:放置QQ登录按钮;
Step4:通过用户登录验证和授权,获取Access Token;
Step5:通过Access Token获取用户的OpenID;
Step6:调用OpenAPI,来请求访问或修改用户授权的资源。


SSO (Single Sign-On)
SSO授权方式,简单来说就是使用目标平台客户端来完成授权。
使用了SSO授权后,有客户端的都会优先启用客户端授权,没客户端的则任然使用网页版进行授权


ShareSDK使用步骤:

1、设置布局,layout添加做为登录按钮的图标(微信、QQ、新浪微博等)

    在AndroidManifest.xml中增加权限

2、添加相应lib库文件(第三方登录的jar包),以及assets文件夹下的ShareSDK.xml(没有附图),

还有资源文件res文件夹(如果没有,在不使用sso登录时会报错,Resource NotFoundException:String resource ID #0x0 意思是:缺少资源文件)

Android第三方账号登录_第1张图片

添加后:

Android第三方账号登录_第2张图片

3、在相应的Activity中实现三个接口

public class Login extends Activity implements Callback, OnClickListener,PlatformActionListener{
}
然后重写所需的方法

注意:

(1)第一步是初始化(不可缺少,否则报错java.lang.NullPointerException)

ShareSDK.initSDK(this);
(2)在做真机测试时报错 Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE

在Eclipse中运行Android程序默认是将程序安装到手机的Rom中,如果Rom空间不足,就会提示这个错误。

解决方法:(在AndroidManifest.xml文件中,增加下面有标记的代码,让应用程序的默认安装路径为SD卡,)

(3)新浪创建应用时,请在“我的应用 - 应用信息 - 高级信息”中填写您的应用回调页,这个与程序的ShareSDK.xml的RedirectUrl要一致,否则报错redirect_uri_mismatch(重定向地址不匹配)

(3)分享到新浪微博,需要将您的apk签名后经过新浪微博审核后才可以使用,不然会报 :21338:sso package or sign error(C403) 的错误


补充:

SharkSDK 第三方登录 两种接入方式:http://wiki.mob.com/%E7%AC%AC%E4%B8%89%E6%96%B9%E7%99%BB%E5%BD%95/

一、要数据,不要功能
如果你的应用拥有用户系统,就是说你的应用自己就有注册和登录功能,使用第三方登录只是为了拥有更多用户,那么你可以依照下面的步骤来做:

1、用户触发第三方登录事件
2、showUser(null)请求授权用户的资料(这个过程中可能涉及授权操作)
3、如果onComplete()方法被回调,将其参数Hashmap代入你应用的Login流程
4、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据
5、Login时客户端发送用户资料中的用户ID给服务端
6、服务端判定用户是已注册用户,则引导用户进入系统,否则返回特定错误码
7、客户端收到“未注册用户”错误码以后,代入用户资料到你应用的Register流程
8、Register时在用户资料中挑选你应用的注册所需字段,并提交服务端注册
9、服务端完成用户注册,成功则反馈客户端引导用户进入系统
10、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据


二、要功能,不要数据

如果你的应用不具备用户系统,而且也不打算维护这个系统,那么你可以依照下面的步骤来做:

1、用户触发第三方登录事件
2、调用platform.getDb().getUserId()请求用户在此平台上的ID
3、如果用户ID存在,则认为用户是合法用户,允许进入系统;否则调用authorize()
4、authorize()方法将引导用户在授权页面输入帐号密码,然后目标平台将验证此用户
5、如果onComplete()方法被回调,表示授权成功,引导用户进入系统
6、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据


你可能感兴趣的:(Android第三方账号登录)