首页 > 解决方案 > 为什么 iOS 13 Core Location 有时会在后台返回坐标为 0,0 的位置?

问题描述

对于上下文,我在一个需要authorizedAlways许可的应用程序上工作。自 iOS 13 发布以来,我们注意到大约 3-4% 的用户正在接收位置更新(来自didUpdateLocations),坐标为0,0horizontalAccuracy2500。这似乎只发生在应用程序处于后台状态时。

这一切都非常令人困惑,因为该应用程序记录了对授权状态的所有更改(使用didChangeAuthorization),而且我在任何时候都看不到对除authorizedAlways. 也就是说,根据我所做的手动测试,authorizedAlways在用户requestAlwaysAuthorization使用Allow While Using App. 然后,当用户将应用程序后台运行一会儿时,他们会再次提示有两个选项,Keep Only While Using或者Change to Always Allow. 如果用户继续选择,应用程序似乎只会收到授权状态​​更改的Keep Only While Using通知(并且应用程序会收到更改的通知authorizedWhenInUse。)

我有一个假设,在提示用户进行后台使用(或操作系统确定需要提示)和用户实际响应提示之间可能存在一些奇怪的状态,但我的测试始终表明在该状态下该应用程序根本没有收到任何位置更新。

我在解决这个问题时遇到了困难,希望它只是一个 iOS 13 错误,但我还没有听说任何其他应用程序遇到这个问题。非常感谢有关进一步故障排除想法的任何建议,或者只是您的应用程序也遇到了这个问题,所以我可以停止敲打它!

标签: iosswiftcore-locationios13

解决方案


这听起来像一个错误。如果位置无效,它应该有一个负值,horizontalAccuracy但这绝对是一个无效的位置。运行或比较它,但CLLocationCoordinate2D由于你有一个正的水平精度,它可能会(错误地)告诉你它是有效的。CLLocationCoordinate2DIsValid()kCLLocationCoordinate2DInvalid

我的猜测与您的猜测相同,在用户从第二个提示中实际授予 Always 之前,该应用已被告知它具有“始终”权限,并且它在后台以某种方式接收到错误的位置。

没有通知,因为您的应用永远不应该知道它何时实际拥有 Always 权限(大概是为了防止它等到它拥有 Always 开始滥用后台位置)。

向 Apple 提交错误或使用 DTS 事件。如果这是一个框架错误,您应该重新计入您的 DTS 并同时获得更快的支持。

同时,为包含坐标的无效位置添加额外检查0,0


推荐阅读