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:

 <meta-data
android:name="UMENG_APPKEY"
android:value=" 55bb0b7367e58ea05f000cf8" >
</meta-data>

  B、腾讯SSO授权的Activity注册,有两个Activity:

 <activity
  android:name="com.tencent.tauth.AuthActivity"
  android:launchMode="singleTask"
  android:noHistory="true" >
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="tencent pqGGpnNOz74m8G6V" />
  </intent-filter>
</activity>
<activity
  android:name="com.tencent.connect.common.AssistActivity"
  android:screenOrientation="portrait"
15   android:theme="@android:style/Theme.Translucent.NoTitleBar" />

  这里的tencent后面的字串pqGGpnNOz74m8G6V为之前申请的腾讯AppKey,每个开发者均不同。

  C、QQ登陆与网络权限的添加:

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<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类构造函数中添加下面的成员变量:

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

  B、添加QQ与QQ空间平台

 private void addQZoneQQPlatform() {
  String appId = " 1104719081 ";
  String appKey = " pqGGpnNOz74m8G6V ";
  UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(getActivity(), appId, appKey);
  qqSsoHandler.setTargetUrl("http://www.umeng.com");
  qqSsoHandler.addToSocialSDK();
  QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(getActivity(), appId, appKey);
  qZoneSsoHandler.addToSocialSDK();
}

  该函数可以在构造函数中添加,也可以在其他调用,只要在真正开始授权登陆之前。

  C、授权接口

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

  接口说明:该接口调用将调出授权页进行授权操作。注意,目前该接口不支持Facebook,twitter,G+,易信,来往授权。是在登陆实现类AuthActivityDer中进行授权(注意,友盟SDK中的QQ登陆模块名为AuthActivity,尽量别相同,以免混淆)。

  在界面上点击按钮采用QQ登陆功能后,授权接口的实现内容如下:

 mController.doOauthVerify(mContext, SHARE_MEDIA.QQ, new UMAuthListener() {
  @Override
  public void onStart(SHARE_MEDIA platform) {
    Toast.makeText(mContext, "授权开始", Toast.LENGTH_SHORT).show();
5   }
  @Override
  public void onError(SocializeException e, SHARE_MEDIA platform) {
    Toast.makeText(mContext, "授权错误", Toast.LENGTH_SHORT).show();
  }
  @Override
  public void onComplete(Bundle value, SHARE_MEDIA platform) {
    Toast.makeText(mContext, "授权完成", Toast.LENGTH_SHORT).show();
    //获取用户信息
    mController.getPlatformInfo(MainActivity.this, SHARE_MEDIA.QQ, new UMDataListener() {
      @Override
      public void onStart() {
        Toast.makeText(MainActivity.this, "获取平台数据开始...", Toast.LENGTH_SHORT).show();
      }
      @Override
      public void onComplete(int status, Map<String, Object> info) {
        if(status == 200 && info != null){
          StringBuilder sb = new StringBuilder();
          Set<String> keys = info.keySet();
          for(String key : keys){
            sb.append(key+"="+info.get(key).toString()+"\r\n");
          }
          Log.d("TestData",sb.toString());
        }else{
          Log.d("TestData","发生错误:"+status);
        }
      }
32    });
  }
  @Override
  public void onCancel(SHARE_MEDIA platform) {
    Toast.makeText(mContext, "授权取消", Toast.LENGTH_SHORT).show();
37   }
} );

  D、上面代码中调用了用户信息获取函数,实现方式如下:

 private void getUserInfo(SHARE_MEDIA platform) {
  mController.getPlatformInfo(getActivity(), platform, new UMDataListener() {
    public void onStart() {
      ; //此处没有做任何动作
    }
    public void onComplete(int status, Map<String, Object> info) {
      if (info != null) {
        Toast.makeText(getActivity(), info.toString(), Toast.LENGTH_SHORT).show();
9       }
    }
  });
}

  

  四、登录授权图片

   

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

