在后台监控 iBeacon 信标
Monitoring iBeacon beacons in background
我一直在开发 iOS 应用程序并尝试使用 Apple 的 CoreLocation
和 iBeacon
技术。到目前为止,我使用了三个具有不同 UUID 的信标。一切正常,直到我决定向我的应用程序添加更多信标。这才把我运行变成st运行ge的问题。据说,一个应用程序在后台时可以一次监控多达 20 个信标区域 - 但在我的特定情况下,这个数字似乎是 3。我尝试了不同的方法,但没有任何效果。当我在他们的数组中打乱信标时,结果如我所料——只有前 3 个信标区域在应用程序处于后台时触发了 didEnterRegion
和 didExitRegion
事件。这在前台时不适用。
请考虑这个:
- 我有一组自定义信标对象(来自 API)
对于每个自定义信标对象,我都创建了一个 CLBeaconRegion
的实例,如下所示:
let beaconRegion = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: region.uuid)!, identifier: region.uuid)
beaconRegion.notifyOnEntry = true
beaconRegion.notifyOnExit = true
beaconRegion.notifyEntryStateOnDisplay = true
然后我将该实例传递给 CLLocationManager 的 startMonitoringForRegion
方法,如下所示:
locationManager.startMonitoringForRegion(beaconRegion)
当循环通过 CLLocationManager 的 monitoredRegions
方法响应时,我得到了我期望的所有信标区域 regionState 2(外部)
除此之外我已经添加了:
NSLocationAlwaysUsageDescription
到应用的 Info.plist
locationManager.requestAlwaysAuthorization()
到ViewController的viewDidLoad方法
不过,didEnterRegion
和 didExitRegion
仅在我处于我开始监视的前三个信标区域中的任何一个的 运行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 个硬件加速槽。要验证这一理论,您可以:
- 卸载您认为可能会注册信标区域的其他应用,这应该会释放更多插槽。
- 最多等待 15 分钟,看看您是否在后台检测到其他区域。
此 link 在 swift 2.3 中同时具有 ibeacon 发送器和接收器应用程序。希望这会让您对 ibeacons 有一个清晰的认识。
https://www.dropbox.com/s/g0ixmynkjet0uwj/ibeacons_final%202.zip?dl=0
我一直在开发 iOS 应用程序并尝试使用 Apple 的 CoreLocation
和 iBeacon
技术。到目前为止,我使用了三个具有不同 UUID 的信标。一切正常,直到我决定向我的应用程序添加更多信标。这才把我运行变成st运行ge的问题。据说,一个应用程序在后台时可以一次监控多达 20 个信标区域 - 但在我的特定情况下,这个数字似乎是 3。我尝试了不同的方法,但没有任何效果。当我在他们的数组中打乱信标时,结果如我所料——只有前 3 个信标区域在应用程序处于后台时触发了 didEnterRegion
和 didExitRegion
事件。这在前台时不适用。
请考虑这个:
- 我有一组自定义信标对象(来自 API)
对于每个自定义信标对象,我都创建了一个
CLBeaconRegion
的实例,如下所示:let beaconRegion = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: region.uuid)!, identifier: region.uuid) beaconRegion.notifyOnEntry = true beaconRegion.notifyOnExit = true beaconRegion.notifyEntryStateOnDisplay = true
然后我将该实例传递给 CLLocationManager 的
startMonitoringForRegion
方法,如下所示:locationManager.startMonitoringForRegion(beaconRegion)
当循环通过 CLLocationManager 的 monitoredRegions
方法响应时,我得到了我期望的所有信标区域 regionState 2(外部)
除此之外我已经添加了:
NSLocationAlwaysUsageDescription
到应用的 Info.plist
locationManager.requestAlwaysAuthorization()
到ViewController的viewDidLoad方法
不过,didEnterRegion
和 didExitRegion
仅在我处于我开始监视的前三个信标区域中的任何一个的 运行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 个硬件加速槽。要验证这一理论,您可以:
- 卸载您认为可能会注册信标区域的其他应用,这应该会释放更多插槽。
- 最多等待 15 分钟,看看您是否在后台检测到其他区域。
此 link 在 swift 2.3 中同时具有 ibeacon 发送器和接收器应用程序。希望这会让您对 ibeacons 有一个清晰的认识。
https://www.dropbox.com/s/g0ixmynkjet0uwj/ibeacons_final%202.zip?dl=0