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裏面還有不少其餘信息,你們也能夠去挖掘,找到本身想要的,爲我所用。

本篇博客到這裏就結束了,但願能幫到你。

相關文章
相關標籤/搜索