Android之QQ授权登录获取用户信息

转载 2016年08月29日 03:22:39

有时候我们开发的app需要方便用户简单登录,可以让用户使用自己的qq、微信、微博登录到我们自己开发的app。

今天就在这里总结一下如何在自己的app中集成QQ授权登录获取用户信息的功能。


首先我们打开腾讯开发平台这个网页,点击---->移动应用---->创建应用,成功创建应用后,可以产生我们需要的App ID和App Key,如下图所示:



然后我们需要下载Android-SDK-vxxx,下载完后解压我们可以得到两个jar包,和一个例子代码,这两个jar包是我们需要导入到自己app中的,它们的名字是:mta-sdk-1.6.2.jar、open_sdk_r5043.jar。

很重要的参考资料是网站上提供的API文档和解压之后的Sample例子代码。


先来看一下demo效果:

      


接着我们开始集成,在AndroidManifest文件中加入以下内容:

  1. <uses-permission android:name="android.permission.INTERNET" />  
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  3.   
  4. <application  
  5.     android:allowBackup="true"  
  6.     android:icon="@drawable/ic_launcher"  
  7.     android:label="@string/app_name"  
  8.     android:theme="@style/AppTheme" >  
  9.     <activity  
  10.         android:name="com.bear.qqlogin.MainActivity"  
  11.         android:label="@string/app_name" >  
  12.         <intent-filter>  
  13.             <action android:name="android.intent.action.MAIN" />  
  14.   
  15.             <category android:name="android.intent.category.LAUNCHER" />  
  16.         </intent-filter>  
  17.     </activity>  
  18.     <activity  
  19.         android:name="com.tencent.tauth.AuthActivity"  
  20.         android:launchMode="singleTask"  
  21.         android:noHistory="true" >  
  22.         <intent-filter>  
  23.             <action android:name="android.intent.action.VIEW" />  
  24.   
  25.             <category android:name="android.intent.category.DEFAULT" />  
  26.             <category android:name="android.intent.category.BROWSABLE" />  
  27.   
  28.             <data android:scheme="1104732758" />  
  29.         </intent-filter>  
  30.     </activity>  
  31.     <activity  
  32.         android:name="com.tencent.connect.common.AssistActivity"  
  33.         android:configChanges="orientation|keyboardHidden|screenSize"  
  34.         android:theme="@android:style/Theme.Translucent.NoTitleBar" />  
  35. </application>  

在主程序里面实现登录和获取用户信息,主要起作用的语句:

mTencent.login(MainActivity.this, scope, loginListener); //登录


userInfo = new UserInfo(MainActivity.this, mTencent.getQQToken()); //获取用户信息
userInfo.getUserInfo(userInfoListener);


