QQ在Android端登录也太操蛋了吧
2016-03-21 20:55
381 查看
谢谢 http://blog.csdn.net/twilight041132/article/details/39619549 然后加上了自己遇到的坑和心得。总而言之,腾讯开放平台恶心,药丸。前一段时间在Android应用中实现了QQ授权登录功能,虽然腾讯开放平台中有详细文档,看完后也觉得很简单,实际操作中却折腾了挺久才搞定!本来开始不熟悉的时候参照Demo来实现是很容易的,奈何官网给的最新的示例代码编译都有问题!这里要吐槽一下官网了,连SDK的版本都不清晰,我已经下了几个版本的SDK了,每次下载的时候都认为是最新的,结果后面发现不是!目前认为最新版本是V2.6, 在这里提供下载。不过用这个SDK还是编译有问题,字符编码问题,找不到宏的问题等。最后还是用旧的SDK版本(V1.5),运行Demo正常,参照它来很快就实现了。关于QQ授权登录的实现,官网有详细描述,点击链接 。这里根据自己的实现过程简单介绍一下整个过程:1. 注册成为开发者,创建应用,获取appid,这个appid后面要用到。详情步骤请查看官网链接2. 在你的Android工程中导入SDK库文件 open_sdk.jar (SDK V1.5 下载地址:点击这里,需要2分,没分的朋友可以到我空间的资源中下载)3. 配置AndroidManifest申请权限,加入appid,声明SDK中的activity4. 创建Tencent类实例,实现回调接口IUiListener,IRequestListener5. 调用QQ登录接口调用Tencent.login(this, Scope, listener)其中listener是IUiListener接口,在登录成功后会调用onComplete回调,返回类似下面格式的JSONObject对象:{"ret":0, //表示登录成功"pay_token":"xxxxxxxxxxxxxxxx","pf":"openmobile_android","expires_in":"7776000","openid":"xxxxxxxxxxxxxxxxxxx","pfkey":"xxxxxxxxxxxxxxxxxxx","msg":"sucess","access_token":"xxxxxxxxxxxxxxxxxxxxx"}6. 获取用户信息在登录成功后,调用如下接口获取用户信息,此时的listener是IRequestListener接口Tencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO, null, Constants.HTTP_GET,new BaseApiListener("get_simple_userinfo", false), EVENT_GET_USER_INFO)获取成功后SDK会调用IRequestListener的onComplete回调,返回类似下面的JSON数据{"is_yellow_year_vip": "0","ret": 0,"figureurl_qq_1":"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/40","figureurl_qq_2":"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100","nickname": "小罗","yellow_vip_level": "0","msg": "","figureurl_1":"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/50","vip": "0","level": "0","figureurl_2":"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100","is_yellow_vip": "0","gender": "男","figureurl":"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/30"}到这里已经基本完成了QQ授权登录。有几个问题还需要注意:1.appid的有效性(这一条是我的血泪史,)应用要上线并且通过审核后,使用的appid才可以正常进行QQ授权,否则只有你注册的QQ号可以成功授权登录,换其他QQ号登录时授权会失败。解决办法:a.应用申请上线,不过有的应用需要提供软件著作权b.设置协作者账号(点击官网说明,默认情况是注册的QQ为协作者帐号,可以添加多个)c.使用官网给的测试用的appid(222222)2.没有调用回调如果发生这种情况,检查一下这一条:应用调用Andriod_SDK接口时,如果要成功接收到回调,需要在调用接口的Activity的onActivityResult方法中增加如下代码:@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {
//已经过时了,然而文档中却没有说明 //tencent.onActivityResult(requestCode, resultCode, data) ; // 官方文档没没没没没没没没没没没这句代码, 但是很很很很很很重要, 不然不会回调! Tencent.onActivityResultData(requestCode, resultCode, data, loginListener);}
相关文章推荐
- android 左侧导航栏SlidingFragmentActivity
- 异常:java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.view.
- Android下pm 命令详解
- Android launcher3 开发初始篇
- android shape的使用
- android开发系列之MVP设计模式
- Android学习之轻量级数据库SQLite
- Android Studio 快捷键
- Android中RelativeLayout和LinearLayout性能分析
- android BaseFragment 工具类
- android:configChanges属性
- Android新手入门2016(10)--GridView
- Android 多线程下载
- 【android】Adapter 的 convertView 复用浅析
- Android的WoWoViewPager动画库
- Android中dip、dp、sp、pt和px的区别
- Android如何处理SVG文件
- Android 之自定义控件样式在drawable文件夹下的XML实现
- 查看Android任意可执行文件的工具ClassyShark
- 【转】Android Studio下加入百度地图的使用 (一)——环境搭建