“Precise Location”(精确定位)开关是iOS 14中的新功能,不幸的是,当用户关闭该选项时会发生什么具体情况并没有被苹果充分记录。以下是基于实验的总结:
启用/禁用精确定位:
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提供的类似于基站数据提供的3公里精度。
iBeacons的测距和监控被阻止了--委托方法回调不会被执行,应用程序也不会在后台启动。附近互动测距也被阻止了。
这些影响将在关闭“精确定位”后立即生效。您可以通过查看应用程序运行时的日志,然后转到设置页面关闭“精确定位”来自己验证行为变化。
不幸的是,当用户禁用精确定位时,无法强制iOS提供iBeacon或其他位置更新。你唯一能做的就是检测用户已经这样做(使用类似下面的代码),然后提示用户在设置中更改以使您的应用程序正常工作。
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")
}
}
}