腾讯QQ第三方登录的实现

腾讯开放平台首页

SDK下载中心

  1. 先看下Manifests所需要的权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  1. 需要注册的Activity
<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="tencent222222" />
    </intent-filter>
</activity>
<activity  android:name="com.tencent.connect.common.AssistActivity" android:configChanges="orientation|keyboardHidden" android:screenOrientation="behind" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  1. 这里使用到的KEY是腾讯默认测试的222222
//获取tencent实例
tencent = Tencent.createInstance(KEY, getApplicationContext());

/** * 登录,第二个参数代表权限 */
tencent.login(MainActivity.this, "all", listener);

这里获取到的是腾讯返回的唯一标识(openID,accessToken等)

//登录回调接口
private IUiListener listener = new IUiListener() {
    @Override
    public void onComplete(Object response) {
        try {
            JSONObject object = new JSONObject(response + "");
            int ret = object.getInt("ret");
            if (ret == 0) {
                Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_LONG).show();
                String openID = object.getString("openid");
                String accessToken = object.getString("access_token");
                String expires = object.getString("expires_in");
                tencent.setOpenId(openID);
                tencent.setAccessToken(accessToken, expires);
                /** * 获取用户昵称,头像等信息 */
                UserInfo userInfo = new UserInfo(MainActivity.this, tencent.getQQToken());
                userInfo.getUserInfo(new MyIUiListener());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Override
    public void onError(UiError uiError) {
    }
    @Override
    public void onCancel() {
    }
};

然后获取用户基本信息

private class MyIUiListener implements IUiListener {
    @Override
    public void onComplete(Object obj) {
        try {
            JSONObject object = new JSONObject(obj + "");
            String ret = object.getString("ret");
            String is_lost = object.getString("is_lost");
            String nickname = object.getString("nickname");
            String gender = object.getString("gender");
            String province = object.getString("province");
            String city = object.getString("city");
            /** *头像会有几个不同的尺寸的地址,我只取了其中一个 */
            final String figureurl_qq_2 = object.getString("figureurl_qq_2");
            nickName.setText(nickname);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    Bitmap bitmap = MyUtil.downLoadImage(figureurl_qq_2);
                    Message message = new Message();
                    message.obj = bitmap;
                    handler.sendMessage(message);
                }
            }).start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Override
    public void onError(UiError uiError) {
    }
    @Override
    public void onCancel() {
    }
}

然后就是调用分享功能

private void createShare() {
    final Bundle params = new Bundle();
    params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
    params.putString(QQShare.SHARE_TO_QQ_TITLE, "a_zhon");
    params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "我自己的QQ");
    params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, "http://blog.csdn.net/a_zhon");
    params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "http://www.xiufa.com/BJUI/plugins/kindeditor_4.1.10/attached/image/20160427/20160427020327_69298.png");
    tencent.shareToQQ(MainActivity.this, params, shareListener);
}

还须重写onActivityResult方法,不然获取不到用户信息(貌似不重写也能获取到用户信息,有兴趣的童鞋可以自己试一下)

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //QQ登录回调
    if (requestCode == Constants.REQUEST_LOGIN) {
        Tencent.onActivityResultData(requestCode, resultCode, data, listener);
    }

有需要的可以下载一下Demo下载

OK大功告成,然后就下班回家吃饭了。。。

你可能感兴趣的:(qq,腾讯,腾讯开放平台)