检测 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

快速,在后台检测 ibeacons 并在范围内发送通知

iBeacon - 可以使用 startRangingBeacons 进行检测,但不能用于 didEnterRegion

检测到 iBeacon 时启动应用程序

您如何检测 iBeacon 发射器何时关闭?安卓

后台特定 iBeacon 检测