在后台监控 iBeacon 信标

Monitoring iBeacon beacons in background

我一直在开发 iOS 应用程序并尝试使用 Apple 的 CoreLocationiBeacon 技术。到目前为止,我使用了三个具有不同 UUID 的信标。一切正常,直到我决定向我的应用程序添加更多信标。这才把我运行变成st运行ge的问题。据说,一个应用程序在后台时可以一次监控多达 20 个信标区域 - 但在我的特定情况下,这个数字似乎是 3。我尝试了不同的方法,但没有任何效果。当我在他们的数组中打乱信标时,结果如我所料——只有前 3 个信标区域在应用程序处于后台时触发了 didEnterRegiondidExitRegion 事件。这在前台时不适用。

请考虑这个:

  1. 我有一组自定义信标对象(来自 API)
  2. 对于每个自定义信标对象,我都创建了一个 CLBeaconRegion 的实例,如下所示:

    let beaconRegion = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: region.uuid)!, identifier: region.uuid)
    
    beaconRegion.notifyOnEntry = true
    beaconRegion.notifyOnExit = true
    beaconRegion.notifyEntryStateOnDisplay = true
    
  3. 然后我将该实例传递给 CLLocationManager 的 startMonitoringForRegion 方法,如下所示:

    locationManager.startMonitoringForRegion(beaconRegion)

当循环通过 CLLocationManager 的 monitoredRegions 方法响应时,我得到了我期望的所有信标区域 regionState 2(外部)

  1. 除此之外我已经添加了:

    NSLocationAlwaysUsageDescription

到应用的 Info.plist

locationManager.requestAlwaysAuthorization()

到ViewController的viewDidLoad方法

不过,didEnterRegiondidExitRegion 仅在我处于我开始监视的前三个信标区域中的任何一个的 运行ge 时触发。

谢谢,

彼得·查尔诺莱斯基

Core Location 可让您监控每个应用总共 20 CLRegion 秒。信标区域和地理围栏区域都计入 20 个区域限制。

为了在后台监控信标,您需要将 NSLocationAlwaysUsageDescription 键添加到您的 info.plist,并且如果您在启动时调用位置管理器的 requestAlwaysAuthorization 方法还没有 kCLAuthorizationStatusAuthorizedAlways.

的授权状态

除此之外,您还需要 post 有关应用详情、相关代码和调试信息的更多信息,以便我们为您提供帮助。

请注意,您可以使用位置管理器的 monitoredRegions 属性 来获取您的应用当前正在监控的区域列表。我建议检查它,以及 authorizationStatus,看看发生了什么。

iOS 设备用于信标检测的硬件加速槽 数量有限。当信标区域模式匹配时,这些时隙由蓝牙芯片通知操作系统。使用这些时隙时,背景检测非常快——区域进入事件可以在信标传输进入范围内的一两秒内发生。

但是,如果这些插槽 运行 超出,则操作系统必须回退到完全扫描以找到剩余的区域。操作系统会限制这些以节省电池。有证据表明它们大约每 15 分钟发生一次。这意味着,如果您的应用程序监控的任何区域没有获得硬件加速插槽,则在匹配的信标进入范围后最多可能需要 15 分钟才能检测到(尽管平均而言,它通常需要更少的时间——7.5 分钟会取平均值)

有多少硬件插槽可用?这是未记录的,可能因 iOS 设备型号而异。但实验表明它可能约为 30。这适用于 phone 上的所有应用,并且与每个应用 20 个区域的限制完全无关。最先注册区域的应用是最先获得插槽的应用。

在此处阅读更多内容:https://developer.radiusnetworks.com/2015/04/21/max-beacon-regions-ios.html

可能以上就是您遇到的情况,您的应用phone上只剩下 3 个硬件加速槽。要验证这一理论,您可以:

  1. 卸载您认为可能会注册信标区域的其他应用,这应该会释放更多插槽。
  2. 最多等待 15 分钟,看看您是否在后台检测到其他区域。

此 link 在 swift 2.3 中同时具有 ibeacon 发送器和接收器应用程序。希望这会让您对 ibeacons 有一个清晰的认识。

https://www.dropbox.com/s/g0ixmynkjet0uwj/ibeacons_final%202.zip?dl=0