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增加配置的节点下增加以下配置(注:不配置将会导致无法调用API)






//这一个是用来设置你的这个activity可以跳转到浏览器中的

//这里的222222是指我们的APPID,我这里使用的是腾讯提供的例子,
//因为自己申请开发者应用比较麻烦有需要的朋友们可以自己去处理


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


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

实现回调函数

实现登录回调函数

    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);

你可能感兴趣的:(QQ第三方登录)