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

Phi*_*hil 7 core-location ios swift ios13

对于上下文,我在一个需要authorizedAlways许可的应用程序上工作。由于iOS的13的版本中,我们已经注意到,我们的用户的〜3-4%的接受(从位置更新didUpdateLocations)具有的坐标0,0horizontalAccuracy的2500这似乎只发生而应用程序是在后台状态。

鉴于该应用程序记录了对授权状态(使用didChangeAuthorization)的所有更改,并且我在任何时候都看不到authorizedAlways. 也就是说,根据我所做的手动测试,在authorizedAlways用户点击初始requestAlwaysAuthorization提示后,应用程序似乎会收到状态更改通知Allow While Using App。然后,当用户将应用程序置于后台一段时间时,他们会重新提示两个选项,Keep Only While Using或者Change to Always Allow. 如果用户继续进行Keep Only While Using选择,应用程序似乎只会收到授权状态​​更改的通知(并且应用程序收到更改为authorizedWhenInUse. 的通知)

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

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

nev*_*ing 3

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

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

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

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

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