Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 雷襲-----qq第三方登錄,讓你閃電進入app

雷襲-----qq第三方登錄,讓你閃電進入app

編輯:關於Android編程

現在很多應用都已經涉及到 第三方登錄了,他的使用能更方便大家進入app,不用繁瑣的輸入密碼,那麼今天就來探索下 QQ 的三方登錄。

首先,大家在白度上 搜 “騰訊開放平台”,進入以下界面:

\

 

在 ‘’聯系我們‘ 的旁邊有登錄的,將你的qq開發者賬號登上,然後進入 資料庫 標簽,api文檔,下面有 sdk 下載,然後下載最新的官方文檔,我是下的 sdk_V_3.1.0,當然,你的

app也是要創建的,在開發者應用管理裡面會有你的 app_id 和 app_key

這一切搞定之後就是配置了,我覺得 qq的官方文檔真是夠爛啊,官方文檔,下的demo以及demo中的文檔介紹,都不配套。搞起來甚是郁悶啊。好吧,接下來講配置

解壓 sdk 解壓後是這樣的:

\

裡面有兩個jar 包,mta-sdk-1.6.2.jar 和open_sdk_r5756.jar,都導入到你的工程中。

接下來配置 MainActivityfast.xml

MainActivityfast 中需要原封不動的加入兩個 activity,com.tencent.tauth.AuthActivity 和 com.tencent.connect.common.AssistActivity,代碼如下:

 

    
        
            
                
                
            
        
        
        
            
                
                
                
                
            
        
         
        
        
    

注意:首先com.tencent.tauth.AuthActivity 和 com.tencent.connect.common.AssistActivity的添加包路徑是固定的,在AuthActivity 下面有一個

 

不能忘掉,其中 scheme="xxxxxxx" 中 tencent 是固定的,22222 為你的 app_id,記住是 app_id 不是app_key !上面兩個 類只需要按我那樣復制進去,改改 app_id就行

當然,不能忘了網絡權限,由於我只做登陸,暫時只用到了兩個權限,大家這個可以參考官方文檔,根據需要添加 我的權限是

 


    

 

 

一切就緒,現在我們要開始進入正題了,此處只做一個簡單的點擊 登陸 button,獲得 個人信息的昵稱和 圖像,以及登陸成功後獲得的登陸基本信息

Ok,下面接著說

 

首先當然是 qq 登陸的注冊,代碼如下

	private Tencent mTencent;
	private String mAppId;
	private UserInfo mUserInfo;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		Log.i("","=====create====");
		
		setConfig();

		initView();
		initData();
		setListener();
	}
	
	private void setConfig() {
		mAppId ="2222222";
		// 注冊QQ
		mTencent=Tencent.createInstance(mAppId, MainActivity.this);
		
	}
我們在 oncreate 中 對 mTencent 進行初始化,此時需要用到 app_id。

然後是 button 點擊時的 登陸方法:
	private void setListener() {
		mButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				//登陸
				mTencent.login(MainActivity.this, "all", new QQListener());
			}
		});
		
	}

登陸方法 是mTencent.login(MainActivity.this, "all", new QQListener()); 其中三個參數:第一個是 上下文,第二個是 權限,此處是 “all”,表示所有權限,第三個參數是 登陸的回調,我們登陸的結果是在這個類中處理的,QQListener 是自己寫的實現IUiListener 的 一個類

ok,再看看 QQListener 類的實現

	/**獲得登陸的基本信息**/
	class QQListener implements IUiListener{
		
        //登陸成功
		@Override
		public void onComplete(Object obj) {
			Log.i("","======登陸成功======="+obj.toString());
			
			
			QQLoadInfo qQLoadInfo=JsonParserUtil.getQQLoadInfo(obj.toString());

			//設置openid和token,否則獲取不到下面的信息
			String openId=qQLoadInfo.getOpenid();
			String token = qQLoadInfo.getAccess_token();
			String expires = qQLoadInfo.getExpires_in();
			
			mTencent.setAccessToken(token, expires);
                        mTencent.setOpenId(openId);
			
			mUserInfo=new UserInfo(MainActivity.this, mTencent.getQQToken());
			mUserInfo.getUserInfo(new UserInfoListener());
		}
		
		//登陸取消
		@Override
		public void onCancel() {
			// TODO Auto-generated method stub
			
		}
		
        //登陸失敗
		@Override
		public void onError(UiError arg0) {
			// TODO Auto-generated method stub
			
		}
	}

QQListener實現IUiListener 時有三個方法,如上,故名思議,分別是 登陸成功,取消和失敗。現在主要來看看 成功後的處理,即onComplete(Object obj) 方法

 

Log.i("","======登陸成功======="+obj.toString()); 返回的數據大概是這樣的:

{
  "ret": 0,
  "pay_token": "xxxxxxxxx",
  "pf": "xxxxxxxxxxxxx",
  "query_authority_cost": xxx,
  "authority_cost": x,
  "openid": "xxxxxxxxxxxx",
  "expires_in": xxxxxxxxxx,
  "pfkey": "xxxxxxxxxxxx",
  "msg": "",
  "access_token": "xxxxxxxxx",
  "login_cost": xxx
}

 

 

