iOS 14 - 当精确定位权限被拒绝时如何通过iBeacon唤醒应用程序?

3
我之前在iOS 14.0遇到了以下问题 - 获得后台定位权限后,我可以:
  • 注册iBeacon区域监控
  • 从应用切换器中终止应用程序
  • 点击屏幕,在控制台中看到应用程序重新启动。
  • 应用运行但不在应用切换器中
在iOS14上重新测试,没有精确定位权限时,我的应用程序不再被唤醒以从应用切换器中终止。
重新启用精确定位权限,一切正常。 我需要怎样才能使iBeacon区域的后台应用程序在没有精确定位权限的情况下被唤醒? 或者 我该如何检测缺少精确定位权限并通知用户应用程序将无法按预期工作? ios14 precise permission missing
1个回答

7

“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")
                }
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接