关于使用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