ios - 为什么 iOS 13 Core Location 有时会在后台返回坐标为 0,0 的位置?
问题描述
对于上下文,我在一个需要authorizedAlways
许可的应用程序上工作。自 iOS 13 发布以来,我们注意到大约 3-4% 的用户正在接收位置更新(来自didUpdateLocations
),坐标为0,0
和horizontalAccuracy
2500。这似乎只发生在应用程序处于后台状态时。
这一切都非常令人困惑,因为该应用程序记录了对授权状态的所有更改(使用didChangeAuthorization
),而且我在任何时候都看不到对除authorizedAlways
. 也就是说,根据我所做的手动测试,authorizedAlways
在用户requestAlwaysAuthorization
使用Allow While Using App
. 然后,当用户将应用程序后台运行一会儿时,他们会再次提示有两个选项,Keep Only While Using
或者Change to Always Allow
. 如果用户继续选择,应用程序似乎只会收到授权状态更改的Keep Only While Using
通知(并且应用程序会收到更改的通知authorizedWhenInUse
。)
我有一个假设,在提示用户进行后台使用(或操作系统确定需要提示)和用户实际响应提示之间可能存在一些奇怪的状态,但我的测试始终表明在该状态下该应用程序根本没有收到任何位置更新。
我在解决这个问题时遇到了困难,希望它只是一个 iOS 13 错误,但我还没有听说任何其他应用程序遇到这个问题。非常感谢有关进一步故障排除想法的任何建议,或者只是您的应用程序也遇到了这个问题,所以我可以停止敲打它!
解决方案
这听起来像一个错误。如果位置无效,它应该有一个负值,horizontalAccuracy
但这绝对是一个无效的位置。运行或比较它,但CLLocationCoordinate2D
由于你有一个正的水平精度,它可能会(错误地)告诉你它是有效的。CLLocationCoordinate2DIsValid()
kCLLocationCoordinate2DInvalid
我的猜测与您的猜测相同,在用户从第二个提示中实际授予 Always 之前,该应用已被告知它具有“始终”权限,并且它在后台以某种方式接收到错误的位置。
没有通知,因为您的应用永远不应该知道它何时实际拥有 Always 权限(大概是为了防止它等到它拥有 Always 开始滥用后台位置)。
向 Apple 提交错误或使用 DTS 事件。如果这是一个框架错误,您应该重新计入您的 DTS 并同时获得更快的支持。
同时,为包含坐标的无效位置添加额外检查0,0
。
推荐阅读
- go - 如何将多维切片[]接口{}转换为切片[]字符串?
- angular - 以角度重置选定的输入字段
- python-3.x - 如何在 python 多处理中使用 imap_unordered 处理异常
- xcode - 在 Xcode 中编程 Octave
- java - 为什么我在设计查看器中的字体在 Android Studio 中是模糊的?
- dotvvm - DotVVM REST API 自动刷新
- java - 遍历 Firebase 数据库
- elasticsearch - 在 Elasticsearch 中使用 update_by_query API 更新文档或插入
- python - Seaborn:数据上方辅助轴的网格线(具有不同的刻度)
- python - 从另一个数据帧中查找和替换数据帧