为什么要写这篇博客呢?因为,我在做这个第三方登录的时候,找了很多资料,发现要么就是过时了,要么就是说的很不清楚,很罗嗦,而且很多都是一些小demo,不是什么实例,甚至连腾讯官方的文档都有这个问题,文档中很多地方用的不是最新的sdk写的示例,用最新版本的sdk发现根本没法达到预期的效果,很多api已经发生了变化,demo还是用的原来的api中的方法,最坑爹是demo下载下来还要一个支持的库文件,但是sdk中又没有提供。。
自己跌跌撞撞,查找资料,整合,弄了几个小时,终于把它给整出来了,用在了开发的项目上面,达到了预期的效果,请看效果图:
下面来说下怎么实现的,尽量贴上全部代码,并解释清楚
点击登录界面的QQ图标,触发调用第三方的事件
代码如下:
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());
}
});
其中 onclick中的几句代码就是调用QQ登录的过程
Tencent.createInstance(AppConst.TENCENT_APP_ID,getApplicationContext());
这句代码得到Tencent实例,我们就是利用这个实例的login方法来 触发QQ登录的。
上面的creatInstance方法有两个参数,第一个参数就是你的APP_ID 这个是要在腾讯开放平台申请的,具体怎么申请可以参考开放平台的介绍。
第二个参数是一个全局的context上下文
下面来看第二句代码
mTencent.login(E_SigninActivity.this,AppConst.TENCENT_SCOPE, new BaseUiListener());
通过这句代码,SDK实现了QQ的登录,这个方法有三个参数,第一个参数是context上下文,第二个参数SCOPO 是一个String类型的字符串,表示一些权限
官方文档中的说明:应用需要获得哪些API的权限,由“,”分隔。例如: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() {
}
}
当自定义的监听器实现IUiListener接口后,必须要实现接口的三个方法,onComplete onCancel onError
分别表示第三方登录成功,取消 ,错误。
我们在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
}
});
获取用户信息成功后,同样会调用onComplete方法,它的第一个参数response就封装了用户的信息,它其实是一个json格式的字符串,在之前的版本中是json格式的,新版本改为了Object。但是我们还是可以把它强转成JSONObject 然后取其中的字段,从下图可以看出它里面的所有信息。
我们暂时只需要nickname昵称,所以通过optstring得到nickname
JSONObject jsonObject = (JSONObject) response;
nickname = jsonObject.optString("nickname");
得到我们想要的全部信息后,就可以在oncomplete中进行其他一些登录的操作了
QQ第三方登录的过程基本就是这个样子了,当然API里面还有很多其他的方法,response里面还有很多其他信息,大家也可以去挖掘,找到自己想要的,为我所用。
本篇博客到这里就结束了,希望能帮到你。
友情提示:转载请注明出处