QQ第三方登录

创建并配置工程

新建工程并导入SDK的jar文件

创建一个android项目,打开project视图模式,在根目录-app-libs的文件夹下添加open-sdk.jar文件和mta_sdk_x.x.x.jar文件,右击open-sdk.jar文件和mta_sdk_x.x.x.jar文件,选取add as library,将jar包导入到项目当中。
SDK下载地址
SDK中包含一个demo、jar、Android API调用说明书和获取签名的apk

配置AndroidManifest

在应用的AndroidManifest.xml增加配置的<application>节点下增加以下配置(注:不配置将会导致无法调用API)

<activity
android:name="com.tencent.tauth.AuthActivity" 
android:noHistory="true" 
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
//这一个是用来设置你的这个activity可以跳转到浏览器中的
<data android:scheme="tencent222222" />
//这里的222222是指我们的APPID,我这里使用的是腾讯提供的例子,
//因为自己申请开发者应用比较麻烦有需要的朋友们可以自己去处理
</intent-filter>
</activity>

SDK_V2.0引入了AssistActivity,开发者需在androidManifest.xml中注册。代码如下:

<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize" 
/>

到此为止创建并配置工程完成

实现回调函数

实现登录回调函数

    private class BaseUiListener implements IUiListener {
        @Override
        public void onComplete(Object response) {
            //这里官方给出的onComplete的方法的参数是JSONObject类型的
            // 但是我们在工程中添加的都是Object的,这里我们就用Object的,因为
            // 改成JSONObject的会报错
            //将response强制转换成JSONObject
            JSONObject result = (JSONObject) response;
            //如果返回的数据为空,则退出
            if (response == null)
                return;
            if (result != null && result.length() == 0)
                return;
            //登录成功,处理返回的数据
            doComplete(result);
        }

        protected void doComplete(JSONObject values) {
        }

        @Override
        public void onError(UiError e) {
        }

        @Override
        public void onCancel() {
        }
    }

实现获取用户信息的回调函数

    private class InfoUiListener implements IUiListener {
        @Override
        public void onComplete(Object response) {
            //这里官方给出的onComplete的方法的参数是JSONObject类型的
            // 但是我们在工程中添加的都是Object的,这里我们就用Object的,因为
            // 改成JSONObject的会报错
            //将response强制转换成JSONObject
            JSONObject result = (JSONObject) response;
            //如果返回的数据为空,则退出
            if (response == null)
                return;
            if (result != null && result.length() == 0)
                return;
            //登录成功,处理返回的数据
            doComplete(result);
        }

        protected void doComplete(JSONObject values) {
        }

        @Override
        public void onError(UiError e) {
        }

        @Override
        public void onCancel() {
        }
    }

这里的代码和上面的代码一样,因为最重要的部分doComplete还没写,在这里特别注意的是doComplete使用protected修饰的,在以后新建的BaseUiListener 和InfoUiListener 对象中需要重写这个方法。

QQ登录并获取用户信息

创建Tencent实例

mTencent = Tencent.createInstance(APP_ID,this.getApplicationContext());
// 其中APP_ID是分配给第三方应用的appid,类型为String。
// 1.4版本:此处需新增参数,传入应用程序的全局context,
//可通过activity的getApplicationContext方法获取

创建登录回调实例

BaseUiListener baseUiListener = new BaseUiListener(){
            //重写doComplete方法
            @Override
            protected void doComplete(JSONObject values) {
                try {
                    //如果ret=-1,则为登录失败
                    if (values.getInt("ret")==0) {
                        String token = values.getString(Constants.PARAM_ACCESS_TOKEN);
                        String expires = values.getString(Constants.PARAM_EXPIRES_IN);
                        String openID = values.getString(Constants.PARAM_OPEN_ID);
                        //**下面这两步设置很重要,如果没有设置,返回为空**
                        mTencent.setOpenId(openID);
                        mTencent.setAccessToken(token, expires);
                        //获取用户信息
                        getuserInfo();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();

                }
            }
        };

实现登录

if (!mTencent.isSessionValid())
            mTencent.login(this,Scope,loginUiListener);

到此完成QQ的登录

创建UserInfo实例

UserInfo qqInfo = new UserInfo(getContext(),mTencent.getQQToken());

创建获取其用户信息回调实例

InfoUiListener infoUiListener = new InfoUiListener(){
            //重写doComplete方法
            @Override
            protected void doComplete(JSONObject values) {
                super.doComplete(values);
                //这里用到的是Gson解析Json数据,详细的Gson解析,这不多说,
                //我们获取到的信息很多,我选择了一些输出
                Gson gson = new Gson();
                userData = gson.fromJson(values.toString() , UserData.class);
                System.out.println(userData.getCity());
                System.out.println(userData.getFigureurl_qq_1());
                System.out.println(userData.getGender());
                System.out.println(userData.getNickname());
                System.out.println(userData.getProvince();
            }
        };

我们获取到的用户信息包括

{
//is_yellow_year_vip代表的是是否为年费黄砖VIP
"is_yellow_year_vip": "0",
"ret": 0,
//figureurl_qq_1代表的是QQ头像,大小为40
"figureurl_qq_1":
"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/40",
//figureurl_qq_2代表的是QQ头像,大小为40
"figureurl_qq_2":
"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
//nickname代表的是QQ昵称
"nickname": "小罗",
//yellow_vip_level代表的是黄砖的VIP等级
"yellow_vip_level": "0",
"msg": "",
//figureurl_1代表的是QQ空间的头像,大小为50
"figureurl_1":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/50",
"vip": "0",
"level": "0",
//figureurl_2代表的是QQ空间头像,大小为100
"figureurl_2":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
//is_yellow_vip代表的是是否为黄砖
"is_yellow_vip": "0",
//gender代表的是性别
"gender": "男",
figureurl代表的是QQ空间头像,大小为30
"figureurl":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/30"
}

获取用户信息

qqInfo.getUserInfo(InfoUiListener);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339

推荐阅读更多精彩内容

  • 1. 注册成为开发者,创建应用,获取appid,这个appid后面要用到。详情步骤请查看官网链接 2.在你的And...
    丶Lost_Deer阅读 2,190评论 0 3
  • qq登录有很多方式,在这里做一个笔记记录一下qq的第三方登录,并且获取到个人信息首先在腾讯的开发者平台注册开发者账...
    不识水的鱼阅读 1,219评论 0 12
  • QQ互联 JS-SDK 对于自己最近在做QQ第三方登录的过程过个简单的总结和笔记。方便自己以后的记忆也希望可以帮...
    浩3108阅读 7,727评论 8 11
  • 准备工作_OAuth2.0 接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程...
    君惜丶阅读 7,985评论 7 29
  • 前言 最近在公司应用中集成QQ登录的时候遇到一些波折(坑点),觉得还是有必要记录一下. 一.集成SDK 1.集成官...
    herbsun阅读 24,541评论 43 53