您的位置:首页 > 移动开发 > 微信开发

社会化登录踩的几个坑

2016-06-23 20:02 483 查看
有一年没有碰QQ登录/微信登录/新浪登录的东西了,偶然间发现一些问题,在此总结一下,做一下记录。

Android5以下新浪登录“回不来”

这个问题的原因挺简单的,将LoginActivity的launchMode设置为singleInstance后,APP调用新浪客户端,新浪客户端无法将认证信息传回来——不能向LoginActivity.onActivityResult回传正确的数据。

这里将LoginActivity的launchMode修改为singleTask就ok了!

微信登录更奇葩

将LoginActivity的launchMode设置为singleTask,APP调用微信客户端认证成功后,WXEntryActivity通过简单的

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP);
thisActivity.startActivity(intent);
thisActivity.finish();


返回登陆页面。

理论上没有什么问题啊,可是LoginActivity的onNewIntent怎么没有调用呢?

打断点调试了一下,onCreate方法调用了,没办法将onNewIntent中处理微信客户端返回信息的逻辑在onCreate中copy一份吧。

登录逻辑完成后,仅仅销毁当前页面,之前的登录页面怎么处理啊?在onResume判断一下,如果当前已经登录,直接销毁登录页面。

微信登录调试有一个非常不好的地方,在你调试和正式发布的时候,都要向官方修改一下应用签名

可是,你发现还是不行!

需要给微信app清理一下缓存

参考地址:

http://ask.dcloud.net.cn/question/18354

QQ登录“莫名奇妙”



弹出这一张图片,你会怎么想,是我的APP中用于qq登录的sdk版本太低了?去官网看了一下,我使用的是最新的,是我的QQ客户端太低了,升级一下,也不行!

在网上搜索了一下,需要添加测试账号!

在open.qq.com,“返回旧版”->”管理中心”->点击要调试的app->”QQ登录”->”应用调试者”,添加上就ok了!

QQ里面是通过回调来处理的,之前一直正常,升级了一下后,就不行了

参考

http://wiki.open.qq.com/wiki/Android_API%E8%B0%83%E7%94%A8%E8%AF%B4%E6%98%8E#1.1_.E7.99.BB.E5.BD.95.2F.E6.A0.A1.E9.AA.8C.E7.99.BB.E5.BD.95.E6.80.81

才知道,需要在onActivityResult中进行处理。

官方文档是这么写的

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == Constants.REQUEST_API) {
if(resultCode == Constants.RESULT_LOGIN) {
mTencent.handleLoginData(data, loginListener);
}
super.onActivityResult(requestCode, resultCode, data);
}


如果你这么做,肯定不行!

下面才是正确的写法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == Constants.REQUEST_LOGIN&&resultCode==RESULT_OK) {
mTencent.handleLoginData(data, qqLoginListener);
}
super.onActivityResult(requestCode, resultCode, data);
}


我的神啊,文档可以做的这么烂!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息