整体代码如下:

  1. import org.json.JSONObject;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.Menu;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.EditText;  
  10. import android.widget.Toast;  
  11.   
  12. import com.tencent.connect.UserInfo;  
  13. import com.tencent.connect.common.Constants;  
  14. import com.tencent.tauth.IUiListener;  
  15. import com.tencent.tauth.Tencent;  
  16. import com.tencent.tauth.UiError;  
  17.   
  18. /** 
  19.  *  
  20.  * 通过调用Tencent类的login函数发起登录/校验登录态。  
  21.  *  
  22.  * 该API具有两个作用: 
  23.  * (1)如果开发者没有调用mTencent实例的setOpenId、setAccessToken API, 
  24.  *      则该API执行正常的登录操作; 
  25.  * (2)如果开发者先调用mTencent实例的setOpenId、setAccessToken 
  26.  *      API,则该API执行校验登录态的操作。如果登录态有效,则返回成功给应用, 
  27.  *      如果登录态失效,则会自动进入登录流程,将最新的登录态数据返回给应用 
  28.  *  
  29.  * @author super bear 
  30.  *  
  31.  */  
  32. public class MainActivity extends Activity {  
  33.   
  34.     private static final String APPID = "1104732758";  
  35.   
  36.     private EditText et1;  
  37.     private EditText et2;  
  38.       
  39.     private Tencent mTencent; //qq主操作对象  
  40.     private IUiListener loginListener; //授权登录监听器  
  41.     private IUiListener userInfoListener; //获取用户信息监听器  
  42.     private String scope; //获取信息的范围参数  
  43.     private UserInfo userInfo; //qq用户信息  
  44.   
  45.     @Override  
  46.     protected void onCreate(Bundle savedInstanceState) {  
  47.         super.onCreate(savedInstanceState);  
  48.         setContentView(R.layout.activity_main);  
  49.         setupViews();  
  50.         initData();  
  51.     }  
  52.   
  53.     @Override  
  54.     protected void onDestroy() {  
  55.         if (mTencent != null) {  
  56.             //注销登录  
  57.             mTencent.logout(MainActivity.this);  
  58.         }  
  59.         super.onDestroy();  
  60.     }  
  61.   
  62.     private void setupViews() {  
  63.         et1 = (EditText) findViewById(R.id.editText1);  
  64.         et2 = (EditText) findViewById(R.id.editText2);  
  65.   
  66.         findViewById(R.id.button2).setOnClickListener(new OnClickListener() {  
  67.   
  68.             @Override  
  69.             public void onClick(View v) {  
  70.                 System.out.println("你点击了使用qq登录按钮");  
  71.                 login();  
  72.             }  
  73.         });  
  74.           
  75.         findViewById(R.id.button3).setOnClickListener(new OnClickListener() {  
  76.               
  77.             @Override  
  78.             public void onClick(View v) {  
  79.                 // TODO Auto-generated method stub  
  80.                 System.out.println("开始获取用户信息");  
  81.                 userInfo = new UserInfo(MainActivity.this, mTencent.getQQToken());  
  82.                 userInfo.getUserInfo(userInfoListener);  
  83.             }  
  84.         });  
  85.     }  
  86.   
  87.     private void initData() {  
  88.         //初始化qq主操作对象  
  89.         mTencent = Tencent.createInstance(APPID, MainActivity.this);  
  90.         //要所有权限,不然会再次申请增量权限,这里不要设置成get_user_info,add_t  
  91.         scope = "all";  
  92.           
  93.         loginListener = new IUiListener() {  
  94.   
  95.             @Override  
  96.             public void onError(UiError arg0) {  
  97.                 // TODO Auto-generated method stub  
  98.   
  99.             }  
  100.   
  101.             /** 
  102.              * 返回json数据样例 
  103.              *  
  104.              * {"ret":0,"pay_token":"D3D678728DC580FBCDE15722B72E7365", 
  105.              * "pf":"desktop_m_qq-10000144-android-2002-", 
  106.              * "query_authority_cost":448, 
  107.              * "authority_cost":-136792089, 
  108.              * "openid":"015A22DED93BD15E0E6B0DDB3E59DE2D", 
  109.              * "expires_in":7776000, 
  110.              * "pfkey":"6068ea1c4a716d4141bca0ddb3df1bb9", 
  111.              * "msg":"", 
  112.              * "access_token":"A2455F491478233529D0106D2CE6EB45", 
  113.              * "login_cost":499} 
  114.              */  
  115.             @Override  
  116.             public void onComplete(Object value) {  
  117.                 // TODO Auto-generated method stub  
  118.                   
  119.                 System.out.println("有数据返回..");  
  120.                 if (value == null) {  
  121.                     return;  
  122.                 }  
  123.   
  124.                 try {  
  125.                     JSONObject jo = (JSONObject) value;  
  126.   
  127.                     int ret = jo.getInt("ret");  
  128.                       
  129.                     System.out.println("json=" + String.valueOf(jo));  
  130.                       
  131.                     if (ret == 0) {  
  132.                         Toast.makeText(MainActivity.this"登录成功",  
  133.                                 Toast.LENGTH_LONG).show();  
  134.   
  135.                         String openID = jo.getString("openid");  
  136.                         String accessToken = jo.getString("access_token");  
  137.                         String expires = jo.getString("expires_in");  
  138.                         mTencent.setOpenId(openID);  
  139.                         mTencent.setAccessToken(accessToken, expires);  
  140.                     }  
  141.   
  142.                 } catch (Exception e) {  
  143.                     // TODO: handle exception  
  144.                 }  
  145.   
  146.             }  
  147.   
  148.             @Override  
  149.             public void onCancel() {  
  150.                 // TODO Auto-generated method stub  
  151.   
  152.             }  
  153.         };  
  154.           
  155.         userInfoListener = new IUiListener() {  
  156.               
  157.             @Override  
  158.             public void onError(UiError arg0) {  
  159.                 // TODO Auto-generated method stub  
  160.                   
  161.             }  
  162.               
  163.             /** 
  164.              * 返回用户信息样例 
  165.              *  
  166.              * {"is_yellow_year_vip":"0","ret":0, 
  167.              * "figureurl_qq_1":"http:\/\/q.qlogo.cn\/qqapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/40", 
  168.              * "figureurl_qq_2":"http:\/\/q.qlogo.cn\/qqapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100", 
  169.              * "nickname":"攀爬←蜗牛","yellow_vip_level":"0","is_lost":0,"msg":"", 
  170.              * "city":"黄冈"," 
  171.              * figureurl_1":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/50", 
  172.              * "vip":"0","level":"0", 
  173.              * "figureurl_2":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100", 
  174.              * "province":"湖北", 
  175.              * "is_yellow_vip":"0","gender":"男", 
  176.              * "figureurl":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/30"} 
  177.              */  
  178.             @Override  
  179.             public void onComplete(Object arg0) {  
  180.                 // TODO Auto-generated method stub  
  181.                 if(arg0 == null){  
  182.                     return;  
  183.                 }  
  184.                 try {  
  185.                     JSONObject jo = (JSONObject) arg0;  
  186.                     int ret = jo.getInt("ret");  
  187.                     System.out.println("json=" + String.valueOf(jo));  
  188.                     String nickName = jo.getString("nickname");  
  189.                     String gender = jo.getString("gender");  
  190.   
  191.                     Toast.makeText(MainActivity.this"你好," + nickName,  
  192.                             Toast.LENGTH_LONG).show();  
  193.   
  194.                 } catch (Exception e) {  
  195.                     // TODO: handle exception  
  196.                 }  
  197.                   
  198.                   
  199.             }  
  200.               
  201.             @Override  
  202.             public void onCancel() {  
  203.                 // TODO Auto-generated method stub  
  204.                   
  205.             }  
  206.         };  
  207.     }  
  208.   
  209.     private void login() {  
  210.         //如果session无效,就开始登录  
  211.         if (!mTencent.isSessionValid()) {  
  212.             //开始qq授权登录  
  213.             mTencent.login(MainActivity.this, scope, loginListener);  
  214.         }  
  215.     }  
  216.   
  217.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  218.         if (requestCode == Constants.REQUEST_API) {  
  219.             if (resultCode == Constants.RESULT_LOGIN) {  
  220.                 Tencent.handleResultData(data, loginListener);  
  221.             }  
  222.             super.onActivityResult(requestCode, resultCode, data);  
  223.         }  
  224.     }  
  225.   
  226.     @Override  
  227.     public boolean onCreateOptionsMenu(Menu menu) {  
  228.         // Inflate the menu; this adds items to the action bar if it is present.  
  229.         getMenuInflater().inflate(R.menu.main, menu);  
  230.         return true;  
  231.     }  
  232.   
  233. }  


