ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-08-29 11:30:27  阅读:143  来源: 互联网

标签:登录 void loginListener Util requestCode resultCode onActivityResult 第三方 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有