【问题标题】:iOS 14 - how to get iBeacon to wake up the app when precise location permission is denied?iOS 14 - 当精确位置权限被拒绝时,如何让 iBeacon 唤醒应用程序?
【发布时间】:2021-01-11 21:57:17
【问题描述】:
我之前在 iOS 14.0 上遇到了以下问题 - 我可以使用后台位置权限:
- 注册 iBeacon 区域监控
- 从应用切换器中终止应用
- 点击屏幕并在控制台中看到重新启动的应用程序。
- 应用正在运行,但不在应用切换器中
使用 iOS14 重新测试,在没有精确位置的情况下,我的应用不再因从应用切换器终止而被唤醒。
重新启用精确定位权限,一切正常。
我需要做什么才能让后台应用在没有精确位置许可的情况下为 iBeacon 区域唤醒?
或者
我如何检测到缺少精确位置权限并通知用户应用程序无法按预期运行?
【问题讨论】:
标签:
cllocationmanager
ibeacon
background-task
ios14
region-monitoring
【解决方案1】:
Precise Location 开关是 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 提供的信息,类似于手机信号塔数据提供的 3 公里精度。
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")
}
}
}