精确位置开关是 iOS 14 的新功能,不幸的是,Apple 没有详细记录用户将其关闭时发生的情况。以下是基于实验的总结:
启用/禁用精确位置:
Precise Location
CoreLocation Accuracy/Function Enabled Disabled
---------------------------------- -------- -------
kCLLocationAccuracyThreeKilometers YES YES
kCLLocationAccuracyReduced YES YES
kCLLocationAccuracyBest YES DEGRADED
kCLLocationAccuracyNearestTenMeters YES DEGRADED
kCLLocationAccuracyHundredMeters YES DEGRADED
kCLLocationAccuracyKilometer YES DEGRADED
Beacon Monitoring YES NO
Beacon Ranging YES NO
Precise Location
CoreBluetooth Enabled Disabled
---------------------------------- -------- -------
Bluetooth LE scanning YES NO
Precise Location
NearbyInteraction Enabled Disabled
---------------------------------- -------- -------
NI Ranging YES NO
禁用精确位置时,CoreLocation 的纬度/经度位置更新将降级到kCLAccuracyReduced提供的更新,类似于蜂窝塔数据提供的 3km 精度。
iBeacons 的测距和监控被阻止——委托方法回调不会进行,应用程序不会在后台启动。附近的交互测距被阻止。
当您关闭精确位置时,这些效果会立即生效。您可以通过查看应用程序运行时的日志记录,然后转到设置以关闭精确位置并查看行为变化来亲自查看这一点。
不幸的是,当用户禁用精确位置时,您无法强制 iOS 为您提供信标或其他位置更新。您可以做的最好的事情是检测用户是否已完成此操作(使用如下代码),然后提示用户在设置中更改此设置,以便您的应用程序正常运行。
if CLLocationManager.locationServicesEnabled() {
if #available(iOS 14.0, *) {
switch self.locationManager.accuracyAuthorization {
case .fullAccuracy:
NSLog("Precise Location allowed")
case .reducedAccuracy:
NSLog("Precise location disabled")
default:
NSLog("Precise Location not known")
}
}
}