微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

iOS 14-如何在拒绝精确位置权限时让iBeacon唤醒应用程序?

如何解决iOS 14-如何在拒绝精确位置权限时让iBeacon唤醒应用程序?

我以前在iOS 14.0上遇到以下问题-拥有后台位置权限,我可以这样做:

  • 注册iBeacon区域监视
  • 从应用切换器中杀死该应用
  • 点击屏幕,然后在控制台中重新启动该应用。
  • 应用程序正在运行,但不在应用程序切换器中

在iOS14上进行了重新测试,没有精确的位置,我的应用程序也不再从应用程序切换器中被唤醒。

重新启用精确的位置权限,一切照旧进行。

需要执行什么操作才能使后台应用在没有精确位置许可的情况下唤醒iBeacon区域?

如何检测到缺少精确的位置权限,并通知用户该应用无法正常运行?

ios14 precise permission missing

解决方法

“精确位置”开关是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")
                }
            }
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。