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) {
    
    
        Tencent.onActivityResultData(requestCode, resultCode, data, new TecentLoginListener());
    }

微信登录请查看微信登录

猜你喜欢

转载自blog.csdn.net/weixin_43117800/article/details/108378963