Android之QQ授权登录获取用户信息
有时候我们开发的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文件中加入以下内容:
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.bear.qqlogin.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid: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="1104732758" /></intent-filter></activity><activityandroid:name="com.tencent.connect.common.AssistActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:theme="@android:style/Theme.Translucent.NoTitleBar" /></application>
在主程序里面实现登录和获取用户信息,主要起作用的语句:
mTencent.login(MainActivity.this, scope, loginListener); //登录
userInfo = new UserInfo(MainActivity.this, mTencent.getQQToken()); //获取用户信息
userInfo.getUserInfo(userInfoListener);
整体代码如下:
import org.json.JSONObject;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Toast;import com.tencent.connect.UserInfo;
import com.tencent.connect.common.Constants;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;/*** * 通过调用Tencent类的login函数发起登录/校验登录态。 * * 该API具有两个作用:* (1)如果开发者没有调用mTencent实例的setOpenId、setAccessToken API,* 则该API执行正常的登录操作;* (2)如果开发者先调用mTencent实例的setOpenId、setAccessToken* API,则该API执行校验登录态的操作。如果登录态有效,则返回成功给应用,* 如果登录态失效,则会自动进入登录流程,将最新的登录态数据返回给应用* * @author super bear* */
public class MainActivity extends Activity {private static final String APPID = "1104732758";private EditText et1;private EditText et2;private Tencent mTencent; //qq主操作对象private IUiListener loginListener; //授权登录监听器private IUiListener userInfoListener; //获取用户信息监听器private String scope; //获取信息的范围参数private UserInfo userInfo; //qq用户信息@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setupViews();initData();}@Overrideprotected void onDestroy() {if (mTencent != null) {//注销登录mTencent.logout(MainActivity.this);}super.onDestroy();}private void setupViews() {et1 = (EditText) findViewById(R.id.editText1);et2 = (EditText) findViewById(R.id.editText2);findViewById(R.id.button2).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {System.out.println("你点击了使用qq登录按钮");login();}});findViewById(R.id.button3).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubSystem.out.println("开始获取用户信息");userInfo = new UserInfo(MainActivity.this, mTencent.getQQToken());userInfo.getUserInfo(userInfoListener);}});}private void initData() {//初始化qq主操作对象mTencent = Tencent.createInstance(APPID, MainActivity.this);//要所有权限,不然会再次申请增量权限,这里不要设置成get_user_info,add_tscope = "all";loginListener = new IUiListener() {@Overridepublic void onError(UiError arg0) {// TODO Auto-generated method stub}/*** 返回json数据样例* * {"ret":0,"pay_token":"D3D678728DC580FBCDE15722B72E7365",* "pf":"desktop_m_qq-10000144-android-2002-",* "query_authority_cost":448,* "authority_cost":-136792089,* "openid":"015A22DED93BD15E0E6B0DDB3E59DE2D",* "expires_in":7776000,* "pfkey":"6068ea1c4a716d4141bca0ddb3df1bb9",* "msg":"",* "access_token":"A2455F491478233529D0106D2CE6EB45",* "login_cost":499}*/@Overridepublic void onComplete(Object value) {// TODO Auto-generated method stubSystem.out.println("有数据返回..");if (value == null) {return;}try {JSONObject jo = (JSONObject) value;int ret = jo.getInt("ret");System.out.println("json=" + String.valueOf(jo));if (ret == 0) {Toast.makeText(MainActivity.this, "登录成功",Toast.LENGTH_LONG).show();String openID = jo.getString("openid");String accessToken = jo.getString("access_token");String expires = jo.getString("expires_in");mTencent.setOpenId(openID);mTencent.setAccessToken(accessToken, expires);}} catch (Exception e) {// TODO: handle exception}}@Overridepublic void onCancel() {// TODO Auto-generated method stub}};userInfoListener = new IUiListener() {@Overridepublic void onError(UiError arg0) {// TODO Auto-generated method stub}/*** 返回用户信息样例* * {"is_yellow_year_vip":"0","ret":0,* "figureurl_qq_1":"http:\/\/q.qlogo.cn\/qqapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/40",* "figureurl_qq_2":"http:\/\/q.qlogo.cn\/qqapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100",* "nickname":"攀爬←蜗牛","yellow_vip_level":"0","is_lost":0,"msg":"",* "city":"黄冈","* figureurl_1":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/50",* "vip":"0","level":"0",* "figureurl_2":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100",* "province":"湖北",* "is_yellow_vip":"0","gender":"男",* "figureurl":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/30"}*/@Overridepublic void onComplete(Object arg0) {// TODO Auto-generated method stubif(arg0 == null){return;}try {JSONObject jo = (JSONObject) arg0;int ret = jo.getInt("ret");System.out.println("json=" + String.valueOf(jo));String nickName = jo.getString("nickname");String gender = jo.getString("gender");Toast.makeText(MainActivity.this, "你好," + nickName,Toast.LENGTH_LONG).show();} catch (Exception e) {// TODO: handle exception}}@Overridepublic void onCancel() {// TODO Auto-generated method stub}};}private void login() {//如果session无效,就开始登录if (!mTencent.isSessionValid()) {//开始qq授权登录mTencent.login(MainActivity.this, scope, loginListener);}}protected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == Constants.REQUEST_API) {if (resultCode == Constants.RESULT_LOGIN) {Tencent.handleResultData(data, loginListener);}super.onActivityResult(requestCode, resultCode, data);}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
整个android项目下载链接:
QQLoginDemo(QQ授权登录代码)
Android之QQ授权登录获取用户信息相关推荐
- Android——第三方Facebook授权登录获取用户信息
由于项目中需要使用Facebook进行一键登录,所以记录下步骤,其实小伙伴直接看官网也可以,介绍的蛮详细的,先看下效果图吧. 遵循以下步骤将Facebook登录添加到您的应用. Facebook开发者 ...
- 微信小程序授权登录获取用户信息详解
今天来说一下微信小程序的授权登录获取用户信息,首先我们看微信提供的小程序开发文档: https://blog.csdn.net/qq_41971087/article/details/82466647 ...
- Spring boot 项目(十三)——实现微信公众号授权登录获取用户信息
引言 微信公众号开发中,必不可少的一环:公众号授权登录.获取微信用户信息 前期准备 内网渗透=>生成本地指定端口映射的外网域名 链接:内网渗透工具natapp使用详解 域名生成之后修改yml文件 ...
- java实现微信公众号授权登录获取用户信息(一)
参考文章:https://blog.csdn.net/Santiago_M/article/details/79109154 : https://www.cnblogs.com/jilu/p/6123 ...
- 微信登录——授权登录获取用户信息
引言 实现微信扫码登录关键之处就是获取到微信用户信息,那么这就涉及到了微信授权,通过微信授权我们可以获取到用户信息:微信官方文档写的还是比较详细的,但是没有代码演示,这里我就用代码演示一下如何实现微信 ...
- H5网页使用支付宝授权登录获取用户信息详解
用户信息授权 用户信息授权主要是为了获取支付宝用户ID(USER_ID).授权令牌(access_token),便于开发者处理自身业务逻辑的时候使用,例如:获取支付宝用户信息.发会员卡.快捷登录等.授 ...
- 微信小程序授权登录获取用户信息并保存至缓存用于下次登录
1.获取用户信息 wx.getUserProfile(Object object) 获取用户信息.页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用,每次请求都会弹出授权窗 ...
- 微信小程序授权登录——获取用户信息
小程序登录 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系. 登录流程时序 效果展示: 功能实现: 新建一个login页面 login.js: wx. ...
- 基于Spring Boo微信公众号授权登录获取用户信息(附带完整源码)
简介 微信公众号开发中,必不少可少的一环:公众号授权登录.获取微信用户信息. 本地完整运行环境准备 内网渗透=>生成本地指定端口映射的外网域名 传送门:内网渗透工具Natapp使用详解 域名生成 ...
最新文章
- uscao Mother's Milk
- 微信服务号、公众号、企业号注册
- Apache Shiro 使用手册(三)Shiro 授权
- 数据中心碳中和白皮书
- 服务器系统的王者——Linux 系统
- python/Django(增、删、改、查)操作
- 使用python的openpyxl模块操作excel
- 线程的start()方法
- 完整性校验用到常见的算法_几种常见的校验算法
- uboot环境变量及常用命令
- 加载本地文件为String类型
- 一位AI CEO的生死四十天
- html如何将图片作为网页背景,html文档中如何把图片作为背景
- three.js学习笔记(十五)——着色器图案
- 调色板的原理和调色板显示模式
- 归一化mysql函数_数据归一化和两种常用的归一化方法
- 【C++】结构体数组
- 详细解读WordNet计算相似度的几种方法
- 如何编写测试用例及用例的意义
- 【042】904. 水果成篮[滑动窗口]