因为做的APP是面向海外版,这两天突然说Twitter登录失败,查了各种原因和解决方案,最终解决,并提供两种解决方案。

Twitter大佬更新授权认证机制,应用后台没有更新过来,导致大面积登录出问题,很崩!

问题描述

如果手机安装Twitter客户端,无影响,如果未安装,则提示登录失败,不能登录。

二话不说,连上手机看日志:

06-15 16:22:25.734 1015-1015/com.example.testlogin E/Twitter: Invalid json: <?xml version="1.0" encoding="UTF-8"?><errors><error code="415">Callback URL not approved for this client application. Approved callback URLs can be adjusted in your application settings</error></errors>com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224)at com.twitter.sdk.android.core.models.SafeListAdapter$1.read(SafeListAdapter.java:45)at com.twitter.sdk.android.core.models.SafeMapAdapter$1.read(SafeMapAdapter.java:45)at com.google.gson.Gson.fromJson(Gson.java:887)at com.google.gson.Gson.fromJson(Gson.java:852)at com.google.gson.Gson.fromJson(Gson.java:801)at com.google.gson.Gson.fromJson(Gson.java:773)at com.twitter.sdk.android.core.TwitterApiException.parseApiError(TwitterApiException.java:110)at com.twitter.sdk.android.core.TwitterApiException.readApiError(TwitterApiException.java:95)at com.twitter.sdk.android.core.TwitterApiException.<init>(TwitterApiException.java:43)at com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42)at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)at android.os.Handler.handleCallback(Handler.java:751)at android.os.Handler.dispatchMessage(Handler.java:95)at android.os.Looper.loop(Looper.java:154)at android.app.ActivityThread.main(ActivityThread.java:6776)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213)at com.twitter.sdk.android.core.models.SafeListAdapter$1.read(SafeListAdapter.java:45) at com.twitter.sdk.android.core.models.SafeMapAdapter$1.read(SafeMapAdapter.java:45) at com.google.gson.Gson.fromJson(Gson.java:887) at com.google.gson.Gson.fromJson(Gson.java:852) at com.google.gson.Gson.fromJson(Gson.java:801) at com.google.gson.Gson.fromJson(Gson.java:773) at com.twitter.sdk.android.core.TwitterApiException.parseApiError(TwitterApiException.java:110) at com.twitter.sdk.android.core.TwitterApiException.readApiError(TwitterApiException.java:95) at com.twitter.sdk.android.core.TwitterApiException.<init>(TwitterApiException.java:43) at com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42) at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408) 

下面还有一串,但这才是主要原因,下面就不看了。分析下是啥,json解析失败,,正常来说是成功的,现在返回了一串xml代码,当然失败了。那么问题就在xml中的错误描述了。
Callback URL not approved for this client application. Approved callback URLs can be adjusted in your application settings
可以,问题就是这个了,Twitter应用后台的Callback URL设置有问题,但是这个东西完全没动过,怎么会突然不行了?

查找解决方案

查查Twitter有没有搞事情?果然,最后发现Twitter在五月份发布了一则公告,提示使用Twitter登录的用户,如果需要继续使用Twitter登录的话,需要在应用后台将Callback URL添加到白名单里,ok,解决方案有了,到底填什么呢?讲真,Twitter官方也没有讲清楚,这几天到处也是一片提问的身影。。。。。

期间各种博客、社区、官网描述的都是Callback URL随便填个能够访问的地址就ok了,我也再次照着官方集成的android-kit写了一波,仍然不行,同样的错误。崩溃。

解决方案1

最后在某个issue中找到了一个Callback URL,据说是Twitter官方使用的url,把它填入到我们的应用后台白名单就ok了
对就是它:twittersdk://
填完之后是这样:

就这样,客户端什么也不用动了,继续正常使用。

解决方案2

另一种解决方案,这个改动起来大,需要更新客户端代码,因为催得急,所以也了解了一波,写了个demo接得差不多了(然后发现了第一种解决方案,分分钟回退代码)。

这个方案就是使用Twitter的Auth授权api直接去加载页面,对的,自己加载。
Twitter开发者官网的api中有认证这一块的api接口,

参数是必传的一个oauth_token
最后拼装起来就是这样的一个url和页面

所以,我们需要加载的就是这个页面了,自己写个webView去加载这个地址就行了!
最后是token怎么来,直接上代码好吧:

ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.setOAuthConsumerKey(KEY);
configurationBuilder.setOAuthConsumerSecret(SECRET);
Configuration configuration = configurationBuilder.build();
mTwitter = new TwitterFactory(configuration).getInstance();new Thread(new Runnable() {@Overridepublic void run() {try {requestToken = mTwitter.getOAuthRequestToken();runOnUiThread(new Runnable() {@Overridepublic void run() {webView.loadUrl(requestToken.getAuthenticationURL());}});}catch (twitter4j.TwitterException e) {e.printStackTrace();}}
}).start();

这样的话也能进入授权页面,然后再WebviewClient中监听,完成登录之后进入授权页面的时候,通过Twitter提供个另一个方法去获取用户的信息。

accessToken = mTwitter.getOAuthAccessToken(requestToken, strVerifier);

