美文网首页
QQ第三方登录

QQ第三方登录

作者: 濺m | 来源:发表于2017-03-28 13:34 被阅读0次

创建并配置工程

新建工程并导入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);

相关文章

  • 记一次错误 :三方登录退出&H5交互无法调起&HTTP401错误

    场景①: 登录qq1 ,退出登录,再切换qq2,登录后还是显示qq1的信息 解决①: 第三方登录, 退出app记得...

  • 网站接入QQ第三方登录

    第三方网站主要通过使用“QQ登录”接入QQ互联开放平台。“QQ登录”是QQ互联开放平台提供给第三方网站的一种服务。...

  • 登录-QQ登录-流程分析

    登录-QQ登录-流程分析 目的:掌握第三方登录的实现流程。 描述一下我们要做的事情: 在登录页面,QQ登录图片处,...

  • 第三方登录梳理

    QQ 第三方登录 目的: 优化用户登录体验 流程: 按流程 : 用户方面: 用户 点击 QQ登录 按钮 用户 扫码...

  • Android之第三方平台实现QQ登录和QQ分享

    目前大多数APP都包含了第三方平台的登录,特别是QQ和微信,这篇博客主要讲的是如何实现QQ第三方平台实现QQ登录和...

  • 友盟第三方平台登录与分享

    友盟第三方登录 一、概述第三方登录主要用于简化用户登录流程,通过用户拥有的微博、QQ、微信等第三方账号进行登录并且...

  • 第三方登录

    3.3 第三方登录 第三方登录,国内常用的第三方登录有:qq、微信、微博三个社交平台。国外常见的有Facebook...

  • QQ第三方登录基本原理

    一、QQ登录:申请APPID和APPKey:QQ互联 http://connect.qq.com 二、PHP第三方...

  • iOS电商项目之登录注册

    登录注册分为第三方登录(QQ、微信),立即注册、免密登录、忘记密码,整个模块细节非常多。 登录注册 登录注册 想要...

  • QQ、微信的社会化SDK接入实践

    第三方登录的意义 现在很多 App 都支持第三方登录,比如用 QQ 和微信登录到 App。这样免去了注册帐号的麻烦...

网友评论

      本文标题:QQ第三方登录

      本文链接:https://www.haomeiwen.com/subject/axrjottx.html