雷袭-----qq第三方登录,让你闪电进入app

来源:互联网 发布:人工神经网络算法 编辑:程序博客网 时间:2024/04/29 17:09

现在很多应用都已经涉及到  第三方登录了,他的使用能更方便大家进入app,不用繁琐的输入密码,那么今天就来探索下  QQ 的三方登录。


首先,大家在白度上 搜  “腾讯开放平台”,进入以下界面:



在 ‘’联系我们‘ 的旁边有登录的,将你的qq开发者账号登上,然后进入 资料库 标签,api文档,下面有 sdk 下载,然后下载最新的官方文档,我是下的 sdk_V_3.1.0,当然,你的

app也是要创建的,在开发者应用管理里面会有你的 app_id  和 app_key


这一切搞定之后就是配置了,我觉得 qq的官方文档真是够烂啊,官方文档,下的demo以及demo中的文档介绍,都不配套。搞起来甚是郁闷啊。好吧,接下来讲配置

解压 sdk 解压后是这样的:


里面有两个jar 包,mta-sdk-1.6.2.jar 和 open_sdk_r5756.jar,都导入到你的工程中。


接下来配置 MainActivityfast.xml

MainActivityfast 中需要原封不动的加入两个 activity,com.tencent.tauth.AuthActivity  和  com.tencent.connect.common.AssistActivity,代码如下:

    <application        android:name="com.example.androidtexta.BaseApplication"        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name=".MainActivity"            android:label="@string/app_name"            android:configChanges="orientation|keyboardHidden|screenSize|navigation"            android:screenOrientation="portrait">            <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="tencent2222222" />            </intent-filter>        </activity>         <activity            android:name="com.tencent.connect.common.AssistActivity"            android:configChanges="orientation|keyboardHidden"            android:screenOrientation="behind"            android:theme="@android:style/Theme.Translucent.NoTitleBar" />                    </application>

注意:首先com.tencent.tauth.AuthActivity  和  com.tencent.connect.common.AssistActivity的添加包路径是固定的,在 AuthActivity 下面有一个 

<data android:scheme="tencent2222222" />
不能忘掉,其中 scheme="xxxxxxx" 中 tencent 是固定的,22222 为你的 app_id,记住是 app_id  不是app_key !上面两个 类只需要按我那样复制进去,改改 app_id就行


当然,不能忘了网络权限,由于我只做登陆,暂时只用到了两个权限,大家这个可以参考官方文档,根据需要添加  我的权限是

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name="android.permission.INTERNET" />


一切就绪,现在我们要开始进入正题了,此处只做一个简单的点击 登陆 button,获得 个人信息的昵称和 图像,以及登陆成功后获得的登陆基本信息

Ok,下面接着说


首先当然是  qq 登陆的注册,代码如下