QQ第三方登录的更多相关文章

  1. 使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样

    使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样openid生成是根据应用的appid和QQ号的一些信息加密生成,对于一个appid和QQ号来说,openid是唯一的 ...

  2. 【第三方登录】之QQ第三方登录

    最近公司做了个网站,需要用到第三方登录的东西.有QQ第三方登录,微信第三方登录.先把QQ第三方登录的代码列一下吧. public partial class QQBack : System.Web.U ...

  3. PHP实现QQ第三方登录

    PHP实现QQ第三方登录 学习之前,请大家先看一下oAuth协议. 首先呢,我们进入QQ互联的官方网站 http://connect.qq.com登入我们自己的QQ号,没有QQ号的小伙伴可以忽略本篇博 ...

  4. 利用JS_SDK实现QQ第三方登录

    前言 现如今,第三方登录已成为大部分网站必备的一项基础技能,引入时髦的第三方登录不仅能帮你吸引更多的用户,也让你的网站可以充分利用其他大型网站的用户资源.本次教程将让你的网站最快捷便利地引入QQ登录. ...

  5. web实现QQ第三方登录

    开放平台-web实现QQ第三方登录   应用场景     web应用通过QQ登录授权实现第三方登录.   操作步骤     1  注册成为QQ互联平台开发者,http://connect.qq.com ...

  6. Android 实现QQ第三方登录

    Android 实现QQ第三方登录 在项目中需要实现QQ第三方登录,经过一番努力算是写出来了,现在总结以下,以防以后遗忘,能帮到其他童鞋就更好了. 首先肯定是去下载SDK和DEMO http://wi ...

  7. Android应用之——最新版本号SDK V2.4实现QQ第三方登录

    为什么要写这篇博客呢?由于.我在做这个第三方登录的时候,找了非常多资料,发现要么就是过时了.要么就是说的非常不清楚.非常罗嗦.并且非常多都是一些小demo,不是什么实例.甚至连腾讯官方的文档都有这个问 ...

  8. Django项目中使用qq第三方登录。

    使用qq登录的前提是已经在qq互联官网创建网站应用并获取到QQ互联中网站应用的APP ID和APP KEY 1,建路由 # qq登录 path('loginQq/',qq.loginQq,name=' ...

  9. QQ第三方登录回调地址的问题

    如题,维护以前的项目,发现原来QQ的第三方登录竟然失败了.回调地址的问题 原来是以前的规则变了.好吧,那就改,谁叫我不是改变规则的人. 中途浪费了点时间,项目很大,我一下也找不到项目里那个接口调用的, ...

随机推荐

  1. MyEclipse 6.5 代码自动提示功能配置教程

    1. 打开MyEclipse 6.0.1,然后“window”→“Preferences” 2. 选择“java”,展开,“Editor”,选择“Content Assist”. 3. 选择“Cont ...

  2. asp.net连接SQL SERVER 2012的方法

    在web.config文件中添加 <connectionStrings> <add name="SQLConnectionString" connectionSt ...

  3. 仅IE6/7中添加checked为true的input到DOM中为false

    HTML INPUT元素有个checked属性,多数情况type为radio和checkbox. 当创建一个input,checked属性赋值为true,添加到DOM文档中,当再次取checked属性 ...

  4. 给Azure 虚机的硬盘扩充容量[转]

    接到用户的需求,需要给Azure 上虚机的硬盘扩充空间,网上找到下面的资源,做个备忘: https://github.com/azure-contrib/WindowsAzureDiskResizer

  5. Storm calculate pv

    本题其实就是storm的wordcout,需要把一个gz压缩的文件读取,并使用storm计算其pv. 样本 数据: 存储为accesslog.gz 我把它加载到我的虚拟机中/mnt/下. 没有使用tr ...

  6. java并发编程实践笔记

    文章转自:http://kenwublog.com/java-concurrency-in-practise-note 1, 保证线程安全的三种方法 :a, 不要跨线程访问共享变量b, 使共享变量是 ...

  7. Hadoop学习之SecondaryNameNode

    在启动Hadoop时,NameNode节点上会默认启动一个SecondaryNameNode进程,使用JSP命令可以查看到.SecondaryNameNode光从字面上理解,很容易让人认为是NameN ...

  8. java14-9 Doteformat的练习

    需求: 键盘录入出生年月日,计算出距离现在已经生活了几天 分析: A:创建键盘录入固定模式的字符串 B:计算步骤: a:把输入进来的字符串格式化成日期 b:获取现在的日期,减去格式化后的日期 c:把得 ...

  9. php strcmp引起的问题

    在官方的文档有这么一端说明: Note a difference between 5.2 and 5.3 versions echo (int)strcmp('pending',array()); w ...

  10. RDLC系列之二 子报表

    本文实现简单的子报表 一.效果图