Android应用之最新版本SDKV2.4实现QQ第三方登陆

为何要写这篇博客呢?由于,我在作这个第三方登陆的时候,找了不少资料,发现要么就是过期了,要么就是说的很不清楚,很罗嗦,并且不少都是一些小 demo,不是什么实例,甚至连腾讯官方的文档都有这个问题,文档中不少地方用的不是最新的sdk写的示例,用最新版本的sdk发现根本无法达到预期的效 果,不少api已经发生了变化,demo仍是用的原来的api中的方法,最坑爹是demo下载下来还要一个支持的库文件,可是sdk中又没有提供。。 java

\

本身跌跌撞撞,查找资料,整合,弄了几个小时,终于把它给整出来了,用在了开发的项目上面,达到了预期的效果,请看效果图: json

\ \ \

下面来讲下怎么实现的,尽可能贴上所有代码,并解释清楚 api

点击登陆界面的QQ图标,触发调用第三方的事件 ide

代码以下: ui

 

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登陆的过程

 


1. Tencent.createInstance(AppConst.TENCENT_APP_ID,getApplicationContext());
这句代码获得Tencent实例,咱们就是利用这个实例的login方法来 触发QQ登陆的。

 

上面的creatInstance方法有两个参数,第一个参数就是你的APP_ID 这个是要在腾讯开放平台申请的,具体怎么申请能够参考开放平台的介绍。 this

第二个参数是一个全局的context上下文 spa

下面来看第二句代码 .net

 

1. mTencent.login(E_SigninActivity.this,AppConst.TENCENT_SCOPE,newBaseUiListener());
经过这句代码,SDK实现了QQ的登陆,这个方法有三个参数,第一个参数是context上下文,第二个参数SCOPO 是一个String类型的字符串,表示一些权限

 

官方文档中的说明:应用须要得到哪些API的权限,由“,”分隔。例如:SCOPE = “get_user_info,add_t”;全部权限用“all” code

第三个参数,是一个事件监听器,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());
			Q<a href="http://www.it165.net/pro/pkqt/" target="_blank" class="keylink">QT</a>oken qqToken = mTencent.getQ<a href="http://www.it165.net/pro/pkqt/" target="_blank" class="keylink">QT</a>oken();
			UserInfo info = new UserInfo(getApplicationContext(), <a href="http://www.it165.net/qq/" target="_blank" class="keylink">qq</a>Token);
			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("<a href="http://www.it165.net/qq/" target="_blank" class="keylink">qq</a>", 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类呢?


1. QQToken qqToken = mTencent.getQQToken();
2. UserInfo info =newUserInfo(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


1. JSONObject jsonObject = (JSONObject) response;
2. nickname = jsonObject.optString("nickname");

获得咱们想要的所有信息后,就能够在oncomplete中进行其余一些登陆的操做了

 

QQ第三方登陆的过程基本就是这个样子了,固然API里面还有不少其余的方法,response里面还有不少其余信息,你们也能够去挖掘,找到本身想要的,为我所用。

本篇博客到这里就结束了,但愿能帮到你。

相关文章
相关标签/搜索