我正在使用DetectedActivityFence中的Google Awareness API。它在我自己的设备上工作正常,但我在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)的设备。这些设备没有root,看起来像在Stock ROM上工作。 10%的用户会出现此问题。
我确定我正在使用正确的API密钥,否则我可以在自己的设备上看到崩溃,是吗?
是否有人面临同样的问题?
答案 0 :(得分:5)
有一个错误错误地将网络操作中的某些错误错误地认证为应用,因为表明API密钥未正确设置,即使实际错误是其他错误。这已在内部修复,并将在下一个Google Play服务版本中推出。
目前,最好的解决方法是在调用GoogleApiClient.connect()的线程上添加UncaughtExceptionHandler。如果你在主线程上调用GoogleApiClient.connect(),那么你可以通过Looper.myLooper()。getThread()来获取Thread实例。
答案 1 :(得分:0)
来自:https://code.google.com/p/android/issues/detail?id=223751#c2
我们的支票中有一个错误,有时会抛出此错误 SecurityException当存在网络错误进行身份验证时。该 修复程序将在下一版Google Play服务中推出。
目前,最好的解决方法是建立一个 您调用的线程上的UncaughtExceptionHandler GoogleApiClient.connect()。对于大多数人来说,这将是主要的 线程,你可以通过Looper.myLooper()。getThread()。
获得
但你也会注意到回复表明这不是一个可靠的解决方法。
您可能还会注意到该帖子的OP引用了这个SO帖子,但是接受的答案并没有引用该线程,即使它们是逐字复制的。非常糟糕的形式!
答案 2 :(得分:0)
我遇到了这个问题,因为我遇到了同样的错误,我认为可能是Awareness API密钥未同步到Google Developer Console,经过大量查看并得到相同的错误后,我又回到了Awareness谷歌开发者控制台上的API,并实现我的Awareness API没有启用,即使我有包装和有一个有效的API密钥。还要确保在Manifest中设置了API密钥。希望这有助于某人。
答案 3 :(得分:0)
我挣扎了近一天,又找到了另一个答案。虽然当时接受的答案是正确的。
唯一帮助我的是在Google Developer Console上使用调试密钥库生成API密钥以进行测试,并在投入生产时将其替换为发布密钥库。
如何生成API密钥?请查看Google的单词Here
希望将来能帮到某人。