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

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVhcl9odWFuZ3poZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="737" height="488" alt="">

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

非常重要的參考资料是站点上提供的API文档和解压之后的Sample样例代码。

先来看一下demo效果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVhcl9odWFuZ3poZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="240" height="400" alt=""> 
    

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVhcl9odWFuZ3poZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="240" height="400" alt="">

接着我们開始集成,在AndroidManifest文件里增加下面内容:

    <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android: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>
<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="1104732758" />
</intent-filter>
</activity>
<activity
android: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用户信息 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupViews();
initData();
} @Override
protected 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() { @Override
public void onClick(View v) {
System.out.println("你点击了使用qq登录按钮");
login();
}
}); findViewById(R.id.button3).setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.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_t
scope = "all"; loginListener = new IUiListener() { @Override
public 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}
*/
@Override
public void onComplete(Object value) {
// TODO Auto-generated method stub System.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
} } @Override
public void onCancel() {
// TODO Auto-generated method stub }
}; userInfoListener = new IUiListener() { @Override
public 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"}
*/
@Override
public void onComplete(Object arg0) {
// TODO Auto-generated method stub
if(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
} } @Override
public 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);
}
} @Override
public 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授权登录获取用户信息的更多相关文章

  1. app支付宝授权登录获取用户信息

    由后台进行地址的拼接(前台进行授权) // 生成授权的参数 String sign = ""; Long userId1 = SecurityUser.getUserId(); S ...

  2. 微信小程序授权登录以及用户信息相关接口调整导致授权框不弹出

    前言:4月8号升级了小程序业务后提交了版本并上线.突然一个同事说体验版的点击"登录"按钮无效.当时觉得应该不会呀,这几天一直用手机调试,每天也在不停的登录授权,弹框一直有的呀.然后 ...

  3. Java springboot支付宝小程序授权,获取用户信息,支付及回调

    参考官方文档https://opendocs.alipay.com/mini/introduce/pay 支付宝小程序的支付和微信小程序的支付一样第一步都是要获取到用户的唯一标识,在微信中我们获取到的 ...

  4. uni-app开发经验分享二十: 微信小程序 授权登录 获取详细信息 获取手机号

    授权页面 因为微信小程序提供的 权限弹窗 只能通用户确认授权 所以可以 写一个授权页面,让用户点击 来获取用户相关信息 然后再配合后台就可以完成登录 <button class="bt ...

  5. 微信第三方登陆,无需注册一键登录,获取用户信息,PHP实现方法

    今天讲讲利用微信oauth2实现第三方登陆的实现方法. 先说说前提吧! 首先你得是服务号,并且是经过认证的.这样微信会给你很多第三方接口的权限,如果是订阅号或者没有认证的服务号那就不用想了! 一开始你 ...

  6. PHP微信公众平台OAuth2.0网页授权,获取用户信息代码类封装demo(二)

    一.这个文件微信授权使用的是OAuth2.0授权的方式.主要有以下简略步骤: 第一步:判断有没有code,有code去第三步,没有code去第二步 第二步:用户同意授权,获取code 第三步:通过co ...

  7. php 微信公众平台OAuth2.0网页授权,获取用户信息代码类封装demo

    get_wx_data.php <?php /** * 获取微信用户信息 * @author: Lucky hypo */ class GetWxData{ private $appid = ' ...

  8. 关于微信小程序拒绝授权后,重新授权并获取用户信息

    最近公司做了一些有关微信小程序的项目,涉及到授权获取用户基本信息,但是在拒绝授权之后就不会再出现授权窗口: 看网上也有很多人遇到了同样的问题,所以记录下来我的处理方法,供大家和自己学习和记录: 当调用 ...

  9. 微信网页授权,获取微信code,获取access_tocken,获取用户信息

    微信开发中,经常有这样的需求:获得用户头像.绑定微信号给用户发信息.. 那么实现这些的前提就是授权!   1.配置安全回调域名: 在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 ...

随机推荐

  1. Kafka详解与总结(一)

    1. Kafka概述 1.1. 消息队列 1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推 ...

  2. git下

    ----------- 1. 分支管理策略 1)master分支 非常稳定的,只用来发布新版本,平时不在上面干活 2)dev分支 不稳定的,主要在上面干活,每个人都有自己的分支,时不时的往dev分支上 ...

  3. POJ 1584 计算几何

    思路: 求一遍凸包 用三角形面积(叉积求一下)/边长 求出来高,跟半径比一比 坑点:凸包上三点共线 //By SiriusRen #include <cmath> #include < ...

  4. C# 利用反射进行类型转换

    /// <summary> /// 父类转子类 /// </summary> /// <typeparam name="TParent">< ...

  5. crontab的使用

    基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...

  6. C#入门经典 Chapter5 变量的更多内容

    5.1类型转换 1.类型转换 1.1隐式转换:所有情况下可进行,编译器执行转换. 1.2显示转换 强制转换:强迫数据从一种类型转换为另一种类型. (<destinationType>)&l ...

  7. PB连接SQLITE

    sqlite3数据库,简单而功能强大,比起ini文件保存用户设置,更简单安全,为什么使用数据库存用户设置,由开发者自己去想吧进入话题:pb中可以用ole DB方式在不注册odbc的情况下直接连接数据库 ...

  8. CSS——行内元素的margin与padding

    行内元素: 1.margin:0 20px:只可以定义左右. 2.pading:20px 20px 20px 20px:上下左右都有效 例如span: <!DOCTYPE html> &l ...

  9. 查看Windows XP是否已激活的方法

    打开开始→运行, 在输入:oobe/msoobe /a,回车后系统会弹出窗口告诉你系统是否已经激活

  10. Ubuntu Mysql 常用指令

    mysql 常用指令及中文乱码解决 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...