Android 如果未安装 Twitter 应用程序,应用程序 Twitter 登录失败(不显示 webView 登录屏幕)
Android app Twitter Login failed(not show webView login screen) if twitter app not installed
编辑 1
我知道这个问题已经被问过了,但是没有人回答堆栈跟踪也没有添加到其中所以我再次问了一遍。
如果我安装 twitter 应用程序并尝试登录,那么应用程序将成功使用 twitter 登录,但是如果我从移动设备上卸载 twitter 应用程序然后尝试登录到应用程序,那么我会收到以下错误并且无法使用 twitter 登录
获取请求令牌失败
我没有看到任何 webView。单击使用 Twitter 按钮登录后。
下面是我收到的堆栈跟踪
E/Twitter:无效 json:回调 URL 未批准此客户端应用程序。可以在您的应用程序设置中调整批准的回调 URLs
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期 BEGIN_OBJECT 但在第 1 行第 1 列路径 $ 处为 STRING
在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224)
在 com.twitter.sdk.android.core.models.SafeListAdapter$1.read(SafeListAdapter.java:45)
在 com.twitter.sdk.android.core.models.SafeMapAdapter$1.read(SafeMapAdapter.java:45)
在 com.google.gson.Gson.fromJson(Gson.java:887)
在 com.google.gson.Gson.fromJson(Gson.java:852)
在 com.google.gson.Gson.fromJson(Gson.java:801)
在 com.google.gson.Gson.fromJson(Gson.java:773)
在 com.twitter.sdk.android.core.TwitterApiException.parseApiError(TwitterApiException.java:110)
在 com.twitter.sdk.android.core.TwitterApiException.readApiError(TwitterApiException.java:95)
在 com.twitter.sdk.android.core.TwitterApiException.(TwitterApiException.java:43)
在 com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42)
在 retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70)
在 android.os.Handler.handleCallback(Handler.java:789)
在 android.os.Handler.dispatchMessage(Handler.java:98)
在 android.os.Looper.loop(Looper.java:172)
在 android.app.ActivityThread.main(ActivityThread.java:6637)
在 java.lang.reflect.Method.invoke(本机方法)
在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
由以下原因引起:java.lang.IllegalStateException:预期 BEGIN_OBJECT 但在第 1 行第 1 列路径 $ 处为 STRING
在 com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)
在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213)
在 com.twitter.sdk.android.core.models.SafeListAdapter$1.read(SafeListAdapter.java:45)
在 com.twitter.sdk.android.core.models.SafeMapAdapter$1.read(SafeMapAdapter.java:45)
在 com.google.gson.Gson.fromJson(Gson.java:887)
在 com.google.gson.Gson.fromJson(Gson.java:852)
在 com.google.gson.Gson.fromJson(Gson.java:801)
在 com.google.gson.Gson.fromJson(Gson.java:773)
在 com.twitter.sdk.android.core.TwitterApiException.parseApiError(TwitterApiException.java:110)
在 com.twitter.sdk.android.core.TwitterApiException.readApiError(TwitterApiException.java:95)
在 com.twitter.sdk.android.core.TwitterApiException.(TwitterApiException.java:43)
在 com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42)
在 retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70)
在 android.os.Handler.handleCallback(Handler.java:789)
在 android.os.Handler.dispatchMessage(Handler.java:98)
在 android.os.Looper.loop(Looper.java:172)
在 android.app.ActivityThread.main(ActivityThread.java:6637)
在 java.lang.reflect.Method.invoke(本机方法)
在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
E/Twitter: 获取请求令牌失败
com.twitter.sdk.android.core.TwitterApiException:HTTP 请求失败,状态:403
在 com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42)
在 retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70)
在 android.os.Handler.handleCallback(Handler.java:789)
在 android.os.Handler.dispatchMessage(Handler.java:98)
在 android.os.Looper.loop(Looper.java:172)
在 android.app.ActivityThread.main(ActivityThread.java:6637)
在 java.lang.reflect.Method.invoke(本机方法)
在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
E/Twitter: 授权完成但出现错误
com.twitter.sdk.android.core.TwitterAuthException: 获取请求令牌失败
在 com.twitter.sdk.android.core.identity.OAuthController$1.failure(OAuthController.java:94)
在 com.twitter.sdk.android.core.internal.oauth.OAuth1aService$1.failure(OAuth1aService.java:191)
在 com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42)
在 retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70)
在 android.os.Handler.handleCallback(Handler.java:789)
在 android.os.Handler.dispatchMessage(Handler.java:98)
在 android.os.Looper.loop(Looper.java:172)
在 android.app.ActivityThread.main(ActivityThread.java:6637)
在 java.lang.reflect.Method.invoke(本机方法)
在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
终于得到答案here.
我们需要设置 twittersdk:// 内部回调 URL 如下 link 中所述。
第 1 步:转到您的 Twitter 应用程序设置 https://apps.twitter.com/ >> 选项卡设置 >> 将此文本 "twittersdk://" 填写到您的回调 URL 字段(我在 lib class)
第 2 步:保存更新
第 3 步:再次检查您的应用。
只需将 twittersdk:// 设置为一个回调 URL,无需附加任何内容即可工作。
编辑 1
我知道这个问题已经被问过了,但是没有人回答堆栈跟踪也没有添加到其中所以我再次问了一遍。
如果我安装 twitter 应用程序并尝试登录,那么应用程序将成功使用 twitter 登录,但是如果我从移动设备上卸载 twitter 应用程序然后尝试登录到应用程序,那么我会收到以下错误并且无法使用 twitter 登录
获取请求令牌失败
我没有看到任何 webView。单击使用 Twitter 按钮登录后。
下面是我收到的堆栈跟踪
E/Twitter:无效 json:回调 URL 未批准此客户端应用程序。可以在您的应用程序设置中调整批准的回调 URLs com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期 BEGIN_OBJECT 但在第 1 行第 1 列路径 $ 处为 STRING 在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224) 在 com.twitter.sdk.android.core.models.SafeListAdapter$1.read(SafeListAdapter.java:45) 在 com.twitter.sdk.android.core.models.SafeMapAdapter$1.read(SafeMapAdapter.java:45) 在 com.google.gson.Gson.fromJson(Gson.java:887) 在 com.google.gson.Gson.fromJson(Gson.java:852) 在 com.google.gson.Gson.fromJson(Gson.java:801) 在 com.google.gson.Gson.fromJson(Gson.java:773) 在 com.twitter.sdk.android.core.TwitterApiException.parseApiError(TwitterApiException.java:110) 在 com.twitter.sdk.android.core.TwitterApiException.readApiError(TwitterApiException.java:95) 在 com.twitter.sdk.android.core.TwitterApiException.(TwitterApiException.java:43) 在 com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42) 在 retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70) 在 android.os.Handler.handleCallback(Handler.java:789) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:172) 在 android.app.ActivityThread.main(ActivityThread.java:6637) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 由以下原因引起:java.lang.IllegalStateException:预期 BEGIN_OBJECT 但在第 1 行第 1 列路径 $ 处为 STRING 在 com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385) 在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213) 在 com.twitter.sdk.android.core.models.SafeListAdapter$1.read(SafeListAdapter.java:45) 在 com.twitter.sdk.android.core.models.SafeMapAdapter$1.read(SafeMapAdapter.java:45) 在 com.google.gson.Gson.fromJson(Gson.java:887) 在 com.google.gson.Gson.fromJson(Gson.java:852) 在 com.google.gson.Gson.fromJson(Gson.java:801) 在 com.google.gson.Gson.fromJson(Gson.java:773) 在 com.twitter.sdk.android.core.TwitterApiException.parseApiError(TwitterApiException.java:110) 在 com.twitter.sdk.android.core.TwitterApiException.readApiError(TwitterApiException.java:95) 在 com.twitter.sdk.android.core.TwitterApiException.(TwitterApiException.java:43) 在 com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42) 在 retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70) 在 android.os.Handler.handleCallback(Handler.java:789) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:172) 在 android.app.ActivityThread.main(ActivityThread.java:6637) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
E/Twitter: 获取请求令牌失败 com.twitter.sdk.android.core.TwitterApiException:HTTP 请求失败,状态:403 在 com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42) 在 retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70) 在 android.os.Handler.handleCallback(Handler.java:789) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:172) 在 android.app.ActivityThread.main(ActivityThread.java:6637) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
E/Twitter: 授权完成但出现错误 com.twitter.sdk.android.core.TwitterAuthException: 获取请求令牌失败 在 com.twitter.sdk.android.core.identity.OAuthController$1.failure(OAuthController.java:94) 在 com.twitter.sdk.android.core.internal.oauth.OAuth1aService$1.failure(OAuth1aService.java:191) 在 com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42) 在 retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70) 在 android.os.Handler.handleCallback(Handler.java:789) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:172) 在 android.app.ActivityThread.main(ActivityThread.java:6637) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
终于得到答案here.
我们需要设置 twittersdk:// 内部回调 URL 如下 link 中所述。
第 1 步:转到您的 Twitter 应用程序设置 https://apps.twitter.com/ >> 选项卡设置 >> 将此文本 "twittersdk://" 填写到您的回调 URL 字段(我在 lib class)
第 2 步:保存更新
第 3 步:再次检查您的应用。
只需将 twittersdk:// 设置为一个回调 URL,无需附加任何内容即可工作。