雷袭-----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 类。
如 图像的 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 的文档是 一团糟啊,各种坑,唉!
- 雷袭-----qq第三方登录,让你闪电进入app
- 实现app第三方QQ授权登录
- QQ第三方登录
- QQ第三方登录
- QQ第三方登录
- QQ第三方登录
- QQ第三方登录
- 第三方qq登录
- QQ第三方登录
- QQ第三方登录
- QQ第三方登录
- 第三方登录QQ
- QQ第三方登录
- qq第三方登录
- qq第三方登录
- 第三方QQ登录
- QQ第三方登录
- qq第三方登录
- 面试(一)
- .trim() in JavaScript not working in IE
- Zxing二维码-引用QRCode类库
- hive1.2启动报错jline
- 【分享】性能比肩美拍秒拍的Android视频录制编辑特效解决方案【2】
- 雷袭-----qq第三方登录,让你闪电进入app
- POST 请求的跨域实现
- 笔记 1 :HTML
- JSON解析 初识
- 7.22 O HDU-1166 敌兵布阵
- NSCharacterSet 对于字符串的处理
- jQuery EasyUI 1.5版本的Datagrid终于新增了表格加载的数据没有记录的时候,可显示“无记录”的提示语
- RxJava合并Observable——merge和mergeDelayError操作符
- android开发校招