社会化登录踩的几个坑

有一年没有碰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登录“莫名奇妙”

社会化登录踩的几个坑_第1张图片
弹出这一张图片,你会怎么想,是我的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);
    }

我的神啊,文档可以做的这么烂!

你可能感兴趣的:(微信登录,QQ登录,社会化,新浪登录)