Pio*_*ski 5 core-location ios ibeacon swift
我一直在开发iOS应用程序并玩弄苹果CoreLocation和iBeacon技术.到目前为止,我使用了三个具有不同UUID的信标.一切都很好,直到我决定在我的应用程序中添加更多信标.只有那时我遇到了奇怪的问题.有人说,一个应用程序可以在后台监视多达20个信标区域 - 但在我的特定情况下,这个数字似乎是3.我尝试了不同的方法,没有任何效果.当我在他们的数组中改变信标时,结果就像我预期的那样 - 只有前三个信标区域被触发,didEnterRegion而didExitRegion应用程序处于后台的事件.当它在前景时没有应用.
请考虑一下:
对于每个自定义信标对象,我创建一个CLBeaconRegion类似的实例:
let beaconRegion = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: region.uuid)!, identifier: region.uuid)
beaconRegion.notifyOnEntry = true
beaconRegion.notifyOnExit = true
beaconRegion.notifyEntryStateOnDisplay = true
Run Code Online (Sandbox Code Playgroud)然后我将该实例传递给CLLocationManager的startMonitoringForRegion方法,如下所示:
locationManager.startMonitoringForRegion(beaconRegion)
当循环通过CLLocationManager的monitoredRegions方法响应时,我获得了我期望的所有信号区域regionState 2(外部)
最重要的是,我已经添加:
NSLocationAlwaysUsageDescription
到应用程序的Info.plist
locationManager.requestAlwaysAuthorization()
Run Code Online (Sandbox Code Playgroud)
到ViewController的viewDidLoad方法
不过,didEnterRegion和didExitRegion我在任何我开始监测前三灯塔地区的范围是只触发.
谢谢,
Piotr Czarnoleski
iOS设备具有有限数量的用于信标检测的硬件加速槽.这些插槽遵循蓝牙芯片,以在信标区域模式匹配时通知操作系统.当使用这些插槽时,背景检测非常快 - 区域输入事件可以在范围内的信标传输的第二或两个内发生.
但是,如果这些插槽耗尽,则操作系统必须回退到完全扫描以找到其余区域.操作系统限制这些节省电池.证据表明它们大约每15分钟发生一次.这意味着,如果您的应用程序监控的任何未获得硬件加速槽的区域在匹配的信标进入范围后最多可能需要15分钟(尽管平均而言通常需要更少的时间 - 7.5分钟会是平均值)
有多少硬件插槽?这是未记录的,可能因iOS设备型号而异.但是实验表明它可能大约为30.这是在手机上的所有应用程序中,与每个应用程序的20个区域限制完全无关.注册区域的第一批应用程序是第一批获得插槽的应用程序.
在此处阅读更多内容:https://developer.radiusnetworks.com/2015/04/21/max-beacon-regions-ios.html
您可能正在遇到上述情况,并且您的手机上只有3个硬件加速插槽可用于您的应用.要测试这个理论,你可以:
| 归档时间: |
|
| 查看次数: |
2738 次 |
| 最近记录: |