QQ第三方登录

前言:由于有很多博客都已经很详细的写过了这方面的东西就不重复了,本篇博客为了记录下自己遇到的坑,所以直接上代码.不便之处,敬请谅解!

    @Event( R.id.iv_qq)
    private void onThreeAccountlogin(View view) {
        switch (view.getId()) {
            case R.id.iv_qq:
                qqLogin();
                break;
        }
    private void qqLogin() {
        if (App.mTencent.isQQInstalled(this)) {
            qqCallback = new BaseUiListener();
            App.mTencent.login(this, "all", qqCallback);
        }else {
            Toast.makeText(this, "用户未安装QQ", Toast.LENGTH_SHORT).show();
        }
    }
    private class BaseUiListener implements IUiListener {

        @Override
        public void onComplete(final Object response) {
//            Toast.makeText(getApplicationContext(), "授权成功", Toast.LENGTH_SHORT).show();
            /**到此已经获得OpneID以及其他你想获得的内容了
             QQ登录成功了,我们还想获取一些QQ的基本信息,比如昵称,头像什么的,这个时候怎么办?
             sdk给我们提供了一个类UserInfo,这个类中封装了QQ用户的一些信息,我么可以通过这个类拿到这些信息
             */
            LogUtil.i(TAG, "response="+response.toString());
            try {
            JSONObject obj = (JSONObject) response;
            String openID = obj.getString("openid");
            String accessToken = obj.getString("access_token");
            String expires = obj.getString("expires_in");
            App.mTencent.setOpenId(openID);
            App.mTencent.setAccessToken(accessToken,expires);
            } catch (JSONException e) {
                e.printStackTrace();
            }

            QQToken qqToken = App.mTencent.getQQToken();
            mUserInfo = new UserInfo(getApplicationContext(),qqToken);

            mUserInfo.getUserInfo(new IUiListener() {
                @Override
                public void onComplete(Object o) {
                    try{
                        //用户信息获取到了
                        LogUtil.i(TAG, "JSONObject========"+ ((JSONObject) o).toString());
                        RequestParams params = new RequestParams(APIConstant.THIRDLOGIN);
                        //调用自己后台接口
                        params.addQueryStringParameter("type", UserConstant.TYPE_QQ);
                        params.addQueryStringParameter("id", ((JSONObject) response).getString("openid"));//id为openid
                        params.addQueryStringParameter("nickname", ((JSONObject) o).getString("nickname"));
                        params.addQueryStringParameter("headImg",((JSONObject) o).getString("figureurl_qq_2"));
                        params.addQueryStringParameter("token", StringUtil.getEncryptionContent(params));

                    LogUtil.i(TAG, "params="+params.toString());
                        x.http().post(params, new Callback.CommonCallback<String>() {
                            @Override
                            public void onSuccess(String result) {
                                LogUtil.i(TAG, "result===="+result);
                                Gson gson = new Gson();
                                UserResult userResult = gson.fromJson(result, UserResult.class);
                                String msg = StringUtil.getErrorMessage(LoginActivity.this, userResult.getCode());
                                switch (userResult.getCode()) {
                                    case BaseResult.SUCCESS:
                                        UserSP.setUserInfo(getBaseContext(), gson.toJson(userResult.getData()));
                                        App.refreshUserInfo(getBaseContext());
                                        setResult(Activity.RESULT_OK);
                                        Toast.makeText(x.app(), getString(R.string.login_succee), Toast.LENGTH_LONG).show();
                                        Intent intent1 = new Intent(LoginActivity.this, MainActivity.class);
                                        startActivity(intent1);
                                        finish();
                                        overridePendingTransition(R.anim.slide_right_in,R.anim.slide_left_out);
                                        break;
                                    default:
                                        Toast.makeText(x.app(), msg, Toast.LENGTH_LONG).show();
                                        break;
                                }
                            }

                            @Override
                            public void onError(Throwable ex, boolean isOnCallback) {
                                LogUtil.i(TAG, "ex="+ex.toString());
                                Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();
                            }

                            @Override
                            public void onCancelled(CancelledException cex) {
                                Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show();
                            }

                            @Override
                            public void onFinished() {
                                if (progress != null) {
                                    progress.dismiss();
                                }
                            }
                        });

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

                @Override
                public void onError(UiError uiError) {
                    LogUtil.i(TAG,"登录失败"+uiError.errorMessage);

                }

                @Override
                public void onCancel() {
                    LogUtil.i(TAG,"登录取消");
                }
            });
        }


        @Override
        public void onError(UiError uiError) {
            LogUtil.i(TAG,".....授权失败"+uiError.errorMessage);
        }

        @Override
        public void onCancel() {
            LogUtil.i(TAG,".....授权取消");
        }
    }

ps:错误返回码链接
公共返回码说明

猜你喜欢

转载自blog.csdn.net/qq_34581102/article/details/79901463