Twitter登录踩坑 获取用户信息报401错误

4,305 阅读3分钟

因为App是做的是国际市场,需要接入很多三方登录SDK。Twitter登录接入了很久,一直没有问题。 有一天QA突然找到我,说用他手机选择Twitter登登录提示鉴权失败,线上测试版本都不行。但是用我自己的手机是可以的。 很神奇, 因为我们项目有组件化, 三方登录模块单独提出去一个module。 看不到底层报错信息, 只给上层返回一个-1。然后客户端一律提示鉴权失败... 这个坑有时间在填吧>_>

解决思路

done三方登录分享库,然后看一下twitter登录报错时候走那些流程, 然后在主项目打开那个类,在所有失败的位置Debug,这个时候就有眉目了。

Call<User> call = TwitterCore.getInstance().getApiClient(session).getAccountService().verifyCredentials(true, true, false);
        call.enqueue(new Callback<User>() {
            public void failure(TwitterException e) {
                LoginTWProvider var10001 = TwitterActivity.this.mPrivider;
                e.printStackTrace();
                TwitterActivity.this.doFinish();
            }

            public void success(Result<User> userResult) {
                User user = (User)userResult.data;
                LoginTWProvider var10001;
                if (user == null) {
                }
            }
        });
    }

Twitter登录流程是 先去鉴权->鉴权成功->获取用户信息(头像什么的)

就是在鉴权成功调用TwitterCore.getInstance().getApiClient(session).getAccountService().verifyCredentials 接口报401错误。

com.twitter.sdk.android.core.TwitterApiException: HTTP request failed, Status: 401

看到这里是不是以为是Twitter的锅?可以直接给QA说。不是我们的问题, 第三方借口401错误, 我们无法解决。「机智脸」 NO NO NO 等等,为啥自己的手机是好的, 部分其他手机也是可以的, 单单QA这台手机有问题? 是不是推荐他换一台手机?还是在看看吧,然后去网络搜了下,果然有个坑。 突然想起来之前QA让查的一个SSLHttpException错误的问题[后边有时间在写] ,是因为QA为了测试某项功能,修改了系统时间,把系统日期修改的特别靠前,然后导致证书过期了。 查看了下QA的手机, 果然, 直呼我特么............ 此处省略N多字

结论

由于QA测试修改了系统时间, 导致调用第三方接口时候401,然后怎么也登录不成功, 修改手机时间,就好了。。。。

回顾

1、登录组件库在不管什么错误下都上抛-1,没有给出特定的信息,也没有具体的error message , 这样在每次遇到问题的时候 都提示鉴权失败 【巨坑】。想起了之前团队成员做项目优化时候把twitter初始化放在子线程,但是子线程哪里写的有问题, 导致Twitter初始化未成功,登录时候就提示鉴权失败,也是拉代码分析,然后找到问题。。。 2、客户端再遇到这种特例手机的时候先检查下手机有没有问题 比如:亲亲,这边建议您换一台手机哦!!! 这样可以节省很多时间。

好吧,今天碎碎念到这里结束,记录下开发中遇到的一些问题, 如果对您有帮助,不妨点个赞👍。