You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未安装Twitter应用时Android端Twitter登录失败(无WebView弹窗)

Twitter登录报错“Failed to get request token”(无客户端时)解决方案

编辑说明:此问题此前有人提出但未得到解答,且未附带堆栈信息,故再次提问。

问题描述

当设备安装Twitter应用时,我方Android应用可正常完成Twitter登录;但卸载Twitter应用后,点击「使用Twitter登录」按钮无WebView弹窗出现,且提示“Failed to get request token”错误,具体堆栈信息如下:

E/Twitter: Invalid json: Callback URL not approved for this client application. Approved callback URLs can be adjusted in your application settings 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.(TwitterApiException.java:43) at com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42) at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:172) at android.app.ActivityThread.main(ActivityThread.java:6637) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 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.(TwitterApiException.java:43) at com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42) at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:172) at android.app.ActivityThread.main(ActivityThread.java:6637) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
E/Twitter: Failed to get request token com.twitter.sdk.android.core.TwitterApiException: HTTP request failed, Status: 403 at com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42) at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:172) at android.app.ActivityThread.main(ActivityThread.java:6637) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
E/Twitter: Authorization completed with an error com.twitter.sdk.android.core.TwitterAuthException: Failed to get request token at com.twitter.sdk.android.core.identity.OAuthController$1.failure(OAuthController.java:94) at com.twitter.sdk.android.core.internal.oauth.OAuth1aService$1.failure(OAuth1aService.java:191) at com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42) at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.L...

问题根因

从堆栈里的Callback URL not approved for this client application和403状态码可以明确:当设备没有Twitter客户端时,应用会触发Web OAuth登录流程,而这个流程要求你在Twitter开发者后台预先批准对应的回调URL,否则会被拒绝请求。而有Twitter客户端时用的是App Auth流程,不需要验证回调URL,所以能正常登录。

解决步骤

  • 登录Twitter开发者平台,找到你的应用项目。
  • 进入应用的Authentication Settings(认证设置)页面。
  • 在Callback URLs字段中,添加你的应用使用的回调URL:
    • 如果你用的是官方Twitter SDK默认配置,添加twittersdk://即可;
    • 如果是自定义的回调URL,确保和你代码中配置的完全一致(比如your-app-scheme://twitter-callback)。
  • 同时确认Allow this app to be used to Sign in with Twitter选项处于开启状态。
  • 保存所有设置后,重新卸载Twitter客户端测试登录流程。

额外注意事项

  • 回调URL必须是合法的URI格式,不能有拼写错误;
  • 如果你的应用有多个环境(测试/生产),记得把对应的回调URL都添加进去;
  • 保存设置后可能需要等待几分钟才能生效,不要着急立刻测试。

内容的提问来源于stack exchange,提问作者nilesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:49:54