iBeacon监测可靠性

4
我需要帮助理解一些iBeacon的可靠性问题,当使用CoreLocation监控iBeacon时,我观察到这些问题。 我有一组具有相同UUID但不同major和minor号码的信标。我的程序设置为监视它们所有(而不是范围)。我将信标的传输功率设置为最小值(据称会产生5英尺的信标区域半径)。有时它表现得很好,但我观察到了一些不一致的行为,包括:
- 走近信标,甚至在旁边站了几分钟也没有收到进入事件 - 从远处信标接收到进入事件(已经在不同区域内且未移动) - 在信标区域内坐着时发生间歇性的退出/进入事件(从阅读其他帖子中可以看出这种情况很常见)
我对人们可能知道的iBeacon最佳实践感兴趣。我观察到的问题似乎源于不可靠的传输范围和波动的信标信号强度。是否有简单的方法来解决这个问题?
我的目标是在附近放置几个信标。我是否应该考虑测距以帮助减少某些不可靠性?如果是这样,我的理解是您无法在后台测距可靠性。
此外,我正在尝试确认如果您的应用程序已经位于信标区域内,是否会收到进入事件?
2个回答

2
通常来说,即使在靠近的范围内,降低信标发射功率会导致非常不可靠的检测结果。这是因为弱信号意味着低信噪比,这会导致间歇性的信标检测失败,因为它们被视为背景噪声并且几何变化随时间而改变。这就是你描述的进入/退出事件的原因。 另一种选择是最大限度地提高信标发射功率并依靠信标测距,以基于估计距离或原始信号强度(RSSI)过滤远离的信标。 这通常会证明更加可靠,因为更强的传输具有更高的信噪比,并且不太容易受到无线电噪声和其他环境变化的影响。
然而,这种替代方案的主要挑战是iOS在后台对信标测距进行了限制,每个区域进入/退出只能持续10秒,或者在请求时延长至180秒。如果您请求特殊的位置后台权限,则可以进行无限制的后台测距,但这需要特殊的AppStore批准并使用更多电池。
这种方法是否适用于您的用例?这取决于您试图实现的具体内容以及用户在信标附近停留的频率。您还可以通过放置信标以引起进入/退出事件来操纵系统。
最后,虽然您无法在应用程序启动时获得区域进入通知,但您可以随时动态请求区域内/外状态,这对您的需求应该可以很好地工作。

谢谢您的回复 - 您如何动态请求区域的进出状态? - mattnedrich
您可以调用 locationManager.requestStateForRegion(region),这将触发回调函数 locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion),并返回传递区域的进出状态。 - davidgyoung
你可以调用locationManager.requestStateForRegion(region),它会触发一个回调函数locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion),并返回传递区域的进入/离开状态。 - davidgyoung
谢谢,我再次感谢您的帮助。还有一个问题 - 您说理论上可以进行无限后台范围。我们启用了“位置更新”后台模式,locationManager.pausesLocationUpdatesAutomatically = false,并且locationManager.allowsBackgroundLocationUpdates = true。除了这些之外,我们还需要做什么才能“理论上”看到无限后台范围?它目前在后台的进入/退出事件期间进行范围测量,但不像在前台那样持续进行。 - mattnedrich
你需要在plist中添加位置后台模式,并启动一个后台线程。请参考这里:http://developer.radiusnetworks.com/2014/11/13/extending-background-ranging-on-ios.html - davidgyoung

1
作为一个有趣的小知识:上次我们测量时,RSSI阈值达到-88 dBm及以上时,监测到信标被认为是“在范围内”的(即,如果RSSI值高于此值,则会收到“进入”信号;如果低于此值,则会收到“退出”信号——请记住30秒退出延迟)。
对于故障排除练习,您可以开始对信标进行测距并记录RSSI值,并检查它们与该阈值的相对位置如何比较。

感谢提供信息。我正在室内近距离环境中使用信标。因此,我将信标功率调低(以便其具有约5至10英尺的半径)。我想知道这种较低的功率是否会导致监测方面的可靠性问题(正如@davidgyoung所建议的那样)。 - mattnedrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接