QQ第三方登錄


QQ第三方登錄

 

         在Android應用程序的開發過程中,很多時候需要加入用戶登錄/注冊模塊。除了自己動手設計登錄界面並實現相應功能外,現在還可以借助百度、騰訊等開發者平台提供的第三方賬號登錄模塊。最近研究了友盟的社會化分享組件,對其提供的SDK中第三方登錄的QQ模塊進行了測試。本篇文章先對友盟用戶注冊、SDK下載及案例的下載做一個簡單的介紹,然后針對測試程序的過程及代碼進行詳細的描述。

  順便提一點,進入友盟的主頁及SDK下載頁面之后,會發現其支持Android、IOS等多個環境下的應用程序開發,感興趣或有這方面需求的小伙伴可以關注下(不是打廣告哦,覺得挺好用)。

  一、友盟社會化分享組件集成

  在進行自己的應用程序開發之前,需要集成用到的組件,由於本篇文章測試針對第三方QQ登陸,所以選擇的是友盟社會化組件。

  其實,友盟社會化分享組件支持絕大多數國內外主流社交平台的分享功能,其中包括:

  國內平台:微信(微信好友及微信朋友圈)、QQ、Qzone、新浪微博、騰訊微博、人人網、豆瓣、短信、郵件、有道雲筆記、來往、易信。

  國外平台:Facebook、Twitter、Instagram、EverNote、Pocket、Pinterest、Linkedin、G+。

  下面的圖片是集成的大致流程:

  1、注冊友盟賬號

  各個開發者平台都一樣,進行任何操作之前得先注冊,友盟官網:http://www.umeng.com/

  注意,流程圖中的申請第三方賬號這一步驟不是每個應用的開發都需要的,先放着不管。官方解釋是:進行分享、授權操作需要在第三方平台創建應用並提交審核,友盟默認提供了大多數平台的測試賬號,但如果需要將分享、授權來源、分享到QQ、Qzone的icon更改為自己APP的應用,就需要自己申請第三方賬號,並且由於微信平台需要驗證簽名,因此使用微信功能也必須要自行申請賬號。

  2、所以,注冊之后,便可以下載SDK了。注意SDK下載時會讓開發者選擇需要的模塊,用到什么就選什么,選擇好后點擊進行下載即可。最終內容為各模塊對應的jar庫文件,程序中加載后可直接調用API方法或接口進行開發。

  

  3、在我的產品頁面添加新應用,獲取到AppKey,結果是一串字符,在以后的開發過程中會用到,可以說非常重要。

 

  二、第三方登錄概述

  1、第三方登錄定義

  第三方登錄主要用於簡化用戶登錄流程,通過用戶擁有的微博、QQ、微信等第三方賬號進行登錄並且構建APP自己的登錄賬號體系。

  2、實現第三方登錄的方法

  實現第三方登錄主要通過下面兩步:

    在第三方平台完成授權。

    獲取第三方平台的accesstoken信息及用戶資料。

  3、第三方登錄支持的平台

  目前友盟社會化組件支持的第三方登錄平台為:新浪微博、騰訊微博、QQ、QQ空間、微信、人人網、豆瓣。所以,若要利用QQ實現第三方登陸,還需要到騰訊開發者平台(http://open.qq.com/)去登陸,過程同申請上述的AppKey類似,開發者需要創建一個應用,申請一對App ID和App Key,同樣重要。

 

  三、實現QQ登錄

  1、 添加相關文件

  由於應用開發過程中要用到下載的SDK(*.jar),故第一步是添加對其的引用,以便導入與后續的調用或實現。添加的方式有三種:  

  A、將platforms/qq_zone/libs中SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar,SocialSDK_QQZone_3.jar拷貝到工程的libs(如果沒有此目錄,新建libs目錄,鼠標右鍵-->Add to Build Path)目錄中。將解壓目錄中platforms/qq_zone/res文件拷貝至你工程res目錄。本文測試就是采用此種方式。

  B、雙擊運行SDK根目錄下的SDKIntegration.jar或者在命令行下輸入java -jar SDKIntegration.jar運行集成工具; 2:選擇Android工程的根目錄,並且填寫您的友盟App Key; 3:勾選所需平台和組件,點擊"快速集成"; 4:檢查AndroidManifest.xml、jar文件是否正確。如果集成了QQ或者QZone,請修改相應地appid。該種方法測試時沒有成功,哪位成功了希望告知如何處理,謝謝。

  C、將文件夾中的social_sdk_library_project文件夾導入Eclipse,並在您的工程中添加對此項目的引用即可。該方法便於以后的升級,目前沒有進行測試,故不進行描述。

  2、Android manifest.xml中添加配置代碼

  A、添加上面申請的友盟AppKey:

1 <meta-data
2     android:name="UMENG_APPKEY"
3     android:value=" 55bb0b7367e58ea05f000cf8" >
4 </meta-data>

  B、騰訊SSO授權的Activity注冊,有兩個Activity:

 1 <activity
 2   android:name="com.tencent.tauth.AuthActivity"
 3   android:launchMode="singleTask"
 4   android:noHistory="true" >
 5   <intent-filter>
 6     <action android:name="android.intent.action.VIEW" />
 7     <category android:name="android.intent.category.DEFAULT" />
 8     <category android:name="android.intent.category.BROWSABLE" />
 9     <data android:scheme="tencent pqGGpnNOz74m8G6V" />
10   </intent-filter>
11 </activity>
12 <activity
13   android:name="com.tencent.connect.common.AssistActivity"
14   android:screenOrientation="portrait"     
15   android:theme
="@android:style/Theme.Translucent.NoTitleBar" />

  這里的tencent后面的字串pqGGpnNOz74m8G6V為之前申請的騰訊AppKey,每個開發者均不同。

  C、QQ登陸與網絡權限的添加:

 1 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 2 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 3 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 4 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 5 <uses-permission android:name="android.permission.INTERNET" />
 6 <uses-permission android:name="android.permission.READ_LOGS" />
 7 <uses-permission android:name="android.permission.CALL_PHONE" />
 8 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 9 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
10 <uses-permission android:name="android.permission.GET_TASKS" />
11 <uses-permission android:name="android.permission.SET_DEBUG_APP" />
12 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
13 <uses-permission android:name="android.permission.GET_ACCOUNTS" />
14 <uses-permission android:name="android.permission.USE_CREDENTIALS" />
15 <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />

         3、實現授權及獲取用戶資料

  A、添加成員變量mController

  在AuthActivityDer類構造函數中添加下面的成員變量:

1 UMSocialService mController = UMServiceFactory.getUMSocialService("com.umeng.login");

  B、添加QQ與QQ空間平台

1 private void addQZoneQQPlatform() {
2   String appId = " 1104719081 ";
3   String appKey = " pqGGpnNOz74m8G6V ";
4   UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(getActivity(), appId, appKey);
5   qqSsoHandler.setTargetUrl("http://www.umeng.com");
6   qqSsoHandler.addToSocialSDK();
7   QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(getActivity(), appId, appKey);
8   qZoneSsoHandler.addToSocialSDK();
9 }

  該函數可以在構造函數中添加,也可以在其他調用,只要在真正開始授權登陸之前。

  C、授權接口

1 UMSocialService.doOauthVerify(Context context , SHARE_MEDIA platform , UMAuthListener listener);

  接口說明:該接口調用將調出授權頁進行授權操作。注意,目前該接口不支持Facebook,twitter,G+,易信,來往授權。是在登陸實現類AuthActivityDer中進行授權(注意,友盟SDK中的QQ登陸模塊名為AuthActivity,盡量別相同,以免混淆)。

  在界面上點擊按鈕采用QQ登陸功能后,授權接口的實現內容如下:

 1 mController.doOauthVerify(mContext, SHARE_MEDIA.QQ, new UMAuthListener() {
 2   @Override
 3   public void onStart(SHARE_MEDIA platform) {
 4     Toast.makeText(mContext, "授權開始", Toast.LENGTH_SHORT).show();
 5   }
 6   @Override
 7   public void onError(SocializeException e, SHARE_MEDIA platform) {
 8     Toast.makeText(mContext, "授權錯誤", Toast.LENGTH_SHORT).show();
 9   }
10   @Override
11   public void onComplete(Bundle value, SHARE_MEDIA platform) {
12     Toast.makeText(mContext, "授權完成", Toast.LENGTH_SHORT).show();
13     //獲取用戶信息
14     mController.getPlatformInfo(MainActivity.this, SHARE_MEDIA.QQ, new UMDataListener() {
15       @Override
16       public void onStart() {
17         Toast.makeText(MainActivity.this, "獲取平台數據開始...", Toast.LENGTH_SHORT).show();
18       }                                              
19       @Override
20       public void onComplete(int status, Map<String, Object> info) {
21         if(status == 200 && info != null){
22           StringBuilder sb = new StringBuilder();
23           Set<String> keys = info.keySet();
24           for(String key : keys){
25             sb.append(key+"="+info.get(key).toString()+"\r\n");
26           }
27           Log.d("TestData",sb.toString());
28         }else{
29           Log.d("TestData","發生錯誤:"+status);
30         }
31       }
32    });
33   }
34   @Override
35   public void onCancel(SHARE_MEDIA platform) {
36     Toast.makeText(mContext, "授權取消", Toast.LENGTH_SHORT).show();
37   }
38 } );

  D、上面代碼中調用了用戶信息獲取函數,實現方式如下:

 1 private void getUserInfo(SHARE_MEDIA platform) {
 2   mController.getPlatformInfo(getActivity(), platform, new UMDataListener() {
 3     public void onStart() {
 4       ; //此處沒有做任何動作
 5     }
 6     public void onComplete(int status, Map<String, Object> info) {
 7       if (info != null) {
 8         Toast.makeText(getActivity(), info.toString(), Toast.LENGTH_SHORT).show();
 9       }
10     }
11   });
12 }

  

  四、登錄授權圖片

   

 

  由於代碼中在用戶登錄成功后,只是顯示了用戶的基本信息,所以跳轉后會回到之前的界面。如果在項目中,就可以在該步驟后跳轉到需要打開的界面,如正式的游戲界面等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM