zoukankan      html  css  js  c++  java
  • 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()+"
    ");
    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 }

      

      四、登录授权图片

       

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

  • 相关阅读:
    python 二维数组遍历
    WINFORM中treeview 节点显示不全
    C++函数式编程实现牛顿法
    C++函数式编程
    C++函数的重载
    默认形参值
    常量指针和指针常量
    C++值传递与引用传递
    C++变量和基本类型——2.3.1引用
    C++ 实参和形参
  • 原文地址:https://www.cnblogs.com/tgyf/p/4693502.html
Copyright © 2011-2022 走看看