Android应用之——最新版本号SDK V2.4实现QQ第三方登录
为什么要写这篇博客呢?由于。我在做这个第三方登录的时候,找了非常多资料,发现要么就是过时了。要么就是说的非常不清楚。非常罗嗦。并且非常多都是一些小demo,不是什么实例。甚至连腾讯官方的文档都有这个问题,文档中非常多地方用的不是最新的sdk写的演示样例,用最新版本号的sdk发现根本没法达到预期的效果。非常多api已经发生了变化,demo还是用的原来的api中的方法。最坑爹是demo下载下来还要一个支持的库文件,可是sdk中又没有提供。。
自己跌跌撞撞。查找资料,整合,弄了几个小时,最终把它给整出来了。用在了开发的项目上面。达到了预期的效果。请看效果图:
以下来说下怎么实现的。尽量贴上所有代码,并解释清楚
点击登录界面的QQ图标。触发调用第三方的事件
代码例如以下:
findViewById(R.id.iv_tencent_login).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mTencent = Tencent.createInstance(
AppConst.TENCENT_APP_ID,getApplicationContext());
<span style="white-space:pre"> </span>mTencent.login(E_SigninActivity.this,AppConst.TENCENT_SCOPE, new BaseUiListener());
}
});
当中 onclick中的几句代码就是调用QQ登录的过程
Tencent.createInstance(AppConst.TENCENT_APP_ID,getApplicationContext());
这句代码得到Tencent实例。我们就是利用这个实例的login方法来 触发QQ登录的。
上面的creatInstance方法有两个參数,第一个參数就是你的APP_ID 这个是要在腾讯开放平台申请的,详细怎么申请能够參考开放平台的介绍。
第二个參数是一个全局的context上下文
以下来看第二句代码
mTencent.login(E_SigninActivity.this,AppConst.TENCENT_SCOPE, new BaseUiListener());
通过这句代码,SDK实现了QQ的登录。这种方法有三个參数。第一个參数是context上下文,第二个參数SCOPO 是一个String类型的字符串,表示一些权限
官方文档中的说明:应用须要获得哪些API的权限。由“,”分隔。
比如:SCOPE = “get_user_info,add_t”;全部权限用“all”
第三个參数。是一个事件监听器,IUiListener接口的实例,这里用的是该接口的实现类
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3NyX3lhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
调用login方法后,就会监听登录事件。登录成功或者失败后,会回调监听器里面的几个方法,详细请看以下
private class BaseUiListener implements IUiListener {
private String nickname;
@Override
public void onComplete(Object response) {
Toast.makeText(getApplicationContext(), "回调成功", 0).show();
JSONObject responseJsonobject = (JSONObject) response;
final String openid = responseJsonobject.optString("openid");
final String access_token = responseJsonobject.optString("access_token");
final String expires_in = responseJsonobject.optString("expires_in");
Log.i(TAG, response.toString());
QQToken qqToken = mTencent.getQQToken();
UserInfo info = new UserInfo(getApplicationContext(), qqToken);
info.getUserInfo(new IUiListener() {
@Override
public void onError(UiError arg0) {
// TODO Auto-generated method stub
}
@Override
public void onComplete(Object response) {
// TODO Auto-generated method stub
JSONObject jsonObject = (JSONObject) response;
nickname = jsonObject.optString("nickname");
/** QQ登录成功后,获取相关信息,登录应用*/
loginModel.loginFromWeiboAndQQ("qq", openid, access_token,
expires_in, nickname, BeeFrameworkApp.getInstance().getImei(),
SharedPrefsUtil.getString(E_SigninActivity.this,
AppConst.LATITUDE), SharedPrefsUtil.getString(
E_SigninActivity.this, AppConst.LONGITUDE));
}
@Override
public void onCancel() {
// TODO Auto-generated method stub
}
});
}
@Override
public void onError(UiError e) {
}
@Override
public void onCancel() {
}
}
当自己定义的监听器实现IUiListener接口后。必需要实现接口的三个方法,onComplete onCancel onError
分别表示第三方登录成功,取消 。错误。
我们在QQ登录成功后要进行的兴许操作就是写在onComplete方法里面的,在这里进行开发就可以。
onComplete的參数response封装了一些关键的信息。详细信息例如以下图所看到的:
普通情况下。QQ登录成功了,我们还想获取一些QQ的基本信息。比方昵称,头像什么的。这个时候怎么办?
sdk给我们提供了一个类UserInfo,这个类中封装了QQ用户的一些信息,我么能够通过这个类拿到这些信息
怎样得到这个UserInfo类呢?
QQToken qqToken = mTencent.getQQToken();
UserInfo info = new UserInfo(getApplicationContext(), qqToken);
得到了userInfo对象后,调用它的getUserInfo(iuilistener)方法就能够得到用户的基本信息
info.getUserInfo(new IUiListener() {
@Override
public void onError(UiError arg0) {
// TODO Auto-generated method stub
}
@Override
public void onComplete(Object response) {
// TODO Auto-generated method stub
Log.i(TAG, response.toString());
JSONObject jsonObject = (JSONObject) response;
nickname = jsonObject.optString("nickname");
/** QQ登录成功后,获取相关信息,登录应用*/
loginModel.loginFromWeiboAndQQ("qq", openid, access_token,
expires_in, nickname, BeeFrameworkApp.getInstance().getImei(),
SharedPrefsUtil.getString(E_SigninActivity.this,
AppConst.LATITUDE), SharedPrefsUtil.getString(
E_SigninActivity.this, AppConst.LONGITUDE));
}
@Override
public void onCancel() {
// TODO Auto-generated method stub
}
});
获取用户信息成功后,相同会调用onComplete方法,它的第一个參数response就封装了用户的信息,它事实上是一个json格式的字符串。在之前的版本号中是json格式的,新版本号改为了Object。可是我们还是能够把它强转成JSONObject 然后取当中的字段。从下图能够看出它里面的全部信息。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3NyX3lhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
我们临时仅仅须要nickname昵称,所以通过optstring得到nickname
JSONObject jsonObject = (JSONObject) response;
nickname = jsonObject.optString("nickname");
得到我们想要的所有信息后,就能够在oncomplete中进行其它一些登录的操作了
QQ第三方登录的过程基本就是这个样子了,当然API里面还有非常多其它的方法,response里面还有非常多其它信息。大家也能够去挖掘。找到自己想要的,为我所用。
本篇博客到这里就结束了,希望能帮到你。
友情提示:转载请注明出处
Android应用之——最新版本号SDK V2.4实现QQ第三方登录的更多相关文章
- Android 实现QQ第三方登录
Android 实现QQ第三方登录 在项目中需要实现QQ第三方登录,经过一番努力算是写出来了,现在总结以下,以防以后遗忘,能帮到其他童鞋就更好了. 首先肯定是去下载SDK和DEMO http://wi ...
- 安卓Android第三方登录-QQ登录
要实现QQ第三方登录,其实只需要一个封装类:QQLoginManager 几乎 三行代码 就实现QQ登录功能 这里先给出Github开源项目地址,项目下有详细的使用说明 下面就开始详细说一说怎么实 ...
- 实现QQ、微信、新浪微博和百度第三方登录(Android Studio)
前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取AppK ...
- Android ShareSDKQQ 第三方登录so easy?
昨天群里有个群友看到我之前做的那个qq第三方登录怎么做的,于是乎思考了一下,还是决定写一篇博客记录下.事实上都不难的,事实上之前我又写到FaceBook的第三方登录不知道看下这Android集成Fac ...
- Unity利用Share SDK实现QQ、微信及微博第三方登录及定制内容分享(附代码)
最近因为公司的项目需要添加一些实用性的功能,需要添加第三方登录及分享,采用的是Mob的SDK,可以先到其官网下载对应的SDK 点击这里,为了方便后期进行数据统计和分析,所以可以先添加一个应用,添加成功 ...
- [置顶]
Android ShareSDKQQ 第三方登录so easy?
昨天群里有个群友看到我之前做的那个qq第三方登录怎么做的,于是乎思考了一下,还是决定写一篇博客记录下,其实都不难的,其实之前我又写到FaceBook的第三方登录不知道看下这Android集成FaceB ...
- Android 实现QQ、微信、新浪微博和百度第三方登录
前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取AppK ...
- Android记录16-友盟第三方登录、分享实现
Android开发记录16-友盟第三方登录.分享实现 2014年博客之星,投票地址username=wwj_748#content" style="font-family: Kai ...
- Gprinter Android SDK V2.1.4 使用说明
佳博打印机Android的SDK开发包,已更新到Gprinter Android SDK V2.1.4. IOS的SDK开发包更新为GprinterSDKandDemoforIOS_v1.0.8. 根 ...
随机推荐
- 【容器人必看】你一定要来 ECUG Con 2018 的三个理由!
引领国内云领域风向的高端峰会 ECUG Con 2018,即将在 12 月 22-23 日 深圳南山 全新启程!如果你的工作和容器内容相关联,如果你的兴趣和容器技术有交集,如果你是「容器人」,那么这就 ...
- 算法复习——数位dp(不要62HUD2089)
题目 题目描述 杭州人称那些傻乎乎粘嗒嗒的人为 62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司 ...
- 常州模拟赛d3t1 神在夏至祭降下了神谕
题目描述 我们村子在过去的400年中,断绝与下界的接触,过着自给自足的生活. 夏至祭是一场迎接祖灵于夏季归来,同时祈求丰收的庆典. 村里的男人会在广场上演出夏之军和冬之军的战争.夏之军会打倒冬之军的大 ...
- 【bzoj2733】[HNOI2012]永无乡 线段树合并
Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...
- css-包含块
在CSS中,有事一个元素的位置和尺寸的计算都相对于一个矩形,这个矩形被称作包含块.包含块是一个相对的概念,比如 子元素的初始化布局总是在父元素的左上角,这就是一个相对的概念.其中父元素就是一个参照物, ...
- Mongodb_分片集群模式
前面介绍的副本集模式实现了数据库高可用. 但是还是存在的问题是: 所有的从节点都是从主节点全面拷贝,这样数据量过大时,从节点压力大.还有就是海量数据时存在硬件瓶颈, 毕竟每一个机器的存储量总是有限的. ...
- [转]JVM 堆内存设置原理
堆内存设置 原理 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...
- TCP/IP 协议栈
TCP(传输控制协议) 传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义. 在因特 ...
- slf4j 搭配 log4j2 处理日志
目录 关于 log4j 关于 slf4j 案例使用 关于 log4j Log4j + Slf4j 的使用组合最为常见,但是我们知道 Log4j 目前已经停止更新了.Apache推出了新的 Log4j2 ...
- [转] SQL Server中变量的声明和使用方法
原文地址 SQL Server中变量的声明和使用方法 声明局部变量语法: DECLARE @variable_name DataType 其中 variable_name为局部变量的名称,DataTy ...