private Tencent mTencent;private String mAppId;private UserInfo mUserInfo;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.i("","=====create====");setConfig();initView();initData();setListener();}private void setConfig() {mAppId ="2222222";// 注册QQmTencent=Tencent.createInstance(mAppId, MainActivity.this);}
我们在 oncreate 中 对  mTencent 进行初始化,此时需要用到 app_id。

然后是 button 点击时的 登陆方法:

private void setListener() {mButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//登陆mTencent.login(MainActivity.this, "all", new QQListener());}});}

登陆方法 是 mTencent.login(MainActivity.this, "all", new QQListener()); 其中三个参数:第一个是  上下文,第二个是 权限,此处是 “all”,表示所有权限,第三个参数是 登陆的回调,我们登陆的结果是在这个类中处理的,QQListener 是自己写的实现 IUiListener 的 一个类


ok,再看看   QQListener  类的实现 

/**获得登陆的基本信息**/class QQListener implements IUiListener{        //登陆成功@Overridepublic void onComplete(Object obj) {Log.i("","======登陆成功======="+obj.toString());QQLoadInfo qQLoadInfo=JsonParserUtil.getQQLoadInfo(obj.toString());//设置openid和token,否则获取不到下面的信息String openId=qQLoadInfo.getOpenid();String token = qQLoadInfo.getAccess_token();String expires = qQLoadInfo.getExpires_in();mTencent.setAccessToken(token, expires);                        mTencent.setOpenId(openId);mUserInfo=new UserInfo(MainActivity.this, mTencent.getQQToken());mUserInfo.getUserInfo(new UserInfoListener());}//登陆取消@Overridepublic void onCancel() {// TODO Auto-generated method stub}        //登陆失败@Overridepublic void onError(UiError arg0) {// TODO Auto-generated method stub}}

QQListener 实现 IUiListener 时有三个方法,如上,故名思议,分别是 登陆成功,取消和失败。现在主要来看看 成功后的处理,即 onComplete(Object obj) 方法

Log.i("","======登陆成功======="+obj.toString()); 返回的数据大概是这样的:

{  "ret": 0,  "pay_token": "xxxxxxxxx",  "pf": "xxxxxxxxxxxxx",  "query_authority_cost": xxx,  "authority_cost": x,  "openid": "xxxxxxxxxxxx",  "expires_in": xxxxxxxxxx,  "pfkey": "xxxxxxxxxxxx",  "msg": "",  "access_token": "xxxxxxxxx",  "login_cost": xxx}


这里需要强调一点,在某些低端机上调用登录后,由于内存紧张导致 APP 被系统回收,登录成功后无法在 onComplete(Object obj) 方法中获得登陆信息,这时需要重写 activity的 onActivityResult 方法,如下:

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {//在某些低端机上调用登录后,由于内存紧张导致 APP 被系统回收,登录成功后无法成功回传数据,需要重写onActivityResultif (requestCode == Constants.REQUEST_LOGIN) {Tencent.onActivityResultData(requestCode,resultCode,data,new QQListener());}super.onActivityResult(requestCode, resultCode, data);}

这样处理以后,你的 QQListener 方法中就可以 获得 登陆后的信息了,OK,下面继续讲 QQListener 类。


QQListener 类返回成功的 obj后,我用 gson 解析,封装到  QQLoadInfo 对象中了,这只是 登陆后获得的基本数据, qq的 sdk 为我们 提供了一个 userInfo 类,当中会涉及到 用户的一些基本信息,

如 图像的 url ,性别,省份,昵称等。那么下边这段代码很关键:

QQLoadInfo qQLoadInfo=JsonParserUtil.getQQLoadInfo(obj.toString());//设置openid和token,否则获取不到下面的信息String openId=qQLoadInfo.getOpenid();String token = qQLoadInfo.getAccess_token();String expires = qQLoadInfo.getExpires_in();mTencent.setAccessToken(token, expires);            mTencent.setOpenId(openId);mUserInfo=new UserInfo(MainActivity.this, mTencent.getQQToken());mUserInfo.getUserInfo(new UserInfoListener());

我们需要 获得 userInfo ,而  userInfo 初始化需要 mTencent 的帮助,所以 “设置openid和token,否则获取不到下面的信息” 非常重要,因为不设置的话,

mUserInfo=new UserInfo(MainActivity.this, mTencent.getQQToken());
执行获得的 mUserInfo会为空

ok,现在我们已经获得 不为空的  mUserInfo 了,那么get 到用户信息,我们还要用到 UserInfo 的另一个方法:

mUserInfo.getUserInfo(new UserInfoListener());

方法很简单,里面也是一个监听类 UserInfoListener

很遗憾,我们这个 UserInfoListener 类也 实现了 IUiListener 接口,其代码为:

/**获得qq登陆用户信息**/class UserInfoListener implements IUiListener{@Overridepublic void onComplete(Object obj) {// TODO Auto-generated method stubLog.i("","======用户信息======="+obj.toString());//figureurl_qq_2为用户图像的urlQQUserInfo qQUserInfo=JsonParserUtil.getQQUserInfo(obj.toString());Log.i("","===用户信息===="+qQUserInfo.getFigureurl_qq_2());Log.i("","===用户信息===="+qQUserInfo.getNickname());}@Overridepublic void onCancel() {// TODO Auto-generated method stub}@Overridepublic void onError(UiError arg0) {// TODO Auto-generated method stub}}

此处 返回的用户信息大概是这样的:

{    "is_yellow_year_vip": "x",    "ret": x,    "figureurl_qq_1": "http://xxxxxxxxx",    "figureurl_qq_2": "http://xxxxxxxxxxx",    "nickname": "xxxxxxx",    "yellow_vip_level": "x",    "is_lost": x,    "msg": "",    "city": "xxx",    "figureurl_1": "http://xxxxxxxxxx",    "vip": "x",    "level": "x",    "figureurl_2": "http://xxxxxxxxxxxxxxxxxxx",    "province": "xxxxxx",    "is_yellow_vip": "xxxxx",    "gender": "xxxxx",    "figureurl": "http://xxxxxxxxxxx"}

我也是将其解析后封装在 自己写的 QQUserInfo 类中,然后通过 

Log.i("","===用户图像 url===="+qQUserInfo.getFigureurl_qq_2());Log.i("","===用户昵称===="+qQUserInfo.getNickname());
获得用户的 图像 url 和 昵称,当然,你也可以 根据上面的 json 数据获得更多个人信息


那么接下来的 通过 url 获取 bitmap 以及 昵称和 bitmap 的显示 我就不多讲了,需要注意的是 bitmap 通过 url 获取 图像,是要重开线程获取的,另外 昵称和 图像的显示要从线程中传到 handler  中显示


需要注意的是,全部做完以后,测试的时候开始都是测试的开发者自己的qq号,需要你将做好的app在腾讯开发者平台上发布经审核之后,才能正常使用


      OK,今天就说这么多,感觉腾讯 qq 的文档是 一团糟啊,各种坑,唉!







1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 纹眉没有修复霜怎么办 衣服搞到走珠露香水洗不掉怎么办 涂牙膏把脸烧伤怎么办 月经血排不出来怎么办 猫眼角膜掉了一块怎么办 腰酸痛直不起腰怎么办 白血病移植后复发了怎么办 斐讯k2红灯常亮怎么办 洗衣机把烟洗了怎么办 吸烟吸的恶心想吐怎么办 显示双方信息的明细怎么办 电脑关不了机了怎么办 xp系统关不了机怎么办 灯的开关闭不了怎么办 灯的开关按不动怎么办 灯开关按不动了怎么办 灯的开关摁不动怎么办 微信群500人满了怎么办 作业帮搜不到题目怎么办呢 金融社保卡密码忘了怎么办 工作未完想从国企辞职怎么办 宫腔粘连术后流血多怎么办 宫腔粘连术后一直流血怎么办? cad图框放不下图怎么办 简历假的入职怎么办 脱贫攻坚怎么看怎么办怎么干 吃的下没力气怎么办 恢复留查公示后怎么办 微语简报删了怎么办 小学生未完成作业作为老师怎么办 抽调人员想回原单位怎么办 扫码支付没成功怎么办 成都电表卡丢了怎么办 社保未满15年怎么办 60岁社保没交满15年怎么办 柴油车dpf是亮了怎么办 贴双眼皮贴眼睛肿了怎么办 送孩子赴澳洲家长怎么办签证? 开指过程中发烧怎么办 大水口热流道有料花怎么办 奶奶疼外孙胜过孙子怎么办