Twitter 登录工作正常,但不断抛出错误,要求提供 API 密钥

Posted

技术标签:

【中文标题】Twitter 登录工作正常,但不断抛出错误,要求提供 API 密钥【英文标题】:Twitter Login working fine, but keeps throwing error asking for API key 【发布时间】:2015-03-27 16:37:35 【问题描述】:

我已经设法在我的 android 应用程序中实现了 twitter 登录。一切正常,所以我只是想保持清洁。

目前我只需要使用 Twitter 登录功能,所以我按照此处指示的说明进行操作:https://dev.twitter.com/twitter-kit/android/twittercore

正如我所说,一切正常,但每次我的应用程序启动时,我都会收到以下错误:

E/Fabric  ( 8859): Error dealing with settings
E/Fabric  ( 8859): java.lang.IllegalArgumentException: Fabric could not be initialized, API key missing from AndroidManifest.xml. Add the following tag to your Application element 
E/Fabric  ( 8859):     <meta-data android:name="io.fabric.ApiKey" android:value="YOUR_API_KEY"/>
E/Fabric  ( 8859):     at io.fabric.sdk.android.services.common.ApiKey.logErrorOrThrowException(ApiKey.java:93)
E/Fabric  ( 8859):     at io.fabric.sdk.android.services.common.ApiKey.getValue(ApiKey.java:44)
E/Fabric  ( 8859):     at io.fabric.sdk.android.services.settings.Settings.initialize(Settings.java:68)
E/Fabric  ( 8859):     at io.fabric.sdk.android.Onboarding.doInBackground(Onboarding.java:80)
E/Fabric  ( 8859):     at io.fabric.sdk.android.Onboarding.doInBackground(Onboarding.java:26)
E/Fabric  ( 8859):     at io.fabric.sdk.android.InitializationTask.doInBackground(InitializationTask.java:46)
E/Fabric  ( 8859):     at io.fabric.sdk.android.InitializationTask.doInBackground(InitializationTask.java:11)
E/Fabric  ( 8859):     at io.fabric.sdk.android.services.concurrency.AsyncTask$2.call(AsyncTask.java:294)
E/Fabric  ( 8859):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E/Fabric  ( 8859):     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
E/Fabric  ( 8859):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E/Fabric  ( 8859):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/Fabric  ( 8859):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/Fabric  ( 8859):     at java.lang.Thread.run(Thread.java:818)

我尝试使用我的应用程序的消费者密钥在清单文件中添加该值,但我收到以下错误:

3-24 13:34:38.451  10250-10268/... E/Fabric﹕ Unknown error while loading Crashlytics settings. Crashes will be cached until settings can be retrieved.
    org.json.JSONException: No value for app
            at org.json.JSONObject.get(JSONObject.java:389)
            at org.json.JSONObject.getJSONObject(JSONObject.java:609)
            at io.fabric.sdk.android.services.settings.DefaultSettingsJsonTransform.buildFromJson(DefaultSettingsJsonTransform.java:24)
            at io.fabric.sdk.android.services.settings.DefaultSettingsController.loadSettingsData(DefaultSettingsController.java:66)
            at io.fabric.sdk.android.services.settings.DefaultSettingsController.loadSettingsData(DefaultSettingsController.java:47)
            at io.fabric.sdk.android.services.settings.Settings.loadSettingsData(Settings.java:139)
            at io.fabric.sdk.android.Onboarding.doInBackground(Onboarding.java:80)
            at io.fabric.sdk.android.Onboarding.doInBackground(Onboarding.java:26)
            at io.fabric.sdk.android.InitializationTask.doInBackground(InitializationTask.java:46)
            at io.fabric.sdk.android.InitializationTask.doInBackground(InitializationTask.java:11)
            at io.fabric.sdk.android.services.concurrency.AsyncTask$2.call(AsyncTask.java:294)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)

如果一切正常,我不明白为什么会出现此错误,该值显然对于我的预期目的不是必需的,所以我不知道 Twitter 是否在后台做任何额外的事情。除此之外,它没有在文档中提到我需要在清单中提供该值才能使用 Twitter 登录。

更新:我在 twitter 社区中提出了同样的问题。答案是“Twitter 套件构建在 Fabric 之上,因此它需要 API 密钥才能与 Fabric 设置进行对话”。在我看来,这仍然不能回答我的问题,即除了登录之外 Twitter 还在做什么。但我猜如果它是建立在 Fabric 之上的,它可以归因于一些遗留问题,即它试图做一些必要的事情,以使 Fabric 平台工作,而这对于登录来说是不必要的。更多信息在这里:https://twittercommunity.com/t/twitter-login-working-fine-but-keeps-asking-api-key-android/34383/3

【问题讨论】:

【参考方案1】:

您似乎需要为 Crashlytics 定义一些设置,其中之一是 app 属性。看起来您正在使用 Crashlytics 所属的 Fabric。

【讨论】:

是的,但我的问题是我只想使用 Twitter 登录。所以,似乎 twitter 正在尝试做其他事情,这就是我想要解决的问题。也许无法阻止这种情况的发生,但我想知道到底发生了什么。 或者,有可能所有的 Twitter 身份验证都运行良好,而您的问题出在其他地方......

以上是关于Twitter 登录工作正常,但不断抛出错误,要求提供 API 密钥的主要内容,如果未能解决你的问题,请参考以下文章

注册不工作并抛出params错误

在 Django loaddata 中,它会为 json 格式抛出错误,但对于 yaml 格式可以正常工作,为啥?

使用 Cordova 和 Angularjs 登录 Twitter:401 未经授权的错误

发布 iOS 构建错误 - 使用未声明的标识符“Twitter”

cpanel 中的 Laravel 5.3 Socialite cacert.pem 错误

使用twitter4j库的Twitter Android登录错误