地理围栏在Android中完全无法使用吗?

由于这个错误,我的团队决定根本不使用地理围栏。 Android中的地理围栏可以使用或不可用吗?

从错误报告:

在所有内部测试设备上,一切都运行良好,包括调试和发布版本。 但是,对于某些用户,我们会收到崩溃报告,指出API存在问题:

Fatal Exception: java.lang.SecurityException: Invalid API Key for package = de.stocard.stocard .Status code received = -1 at android.os.Parcel.readException(Parcel.java:1620) at android.os.Parcel.readException(Parcel.java:1573) 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:423) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at com.google.android.gms.internal.zzrn.run(Unknown Source) at java.lang.Thread.run(Thread.java:818) 

这种情况发生在Android版本4.4.2到7.0之间,没有明显的模式。 这同样适用于设备型号和制造商:许多和多个制造商和型号。

这听起来像一个非常严重的Heisenbug。

更新:

在Android中似乎有两种不同的方式来进行地理围栏:

  1. 使用Awareness [.fence] API
  2. 使用位置Geofence API

我们需要使用Awareness API来获得我们想要的function和电池友好性。

注意:

由于“主要基于意见”,我看到一个接近投票。 所以,让我说清楚,我不希望得到不支持的意见答案。 我想要事实,参考或具体的专业知识。 我做了研究引用了一个随机的崩溃错误,没有可靠的解决方法。 我希望其他人注意到他们已经成功实施了地理围栏,并且要么:

  1. 有证据表明他们的应用程序从未遇到过此错误(从未捕获Invalid API Key for package良好崩溃报告)
  2. 已经看到了这个bug并成功实现了修复
  3. 从未见过这个bug

您链接的错误已包含所有信息,不是吗?

我们的检查中存在一个错误,当有网络错误进行身份validation时,有时会抛出此SecurityException。 该修补程序将在下一版Google Play服务中推出。

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

更新

那么,回答你的问题“Android中的地理围栏是否完全无法使用?”,我会说不,它不是“完全”无法使用,但显然包含一些问题。

你不应该因为这些错误而使用地理围栏吗? 我想这在很大程度上取决于用例,而且确实是一个基于意见的问题。 与移动设备一样,如果有效,您永远无法100%确定。 您的手机可能没有信号,即使代码中没有错误,由于各种原因,它仍可能无法获得有关某个位置的通知。 在移动设备上,它是关于如何处理错误的。

我将实现您想要实现的任何内容,尝试执行错误标记(UncaughtExceptionHandler)中建议的操作以捕获错误并在应用程序中实现分析/崩溃报告,以便您至少可以获得有关此错误的频率的信息发生在现场。

向您的用户明确指出,由于底层系统,您的应用的地理围栏function始终无法100%保证,我认为他们仍然乐意使用该function。 可能在您的应用或主页上的某个地方有一些常见问题解答,可以解决已知问题。 希望这可以帮助你做出决定