关于使用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 onError(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这个.

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

 

posted @   玄之又玄众妙之门  阅读(239)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了

哦哦查

研学服务

知芽网

醉学网

点击右上角即可分享
微信分享提示