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 }

  

  四、登录授权图片

   

 

  由于代码中在用户登录成功后,只是显示了用户的基本信息,所以跳转后会回到之前的界面。如果在项目中,就可以在该步骤后跳转到需要打开的界面,如正式的游戏界面等。

posted @ 2015-08-01 00:37  路上的脚印  阅读(5717)  评论(7编辑  收藏  举报