为何要写这篇博客呢?因为。我在作这个第三方登陆的时候,找了很是多资料,发现要么就是过期了。要么就是说的很是不清楚。很是罗嗦。而且很是多都是一些小demo,不是什么实例。甚至连腾讯官方的文档都有这个问题,文档中很是多地方用的不是最新的sdk写的演示样例,用最新版本号的sdk发现根本无法达到预期的效果。很是多api已经发生了变化,demo仍是用的原来的api中的方法。最坑爹是demo下载下来还要一个支持的库文件,但是sdk中又没有提供。。java
本身跌跌撞撞。查找资料,整合,弄了几个小时,最终把它给整出来了。用在了开发的项目上面。达到了预期的效果。请看效果图:json
如下来讲下怎么实现的。尽可能贴上全部代码,并解释清楚api
点击登陆界面的QQ图标。触发调用第三方的事件ide
代码例如如下:post
findViewById(R.id.iv_tencent_login).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mTencent = Tencent.createInstance( AppConst.TENCENT_APP_ID,getApplicationContext()); <span style="white-space:pre"> </span>mTencent.login(E_SigninActivity.this,AppConst.TENCENT_SCOPE, new BaseUiListener()); } });
Tencent.createInstance(AppConst.TENCENT_APP_ID,getApplicationContext());这句代码获得Tencent实例。咱们就是利用这个实例的login方法来 触发QQ登陆的。
上面的creatInstance方法有两个參数,第一个參数就是你的APP_ID 这个是要在腾讯开放平台申请的,详细怎么申请可以參考开放平台的介绍。ui
第二个參数是一个全局的context上下文this
如下来看第二句代码spa
mTencent.login(E_SigninActivity.this,AppConst.TENCENT_SCOPE, new BaseUiListener());经过这句代码,SDK实现了QQ的登陆。这种方法有三个參数。第一个參数是context上下文,第二个參数SCOPO 是一个String类型的字符串,表示一些权限
官方文档中的说明:应用需要得到哪些API的权限。由“,”分隔。code
好比:SCOPE = “get_user_info,add_t”;所有权限用“all” 对象
第三个參数。是一个事件监听器,IUiListener接口的实例,这里用的是该接口的实现类
调用login方法后,就会监听登陆事件。登陆成功或者失败后,会回调监听器里面的几个方法,详细请看如下
private class BaseUiListener implements IUiListener { private String nickname; @Override public void onComplete(Object response) { Toast.makeText(getApplicationContext(), "回调成功", 0).show(); JSONObject responseJsonobject = (JSONObject) response; final String openid = responseJsonobject.optString("openid"); final String access_token = responseJsonobject.optString("access_token"); final String expires_in = responseJsonobject.optString("expires_in"); Log.i(TAG, response.toString()); QQToken qqToken = mTencent.getQQToken(); UserInfo info = new UserInfo(getApplicationContext(), qqToken); info.getUserInfo(new IUiListener() { @Override public void onError(UiError arg0) { // TODO Auto-generated method stub } @Override public void onComplete(Object response) { // TODO Auto-generated method stub JSONObject jsonObject = (JSONObject) response; nickname = jsonObject.optString("nickname"); /** QQ登陆成功后,获取相关信息,登陆应用*/ loginModel.loginFromWeiboAndQQ("qq", openid, access_token, expires_in, nickname, BeeFrameworkApp.getInstance().getImei(), SharedPrefsUtil.getString(E_SigninActivity.this, AppConst.LATITUDE), SharedPrefsUtil.getString( E_SigninActivity.this, AppConst.LONGITUDE)); } @Override public void onCancel() { // TODO Auto-generated method stub } }); } @Override public void onError(UiError e) { } @Override public void onCancel() { } }
分别表示第三方登陆成功,取消 。错误。
咱们在QQ登陆成功后要进行的兴许操做就是写在onComplete方法里面的,在这里进行开发就能够。
onComplete的參数response封装了一些关键的信息。详细信息例如如下图所看到的:
普通状况下。QQ登陆成功了,咱们还想获取一些QQ的基本信息。比方昵称,头像什么的。这个时候怎么办?
sdk给咱们提供了一个类UserInfo,这个类中封装了QQ用户的一些信息,我么可以经过这个类拿到这些信息
怎样获得这个UserInfo类呢?
QQToken qqToken = mTencent.getQQToken(); UserInfo info = new UserInfo(getApplicationContext(), qqToken);
获得了userInfo对象后,调用它的getUserInfo(iuilistener)方法就可以获得用户的基本信息
info.getUserInfo(new IUiListener() { @Override public void onError(UiError arg0) { // TODO Auto-generated method stub } @Override public void onComplete(Object response) { // TODO Auto-generated method stub Log.i(TAG, response.toString()); JSONObject jsonObject = (JSONObject) response; nickname = jsonObject.optString("nickname"); /** QQ登陆成功后,获取相关信息,登陆应用*/ loginModel.loginFromWeiboAndQQ("qq", openid, access_token, expires_in, nickname, BeeFrameworkApp.getInstance().getImei(), SharedPrefsUtil.getString(E_SigninActivity.this, AppConst.LATITUDE), SharedPrefsUtil.getString( E_SigninActivity.this, AppConst.LONGITUDE)); } @Override public void onCancel() { // TODO Auto-generated method stub } });
咱们临时仅仅需要nickname昵称,因此经过optstring获得nickname
JSONObject jsonObject = (JSONObject) response; nickname = jsonObject.optString("nickname");
QQ第三方登陆的过程基本就是这个样子了,固然API里面还有很是多其它的方法,response里面还有很是多其它信息。你们也可以去挖掘。找到本身想要的,为我所用。
本篇博客到这里就结束了,但愿能帮到你。
友情提示:转载请注明出处