【问题标题】:Google Awareness API SecurityException is thrown引发 Google Awareness API SecurityException
【发布时间】:2016-09-08 12:11:04
【问题描述】:

我正在使用来自Google Awareness APIDetectedActivityFence。它在我自己的设备上运行良好,但我在 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 密钥,否则我可以在自己的设备上看到崩溃,可以吗?

有人遇到过同样的问题吗?

【问题讨论】:

  • 你在谷歌控制台中创建了 API 密钥吗?
  • @Amy 是的,它适用于我的设备,我认为密钥是正确的。
  • @aeinsam 你生成的 API Keypackage name 不同。我的意思是检查您的应用程序的包名称以及您在生成 API Key 时在开发者控制台中输入的包名称。
  • @jaydroider 检查,这与我在我的应用程序中使用的相同。
  • 我向 AOSP 问题跟踪器报告了该问题,我希望那是正确的,或者他们可以提供有关正确错误跟踪器的提示:code.google.com/p/android/issues/detail?id=223751

标签: android google-awareness


【解决方案1】:

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

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

【讨论】:

  • 修复将于 2017 年初推出。
  • 你怎么知道的?
  • 似乎是从错误报告中转述的。我创建了一个正确引用的新答案。密切关注该线程并在那里进行更新非常重要。从我读到的内容来看,对于这种“最佳解决方法”是否有效存在分歧。否决您的来源。
  • @mklimek:mochu 是我在 Google 的 Awareness API 同事。
  • 这个错误修复了吗?
【解决方案2】:

发件人:https://code.google.com/p/android/issues/detail?id=223751#c2

我们的检查中有一个错误,有时会抛出这个 身份验证时出现网络错误时的 SecurityException。这 修复将在下一版本的 Google Play 服务中推出。

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

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

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

【讨论】:

    【解决方案3】:

    我遇到了这个问题,因为我遇到了同样的错误,我认为这可能是 Awareness API 密钥没有同步到 Google Developer Console,经过大量查找并遇到同样的错误后,我回到了 Awareness Google Developer Console 上的 API 并意识到我的 Awareness API 未启用,即使我设置了包并拥有有效的 API 密钥。还要确保在您的清单中设置了 API 密钥。希望这对某人有所帮助。

    【讨论】:

      【解决方案4】:

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

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

      如何生成 API 密钥?请查看谷歌的话本身Here

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多