整个Android项目下载链接:

QQLoginDemo(QQ授权登录代码)



Android之QQ授权登录获取用户信息

有时候我们开发的app需要方便用户简单登录,可以让用户使用自己的qq、微信、微博登录到我们自己开发的app。 今天就在这里总结一下如何在自己的app中集成QQ授权登录获取用户信息的功能。 ...

Android之QQ授权登录获取用户信息

有时候我们开发的app需要方便用户简单登录,可以让用户使用自己的qq、微信、微博登录到我们自己开发的app。 今天就在这里总结一下如何在自己的app中集成QQ授权登录获取用户信息的功能。 ...

Android第三方QQ登录并获取QQ用户信息

首先我们需要去腾讯开放平台申请账号,然后创建应用,地址(http://open.qq.com/) 下载我们应用中所需要的jar包,包括两个 open_sdk_r5509.jar mta_sdk-1.6...

Android实现新浪微博和QQ登陆并获取用户的信息

首先去新浪微博和腾讯的开发平台下载相应的SDK,这里不作介绍,直接上代码: LoginActivity.java package com.qingning.share; import java.io...

Android 微信授权登录、获取Wx用户信息,解决无法回调问题

微信授权登录,官方说的不是很清楚、所以导致有一部分的坑。 据此记载..(坑) 1.微信注册应用平台的应用签名为 打包keystore的MD5 小写并且去掉 ":" 号组成、或者去下载 微信签名生成工具...

Android第三方QQ登录、获取个人信息、分享实现

昨天调试了一下午终于成功 第三方QQ登录、获取个人信息,分享 QQ官方API文档写的太乱 并且很多地方没有更新 这里总结一下 方便记录和回看实现结果图 首先进入腾讯开放平台 下载QQ的SDK 地...

分别嵌入 新浪微博、QQ、微信 做第三方授权登录 获取到头像 昵称等信息

下面提到的这三种 授权登录 是分别嵌入,不是 share sdk 或者友盟 其它的。 一、下载sdk 地址 1.新浪微博 新浪微博SDK 下载 2.QQ  QQ SDK 下载 3.微信 ...

QQ获取用户信息

在获取sso授权成功后(zheshi)。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android之QQ授权登录获取用户信息
举报原因:
原因补充:

(最多只允许输入30个字)