Android安卓应用实现QQ第三方登入

前天实现了网站的第三方QQ登入,今天在家贼无聊于是试着实现一下移动应用的第三方登入。我看了一下腾讯开发平台的SDK文档,其中有一部分无法看懂,不过我最终还是成功拿到用户的基本信息,所以没有继续专研(懒)。编写的例子已上传。下面我将自己的实现过程分享给大家。

准备工作:

(1)申请移动应用APP,和前天网站应用实现QQ登入的申请过程差不多,其中的应用包名和签名可以用AppManager获取:
将AppManager安装在手机上,选择你的应用复制就行了。如图:

申请成功后就获取到APP ID了

(2)下载官方的相关的SDK将里面的open_sdk.jar放到Android项目的libs目录下,点击右键Add as Library导入。

(3)在AndroidManifest.xml的<manifest>标签中加入下面相关的代码来添加权限等信息。如下:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!-- AuthActivity文件在jar中 -->
<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="tencent加上你的APPID" />
    </intent-filter>
</activity>

<!-- AssistActivit文件在jar中 -->
<activity
    android:name="com.tencent.connect.common.AssistActivity"
    android:configChanges="orientation|keyboardHidden"
    android:screenOrientation="behind"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

其中这两个Activity文件在jar中,不用自己创建。

准备工作完成了,接下来开始敲代码耶耶耶。

 

实现过程:

第一步:编写一个继承IuiListener接口的类LoginBack,当登入成功时则会调用该类的onComplete方法,代码如下:

public class LoginBack implements IUiListener {
        //登入QQ成功执行该方法
        @Override
        public void onComplete(Object o) {
            //参数o就是授权相关的json数据
            Toast.makeText(MainActivity.this,"授权成功",Toast.LENGTH_SHORT).show();
            try {
                JSONObject obj = new JSONObject(o.toString());
                String openID = obj.getString("openid");
                String accessToken = obj.getString("access_token");
                String expires = obj.getString("expires_in");

                tencent.setOpenId(openID);
                tencent.setAccessToken(accessToken, expires);
                QQToken qqToken = tencent.getQQToken();

                UserInfo user = new UserInfo(getApplicationContext(), qqToken);
                //获取用户信息调用
                user.getUserInfo(new IUiListener() {
                    //获取用户信息成功调用该方法
                    @Override
                    public void onComplete(Object response) {
                        
                        //参数response就是用户信息的json数据
                        Toast.makeText(MainActivity.this,"获取用户信息成功",Toast.LENGTH_SHORT).show();

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }

                    @Override
                    public void onError(UiError uiError) {
                        Toast.makeText(MainActivity.this,"获取信息失败",Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onCancel() {
                        Toast.makeText(MainActivity.this,"取消获取信息",Toast.LENGTH_SHORT).show();
                    }
                });
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }

        @Override
        public void onError(UiError uiError) {
            Toast.makeText(MainActivity.this,"授权失败",Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel() {
            Toast.makeText(MainActivity.this,"取消登入",Toast.LENGTH_SHORT).show();
        }

第二步:编写一个Activity类文件,在类中声明的对象。如下:

//Tencent是调用QQ登入等操作的类
private Tencent tencent=null;
//前面声明的类,在QQ登入后会调用其中的方法
private LoginBack back=null

第三步:在该Activity中的onCreate方法中初始化上一步的对象:

tencent=Tencent.createInstance("你的APPID",this.getApplicationContext());
back=new LoginBack();

第四步:在该Activity中加入相关回传数据的方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //这里不能用onActivityResult方法,本人测试调用QQ无反应
    tencent.onActivityResultData(requestCode,resultCode,data,back);  
}

第五步:在按钮点击事件中加入下面代码来调用QQ登入:

if(!tencent.isSessionValid()){
    tencent.login(MainActivity.this,"all",back);
}

然后就大功告成了。

其他:在Activity文件的退出登入按钮点击事件中加入下面代码,实现退出登入:

tencent.logout(this);

当登入成功就会执行back中的onComplete方法:

授权成功调用该方法的参数o代表的json数据是:

{
"ret":0,
"openid":"5E3BDxxxxxxxxxxxx960354FA570221",
"access_token":"769E0xxxxxxxxxxxxxxxxxx35932",
"pay_token":"5D3D380xxxxxxxxxxxxxxxxxxD1A01A54C9",
"expires_in":7776000,
"pf":"desktop_m_qq-16600144-android-266-",
"pfkey":"d5bc227xxxxxxxxxxxxx0063164f",
"msg":"",
"login_cost":60,
"query_authority_cost":173,
"authority_cost":866,
"expires_time":1573806660111
}

获取用户成功调用该方法的参数reponse代表的json数据是:

{
"ret":0,
"msg":"",
"is_lost":0,
"nickname":"可乐xxxx_",
"gender":"男",
"province":"广东",
"city":"深圳",
"year":"1994",
"constellation":"",
"figureurl":"http:\/\/qzapp.qlogo.cn\xxxxxxxx",
"figureurl_1":"http:\/\/qzapp.qlogo.cn\xxxxxxxxx",
"figureurl_2":"http:\/\/qzapp.qlogo.cn\xxxxxxxx",
"figureurl_qq_1":"http:\/\/thirdqq.qlogo.cn\/g?b=xx&k=xxxx&s=40&t=xxxxx",
"figureurl_qq_2":"http:\/\/thirdqq.qlogo.cn\/g?b=xxxx&xxxxxxxxx&s=xxx&t=xxxxxx",
"figureurl_qq":"http:\/\/thirdqq.qlogo.cn\/g?b=xxxxx&k=xxxxxx&s=xxx&t=xxxxx",
"figureurl_type":"1",
"is_yellow_vip":"0",
"vip":"0",
"yellow_vip_level":"0",
"level":"0",
"is_yellow_year_vip":"0"
}
 

该json数据和网页登入获取的用户基本信息是一样的。

我是程序小白,每次进步一丢丢。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值