为什么 iOS 13 Core Location 有时会在后台返回坐标为 0,0 的位置?

Why is iOS 13 Core Location sometimes returning locations with coordinate 0,0 in the background?

对于上下文,我开发的应用程序需要 authorizedAlways 权限。自 iOS 13 发布以来,我们注意到大约 3-4% 的用户正在接收坐标为 0,0 和 [=14= 的位置更新(来自 didUpdateLocations) ] 的 2500。这似乎只发生在应用程序处于后台状态时。

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

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

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

这听起来像是一个错误。如果该位置无效,则 horizontalAccuracy 应为负值,但这绝对是无效位置。 运行 CLLocationCoordinate2DCLLocationCoordinate2DIsValid() 或将其与 kCLLocationCoordinate2DInvalid 进行比较,但由于您的水平精度为正,因此它可能会(错误地)告诉您它是有效的。

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

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

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

与此同时,为包含坐标 0,0.

的无效位置添加额外检查