Android第三方登陆之QQ篇(原生登陆授权)

QQ授权登陆其实,在现在的APP中也是非常常见的,今天我们主要探讨一下QQ原生授权登陆的那些事。

首先,我们得去qq开放平台上去注册申请,传送门http://open.qq.com/,如下点击:
这里写图片描述
然后我们进行相关的创建我们的应用,如下所示:
这里写图片描述
完善相关的信息,提交审核等等,这里面我们最重要的就是APP ID,以及APP KEY,前期工作准备好,我们进行我们的接入工作:

首先,我们先看看官方的开发文档,http://wiki.open.qq.com/wiki/QQ%E7%94%A8%E6%88%B7%E8%83%BD%E5%8A%9B,图示如下:
这里写图片描述

其中,标注箭头的地方使我们最需要使用的,关于SDk下载的话,由于我们只牵扯到QQ的登陆,没有需要太多的东西,所以我们只需要下载基础包既可以,最新的最下:
这里写图片描述

附:基础包、全量包对比:

OpenSdk从2.4版本开始,在原有接口的基础之上,提炼重要及常用接口,生成基础包

对应包名如下:
全量包:open_sdk_r****.jar
基础包:open_sdk_r****_lite.jar

基础包包含接口:
1、登陆相关接口
2、获取用户信息接口
3、定向分享接口
    a、分享给QQ好友
    b、分享给Qzone好友
4、社交类API
    a、邀请好友
    b、应用分享
    c、发送请求/礼物

包大小
全量包:514K
基础包:254K

下载完基础包后,解压后如下:
这里写图片描述
直接导入到studio libs中,添加as Library

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


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

<application>
<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" />
<data android:scheme="tencent你的AppId" />
</intent-filter>
</activity>
<application>

//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" 
/>

//这个必须有,吐槽一下,腾讯的文档太old了
 <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" />
                    //其中的100000是你申请的APP ID,替换成自己的即可
                <data android:scheme="tencent100000" />
            </intent-filter>
        </activity>

我们来看看腾讯qq的创建实例并回调文档:

这里写图片描述

这里写图片描述

这里写图片描述

那么我们照着开发文档走,就完全可以搞定了,具体代码如下,自己封装成了工具类:

public class QQLogin {

    public static Tencent mTencent;
    private Activity mActivity;

    private QQLogin() {
        mTencent = Tencent.createInstance(Constants.QQAPPID,Application.getContext());
    }

    private static class SingTonHolder {
        /* 静态初始化器,由JVM来保证线程安全 */
        private static QQLogin instance = new QQLogin();
    }

    public static QQLogin getInstance() {
        return SingTonHolder.instance;
    }

    public void qq_loginout(Activity activity) {
        this.mActivity = activity;
        if (mTencent == null) {
            mTencent = Tencent.createInstance(Constants.QQAPPID, Application.getContext());
        }

        mTencent.logout(mActivity);

    }

    public void qq_login(Activity activity) {
        this.mActivity = activity;
        if (mTencent == null) {
            mTencent = Tencent.createInstance(Constants.QQAPPID, Application.getContext());
        }
        if (!mTencent.isSessionValid()) {
            mTencent.login(mActivity, "all", new LoginUiListener(mActivity));
        }

    }


}

LoginUiListener

public class LoginUiListener implements IUiListener {
    private Activity activity;
    public LoginUiListener(Activity activity) {
        this.activity = activity;

    }

    @Override
    public void onComplete(Object o) {
        String result = o.toString();

        QQloginResultInfo loginInfo = JSON.parseObject(result, QQloginResultInfo.class);
        final String openid = loginInfo.getOpenid();
        final String access_token = loginInfo.getAccess_token();
        QQLogin.mTencent.setOpenId(openid);
        QQLogin.mTencent.setAccessToken(loginInfo.getAccess_token(), String.valueOf(loginInfo.getExpires_in()));

        UserInfo userInfo = new UserInfo(XApplication.getContext(), QQLogin.mTencent.getQQToken());

        userInfo.getUserInfo(new IUiListener() {
            @Override
            public void onComplete(Object o) {
                Log.e("xxxx", o.toString());
                //自此我们就可以获取到相关的用户信息,进行我们自己的相关业务逻辑操作
                QQuserinfo userinfo = JSON.parseObject(o.toString(), QQuserinfo.class);
                String nickname = userinfo.getNickname();
                String avatar = userinfo.getFigureurl_qq_2();

            }

            @Override
            public void onError(UiError uiError) {

            }

            @Override
            public void onCancel() {

            }
        });
    }

    @Override
    public void onError(UiError uiError) {

    }

    @Override
    public void onCancel() {

    }

不要忘记在相应的activity中的onActivityResult()方法中添加:


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
           //这里的11101,是调用腾讯sdk是,有日志输出的请求码
        if (requestCode == 11101) {
            Tencent.onActivityResultData(requestCode, resultCode, data, new LoginUiListener(this));
        }
        super.onActivityResult(requestCode, resultCode, data);

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值