腾讯QQ第三方登录的实现

来源:互联网 发布:unity3d怎么制作人物 编辑:程序博客网 时间:2024/04/27 16:01

腾讯开放平台首页

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大功告成,然后就下班回家吃饭了。。。

4 0
原创粉丝点击