检测 iBeacons 的延迟
Posted
技术标签:
【中文标题】检测 iBeacons 的延迟【英文标题】:Delay in detecting iBeacons 【发布时间】:2014-06-06 06:08:42 【问题描述】:我正在使用 CoreLocation 框架使用 iBeacons 进行区域监控。当我使用“Locate for iBeacon”之类的应用程序模拟信标时,一切正常。当我打开信标传输时,我可以立即检测到信标。
但是,当使用 Radius 提供的真实信标进行测试时,检测信标需要很长时间。
我也启用了 notifyEntryOnDisplay 。
从真实信标和模拟信标传输时有区别吗?
【问题讨论】:
【参考方案1】:当您使用 ios 使用 Locate for iBeacon 或其他应用程序作为 iBeacon 进行传输时,其无线电传输在功能上与配置了相同标识符的正确设计的硬件 iBeacon 相同。简单地说,iOS 设备不是模拟的 iBeacon,它是一个 iBeacon。
这些设备之间的平均检测时间应该相同,因此可能存在测试设置问题。
您是否在每种情况下都使用完全相同的程序来检测信标?当您进行每次测试时,两个应用程序的测试用例是否始终在后台?您如何打开硬件信标(或使其进入范围)?还有什么不同的地方?
全面披露:我是 Radius Networks 的首席工程师,也是 iBeacon Locate 的作者。
编辑:如果您想比较不同 iBeacon 类型之间的检测时间,您必须在不同设备类型之间使用完全相同的程序,因为不同的测量技术会改变您的结果。对于电池供电的信标来说,这可能具有挑战性(您必须打开它们并取出电池,然后再将其放回原位。)
在测量背景检测时间时,将 NSLog 语句放入您的 didEnterRegion 和 didExitRegion 回调中,然后使用日志窗口中的时间戳进行所有比较。确保在期待进入事件之前获得退出事件。
此外,请了解同一信标的检测时间可能会因一次测量而异,因此请进行多次测量。
您可以在此处了解我用来获得准确检测时间测量的技术:http://developer.radiusnetworks.com/2013/11/13/ibeacon-monitoring-in-the-background-and-foreground.html
【讨论】:
是的,大卫,它的设置是一样的。我可以启用和禁用 iLocate 上的传输,这给了我一致的结果。但是在真正的信标上你不能这样做。所以首先我尝试打开和关闭蓝牙,但这没有帮助。给了我不一致的结果。所以我从区域出去然后回来,这在始终打开测距的情况下效果很好。但是如果我只使用区域输入回调检测需要更多时间。 据我所知,我的 iPhone 5C 总是先于 iPhone 5 检测到。iPhone 5 在该区域内需要一段时间(大约一分钟)来检测信标。 启用测距将加快前台的监控检测时间。请参阅我编辑的答案中的链接。 嘿大卫,当使用真正的信标进行测试时,我可以通过打开/关闭手机上的蓝牙来模拟进入和存在过渡吗?是否给出一致的结果? 这可能有效,但我不会依赖它进行重要测试,因为检测时间会受到很大影响【参考方案2】:你可以使用
- (void)locationManager:(CLLocationManager *)manager
didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
当您在区域内时,此方法将不断调用
【讨论】:
当应用程序被杀死或在后台运行时,我认为这不起作用以上是关于检测 iBeacons 的延迟的主要内容,如果未能解决你的问题,请参考以下文章
CBPeripheralManager 延迟停止广告/位置管理器范围停止 iBeacon
iBeacon - 可以使用 startRangingBeacons 进行检测,但不能用于 didEnterRegion