requestToken就是之前获取到的token,strVerifier这个参数,我们从url中获取,跳转授权网页的链接中有个参数叫做oauth_verifier,我们通过uri.getQueryParameter(“oauth_verifier”)获取到这个参数。

注意,这个是网络操作,耗时的。

最后,AccessToken中的信息就是twitter用户的信息了。

踩坑记录,希望能帮助到大家。

Twitter登录Callback URL not approved for this client application错误记录相关推荐

  1. android集成twitter登录

    Twitter曾经举行了自己四年以来的第一场开发者大会.而这场名为"Flight"的大会,也是以后它的年度惯例. 这次大会的主题也完全围绕开发者进行.大会的焦点是一个名叫Fabri ...

  2. Android中使用Kotlin实现Google、FaceBook、Twitter登录的封装

    最近由于项目做国际化,所以需要接入Google.FaceBook.Twitter等各种第三方登录的Api,于是查找官网资料,申请各种key和密钥,最后成功完成了这三个第三方登录Api的功能,但是由于很 ...

  3. java连接twitter登录,java – 通过Twitter登录OAuth不记得授权

    我正在编写一个Web应用程序,并且已经实现了用户可以使用spring-social-(core / twitter)通过Twitter登录. 然而,Twitter表现得很奇怪.在初始身份验证/授权之后 ...

  4. 如何实现登录、URL和页面按钮的访问控制?

    用户权限管理一般是对用户页面.按钮的访问权限管理.Shiro框架是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理,对于Shiro的介绍这里就不多说.本篇博客主要是了解Shiro的 ...

  5. 前端直接访问登录页面报错_如何实现登录、URL和页面按钮的访问控制

    作者:社会主义接班人 http://cnblogs.com/5ishare/p/10461073.html 用户权限管理一般是对用户页面.按钮的访问权限管理.Shiro框架是一个强大且易用的Java安 ...

  6. 使用$.post和action或servlet交互 URL出现 http://localhost:8080/../[object%20Object] 错误的问题解决

    使用$.post和action或servlet交互 URL出现 http://localhost:8080/../[object%20Object] 错误的问题解决 参考文章: (1)使用$.post ...

  7. 模拟用户登录过程,验证用户名、密码和校验码,如果全部正确提示用户登录成功,否则,提示用户相关输入错误

    要求:模拟用户登录过程,验证用户名.密码和校验码,如果全部正确提示用户登录成功,否则,提示用户相关输入错误. 目的:掌握登录校验的规则和原理. //登录验证 #include<stdio.h&g ...

  8. 百度工具问题以下对URL规则的阐述,哪些是错误的

    [百度工具问题]以下对URL规则的阐述,哪些是错误的 百度工具问题以下对URL规则的阐述,哪些是错误的 标签:内容视线紧盯同一张面孔.那离开学院一年多地师弟(师兄);死亡魔方.轻语团的人也都停在原来的 ...

  9. php中斜杆无法识别,THINKPHP3.1以下版本中识别URL尾部是否以斜杆结尾/的错误

    上一篇说的是THINKPHP3.2.3版本遇到的URL尾部是否以斜杆结尾/的错误,同样的问题出现在了THINKPHP的其他版本中,但是情况又有所不同 如:http://www.yoff.cn/Test ...

最新文章

  1. Docker学习笔记之在开发环境中使用服务发现
  2. 积分背后的数字货币,你真的会玩吗?
  3. gojs 部分功能实现
  4. html新建通用loading,漂亮实用的页面loading(加载)封装代码
  5. ArrayList 和LinkedList
  6. Linux关机重启命令
  7. 没有com.sun.tools.javac.main的解决办法
  8. 【VS开发】【电子电路技术】VPX技术介绍
  9. 记录一下把域名从阿里云服务商转入到华为云
  10. 防抖和节流理解,以及lodash使用
  11. Java程序完形填空题_moodle中的完形填空题的文本编写方法
  12. 果壳网(guokr.com)发布了
  13. d6.VUE基础20211229
  14. 洋桃电子STM32物联网入门30步笔记三、CubeMX图形化编程、设置开发板上的IO口
  15. 芝加哥大学计算机专业排名,芝加哥大学计算机科学硕士排名第33(2020年TFE Times排名)...
  16. C语言程序设计(第三版)何钦铭著 习题4-6
  17. 【小米MIoT设备接入HomeAssistant通用插件教程】
  18. 如何将Matlab2019b和M文件关联
  19. 2023东北农业大学计算机考研信息汇总
  20. 前端安全:如何保障 Web 应用程序的安全性?

热门文章

  1. 【SolidWorks宏】VBA操作SolidWorks程序对象
  2. Android开发指南!Android事件分发机制收藏这一篇就够了,2年以上经验必看
  3. 【Android控件属性记录】
  4. 什么是swift闭包?
  5. swift 2.0 ? ! 到底是什么意思
  6. zz from newsmth e进制是信息表示的最优解
  7. java初级工程师工资多少,2年以上经验必看
  8. 为什么我们的计算机毕业设计要早做准备?
  9. 记2022天梯赛正式赛
  10. 2022天梯赛个人代码留存