其他分享
首页 > 其他分享> > 关于使用QQSDK进行第三方登录不返回信息的问题

关于使用QQSDK进行第三方登录不返回信息的问题

作者:互联网

如题,这两天领导要求在登录注册上可以进行第三方登录,在网上找了一些demo,不是很全.然后下载了一份最新版的官方sdk的demo,在使用过程中遇到了一些问题,这里进行记录一下.主要就是QQ授权完毕以后直接就返回到登录页面,但是授权QQ的一些信息没有返回.结果后面在研究QQ互联上给的文档(https://wiki.connect.qq.com/qq%e7%99%bb%e5%bd%95)的时候发现了这么一句话:

(3) 特别注意:
应用调用Andriod_SDK接口时,如果要成功接收到回调,需要在调用接口的Activity的onActivityResult方法中增加如下代码:

@Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       mTencent.onActivityResult(requestCode, resultCode, data);
 }

 

 

 恍然大悟自己错在了哪里.自己没有对 onActivityResult这个方法进行重写.毕竟是从一个activity跳到另一个activity,原谅我自己安卓方面的基础不牢.

 

 

 

===================下面贴一下官网的代码(我有一定的修改,主要是想让大家看一下官方给的代码中比较方便的一点)==

QQLogin方法,

//我修改的一个登录入口方法
//这里mTencent官方给的demo中实在onCreat中已经创建好了
public  void QQLogin(){
       if(mTencent==null){
        mTencent = Tencent.createInstance(mAppid,this);
        }
        
        //mTencent = Tencent.createInstance(mAppid, this, AppConstants.APP_AUTHORITIES);
        HashMap<String, Object> params = new HashMap<String, Object>();
 
        params.put(KEY_SCOPE, "all"); //all表示获取所有权限
        params.put(KEY_QRCODE, false);
        params.put(KEY_ENABLE_SHOW_DOWNLOAD_URL, false);
        mTencent.login(this, loginListener, params);
    }

loginListener:

//这是我比较看好的地方,使用了钩子方法,可以在doComplete方法中写上我们的业务逻辑
IUiListener loginListener = new BaseUiListener() {
        @Override
        protected void doComplete(JSONObject values) {
            Log.d("SDKQQAgentPref", "AuthorSwitch_SDK:" + SystemClock.elapsedRealtime());
            //initOpenidAndToken(values);
        }
    };

BaseUiListener 监听内部类:

private class BaseUiListener extends DefaultUiListener {
 
        @Override
        public void onComplete(Object response) {
            if (null == response) {
                 Util.showResultDialog(MainActivity.this, "返回为空", "登录失败");
                return;
            }
            JSONObject jsonResponse = (JSONObject) response;
            if (jsonResponse.length() == 0) {
                     Util.showResultDialog(MainActivity.this, "返回为空", "登录失败");
                return;
            }
              Util.showResultDialog(MainActivity.this, response.toString(), "登录成功");
            // 有奖分享处理
            // handlePrizeShare();
            doComplete((JSONObject)response);//这里就是上面loginListener钩子的调用
        }
 
        protected void doComplete(JSONObject values) {
//loginListener重写的它
        }
 
        @Override
        public void one rror(UiError e) {
            //  Util.toastMessage(QQShareManger.this, "onError: " + e.errorDetail);
            Util.dismissDialog();
        }
 
        @Override
        public void onCancel() {
            //        Util.toastMessage(QQShareManger.this, "onCancel: ");
            Util.dismissDialog();
            /*if (isServerSideLogin) {
                isServerSideLogin = false;
            }*/
        }
    }

onActivityResult就是我一直纠结的怎么返回方法不调用的地方.我开始一直以为是loginListener这个没有实例,因为网上其他人给的代码基本上都是直接new 的BaseUiListener mTencent.login(LoginActivity.this,"all",new BaseUiListener());//这里网上大多数人采用的.

 

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d(TAG, "-->onActivityResult " + requestCode  + " resultCode=" + resultCode);
        if (requestCode == Constants.REQUEST_LOGIN ||
            requestCode == Constants.REQUEST_APPBAR) {
            Tencent.onActivityResultData(requestCode,resultCode,data,loginListener);
        }
 
        super.onActivityResult(requestCode, resultCode, data);
    }

 

==============================备注==========

1)我使用的版本是open_sdk_3.5.4.11_r3f56456_lite.jar这个.

以上内容来源于百科书,可以关注我了解更多.

 

标签:登录,void,loginListener,Util,requestCode,resultCode,onActivityResult,第三方,QQSDK
来源: https://www.cnblogs.com/sdjlq/p/16635306.html