Android实现QQ登录

1:进入QQ官网搭建环境
https://wiki.connect.qq.com/qq%E7%99%BB%E5%BD%95

2:点击登录按钮拉取QQ

mTencent = Tencent.createInstance("官网创建项目的id", LoginActivity.this);
  case R.id.img_qq://QQ登录
                if (!mTencent.isSessionValid()) {
                    mTencent.login(LoginActivity.this, "all", new TecentLoginListener());
                }
                break;

3:QQ登录监听

 //qq登录时的监听
    class TecentLoginListener implements IUiListener {


        @Override
        public void onComplete(Object o) {
            //登录成功时的回调,这里的o是登录授权成功以后返回的数据
            Log.v(TAG, "qq登录授权成功");
            JSONObject object = (JSONObject) o;
            try {
                //需要从返回的数据中取出openid和expires_in还有access_token
                mOpenId = object.getString("openid");
                String access_token = (String) object.get("access_token");
                String expires_in = object.getString("expires_in");
                mTencent.setOpenId(mOpenId);//将获取到的数据赋值给Tencent实例才可以继续回去用户的数据,否则只会无法回去用户的数据
                mTencent.setAccessToken(access_token, expires_in);
                getUnionId();
                //UserInfo 是用来存储用户数据的,参数为context,Tencent的QQtooken
                UserInfo userInfo = new UserInfo(LoginActivity.this, mTencent.getQQToken());
                userInfo.getUserInfo(new IUiListener() {


                    @Override
                    public void onComplete(Object o) {//o就是所登录用户的数据
                        JSONObject jsonObject = (JSONObject) o;
                        try {
                            mName = (String) jsonObject.get("nickname");
                            mFigureurl = (String) jsonObject.get("figureurl_qq_2");
							//登录成功的用户信息,可以进行一些想要的操作比如将用户数据上传接口等
                            Log.v(TAG, "-----qqloginseccess---mName==" + mName + "----mFigureurl==" + mFigureurl);

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


                    }

                    @Override
                    public void onError(UiError uiError) {//登录出现错误时的回调
                        Log.v(TAG, "");

                    }

                    @Override
                    public void onCancel() {//取消登录时的回调

                    }
                });
            } catch (JSONException e) {
                e.printStackTrace();
                Log.v(TAG, "TecentLoginListener e" + e.getMessage());
            }
        }

        @Override
        public void onError(UiError uiError) {
            Log.v(TAG, "TecentLoginListener onError" + uiError.errorCode);
        }

        @Override
        public void onCancel() {
            Log.v(TAG, "TecentLoginListener onCancel");
        }
    }

获取UnionId

 private void getUnionId() {
        if (mTencent != null && mTencent.isSessionValid()) {
            IUiListener listener = new IUiListener() {


                @Override
                public void onError(UiError e) {
                    Log.v(TAG, "getUnionId   onError");
                }

                @Override
                public void onComplete(final Object response) {
                    Log.v(TAG, "getUnionId   onError");
                    if (response != null) {
                        JSONObject jsonObject = (JSONObject) response;
                        try {
                            mUnionid = jsonObject.getString("unionid");
                            if (!TextUtils.isEmpty(mUnionid)) {
                                Log.v(TAG, "--unionid==" + mUnionid);
                              
                            }
                        } catch (Exception e) {
                            Log.v(TAG, "getUnionId   no unionid");
                        }
                    } else {
                        Log.v(TAG, "getUnionId   no unionid");
                    }
                }

                @Override
                public void onCancel() {
                    Log.v(TAG, "getUnionId   onCancel");
                }
            };
            UnionInfo unionInfo = new UnionInfo(this, mTencent.getQQToken());
            unionInfo.getUnionId(listener);
        } else {
            Log.v(TAG, "getUnionId   please login frist!");
        }
    }

最后不要忘记加

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == Constants.REQUEST_LOGIN) {
            Tencent.onActivityResultData(requestCode, resultCode, data, new TecentLoginListener());
            //可能会出现点击授权登录后无法回调情况加入下面这一行,经本人测试有效
            Tencent.handleResultData(data, new TecentLoginListener());
        }
    }

微信登录请查看微信登录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值