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

问题描述 投票:2回答:1

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

鉴于该应用程序记录了对授权状态的所有更改(使用didChangeAuthorization),所以这一切都非常令人困惑,并且无论如何我都不会看到对authorizedAlways以外的值的任何更改。就是说,基于我的手动测试,似乎确实是在用户单击authorizedAlways的初始requestAlwaysAuthorization提示后,应用程序会收到Allow While Using App状态更改的通知。然后,当用户使应用程序后台运行一会儿时,系统会以两个选项Keep Only While UsingChange to Always Allow再次提示他们。如果用户继续进行Keep Only While Using选择,则该应用似乎仅收到有关授权状态更改的通知(并且该应用被通知了authorizedWhenInUse的更改。)

我有一个假设,在提示用户进行后台使用(或操作系统确定需要提示)与用户实际响应提示之间可能存在一些怪异的状态,但是我的测试非常一致地表明,指出应用程式根本没有收到任何位置更新。

我在解决此问题时遇到了麻烦,希望它只是一个iOS 13错误,但我还没有听说过其他任何遇到此问题的应用程序。非常感谢您提供有关进一步的故障排除想法的建议,或者仅仅是您的应用也遇到了此问题,因此我可以不再为此烦恼!

ios swift core-location ios13
1个回答
2
投票

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

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

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

要么向Apple提交错误,要么使用DTS事件。如果是框架错误,则应重新认证DTS并同时获得更快的支持。

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

© www.soinside.com 2019 - 2024. All rights reserved.