7

我正在使用来自Google Awareness API的DetectedActivityFence。它在我自己的设备上运行良好,但我在 Crashlytics 中收到了几次关于SecurityException的崩溃。

Fatal Exception: java.lang.SecurityException: Invalid API Key for package = [package_name] .Status code received = -1
   at android.os.Parcel.readException(Parcel.java:1540)
   at android.os.Parcel.readException(Parcel.java:1493)
   at com.google.android.gms.common.internal.zzu$zza$zza.zza(Unknown Source)
   at com.google.android.gms.common.internal.zzd.zzqz(Unknown Source)
   at com.google.android.gms.internal.zzpw$zzc.zzapl(Unknown Source)
   at com.google.android.gms.internal.zzpw$zzf.run(Unknown Source)
   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 com.google.android.gms.internal.zzrn.run(Unknown Source)
   at java.lang.Thread.run(Thread.java:818)

这发生在 Android 版本之间没有任何关联,即它影响来自不同制造商和不同 Android 版本(5.x-6.x)的设备。这些设备没有植根,看起来像在 Stock ROM 上工作。我有 10% 的用户会出现这个问题。

我确定我使用了正确的 API 密钥,否则我可以在自己的设备上看到崩溃,可以吗?

有人遇到同样的问题吗?

4

4 回答 4

5

有一个错误会错误地将网络操作中的一些错误错误地误认为验证应用程序的错误,这表明 API 密钥设置不正确,即使实际错误是其他错误。此问题已在内部修复,并将在下一个 Google Play 服务版本中推出。

目前,最好的解决方法是在调用 GoogleApiClient.connect() 的线程上添加 UncaughtExceptionHandler。如果在主线程上调用 GoogleApiClient.connect(),那么可以通过 Looper.myLooper().getThread() 获取 Thread 实例。

于 2016-10-14T23:18:20.427 回答
0

我遇到了这个问题,因为我遇到了同样的错误,我认为这可能是 Awareness API 密钥没有同步到 Google Developer Console,经过大量查找并遇到相同的错误后,我回到了 Google 上的 Awareness API开发者控制台并意识到我的 Awareness API 没有启用,尽管我已经设置了包并且有一个有效的 API 密钥。还要确保在您的清单中设置了 API 密钥。希望这可以帮助某人。

于 2017-02-08T14:55:43.337 回答
0

我挣扎了将近一天,找到了另一个答案。尽管当时接受的答案是正确的。

唯一对我有帮助的是使用调试密钥库在 Google Developer Console 上生成 API 密钥以进行测试,并在投入生产时将其替换为发布密钥库。

如何生成 API 密钥?请在此处查看 Google 的文字本身

希望它将来对某人有所帮助。

于 2017-12-13T11:28:36.337 回答
0

来自:https ://code.google.com/p/android/issues/detail?id=223751#c2

我们的检查中有一个错误,当需要验证的网络错误时,有时会抛出此 SecurityException。该修复程序将在下一版本的 Google Play 服务中推出。

目前,最好的解决方法是在调用 GoogleApiClient.connect() 的线程上设置 UncaughtExceptionHandler。对于大多数人来说,这将在主线程上,您可以通过 Looper.myLooper().getThread() 获得。

但是您也会注意到,回复表明这不是一个可靠的解决方法。

您可能还注意到该线程的 OP 引用了这个 SO 帖子,但接受的答案并没有反向引用该线程,即使他们逐字复制。很糟糕的形式!

于 2017-02-06T21:19:58.460 回答