這裡需要強調一點,在某些低端機上調用登錄後,由於內存緊張導致 APP 被系統回收,登錄成功後無法在onComplete(Object obj) 方法中獲得登陸信息,這時需要重寫 activity的onActivityResult 方法,如下:

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		//在某些低端機上調用登錄後,由於內存緊張導致 APP 被系統回收,登錄成功後無法成功回傳數據,需要重寫onActivityResult
		if (requestCode == Constants.REQUEST_LOGIN) {
			Tencent.onActivityResultData(requestCode,resultCode,data,new QQListener());
			}
		super.onActivityResult(requestCode, resultCode, data);
		
	}

這樣處理以後,你的QQListener 方法中就可以 獲得 登陸後的信息了,OK,下面繼續講QQListener 類。

 

QQListener 類返回成功的 obj後,我用 gson 解析,封裝到 QQLoadInfo 對象中了,這只是 登陸後獲得的基本數據, qq的 sdk 為我們 提供了一個 userInfo 類,當中會涉及到 用戶的一些基本信息,

如 圖像的 url ,性別,省份,昵稱等。那麼下邊這段代碼很關鍵:

QQLoadInfo qQLoadInfo=JsonParserUtil.getQQLoadInfo(obj.toString());

			//設置openid和token,否則獲取不到下面的信息
			String openId=qQLoadInfo.getOpenid();
			String token = qQLoadInfo.getAccess_token();
			String expires = qQLoadInfo.getExpires_in();
			
			mTencent.setAccessToken(token, expires);
            mTencent.setOpenId(openId);
			
			mUserInfo=new UserInfo(MainActivity.this, mTencent.getQQToken());
			mUserInfo.getUserInfo(new UserInfoListener());

我們需要 獲得 userInfo ,而 userInfo 初始化需要 mTencent 的幫助,所以 “設置openid和token,否則獲取不到下面的信息” 非常重要,因為不設置的話,
mUserInfo=new UserInfo(MainActivity.this, mTencent.getQQToken());
執行獲得的mUserInfo會為空

ok,現在我們已經獲得 不為空的 mUserInfo 了,那麼get 到用戶信息,我們還要用到UserInfo 的另一個方法:

mUserInfo.getUserInfo(new UserInfoListener());

方法很簡單,裡面也是一個監聽類UserInfoListener

 

很遺憾,我們這個UserInfoListener 類也 實現了IUiListener 接口,其代碼為:

	/**獲得qq登陸用戶信息**/
	class UserInfoListener implements IUiListener{
		
		@Override
		public void onComplete(Object obj) {
			// TODO Auto-generated method stub
			Log.i("","======用戶信息======="+obj.toString());

			//figureurl_qq_2為用戶圖像的url
			QQUserInfo qQUserInfo=JsonParserUtil.getQQUserInfo(obj.toString());
			Log.i("","===用戶信息===="+qQUserInfo.getFigureurl_qq_2());
			Log.i("","===用戶信息===="+qQUserInfo.getNickname());
		}
		
		@Override
		public void onCancel() {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void onError(UiError arg0) {
			// TODO Auto-generated method stub
			
		}
		
	}

此處 返回的用戶信息大概是這樣的:
{
    "is_yellow_year_vip": "x",
    "ret": x,
    "figureurl_qq_1": "http://xxxxxxxxx",
    "figureurl_qq_2": "http://xxxxxxxxxxx",
    "nickname": "xxxxxxx",
    "yellow_vip_level": "x",
    "is_lost": x,
    "msg": "",
    "city": "xxx",
    "figureurl_1": "http://xxxxxxxxxx",
    "vip": "x",
    "level": "x",
    "figureurl_2": "http://xxxxxxxxxxxxxxxxxxx",
    "province": "xxxxxx",
    "is_yellow_vip": "xxxxx",
    "gender": "xxxxx",
    "figureurl": "http://xxxxxxxxxxx"
}

我也是將其解析後封裝在 自己寫的QQUserInfo 類中,然後通過
Log.i("","===用戶圖像 url===="+qQUserInfo.getFigureurl_qq_2());
Log.i("","===用戶昵稱===="+qQUserInfo.getNickname());
獲得用戶的 圖像 url 和 昵稱,當然,你也可以 根據上面的 json 數據獲得更多個人信息

那麼接下來的 通過 url 獲取bitmap 以及 昵稱和 bitmap 的顯示 我就不多講了,需要注意的是 bitmap 通過 url 獲取 圖像,是要重開線程獲取的,另外 昵稱和 圖像的顯示要從線程中傳到 handler 中顯示

需要注意的是,全部做完以後,測試的時候開始都是測試的開發者自己的qq號,需要你將做好的app在騰訊開發者平台上發布經審核之後,才能正常使用

OK,今天就說這麼多,感覺騰訊 qq 的文檔是 一團糟啊,各種坑,唉!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved