【问题标题】:iBeacon Monitoring with Unreliable Results (didEnterRegion & didExitRegion)具有不可靠结果的 iBeacon 监控 (didEnterRegion & didExitRegion)
【发布时间】:2016-07-24 04:27:57
【问题描述】:

我目前正在开发一个 iOS 应用程序,该应用程序可以测量和监控 iBeacon,以便能够执行一些操作并接收通知。 测距工作完美无缺,但我在信标监控和通知方面遇到了麻烦。我已经对该主题进行了相当多的研究,并且我知道 CoreLocation 框架通常存在这样的问题,但我想知道其他开发人员是如何解决/解决这个问题的。

基本上,当 didEnterRegion 和 didExitRegion 方法被触发时,我会显示本地通知。不幸的是,这两种方法经常被触发(以一种不可靠的方式),即使 iBeacon 就在它旁边,虽然有时效果很好,这使得它更烦人。 我试过降低 iBeacon 的广告间隔,虽然有帮助,但并没有完全解决问题。现在,我正在尝试使用逻辑过滤器,如果进入或退出事件发生在最后 X 分钟内,我将忽略触发通知(我正在考虑 5 到 15 之间的“神奇”数字)。

有人遇到同样的问题吗?在这种情况下添加第二个 iBeacon 会有所帮助吗? (也许监视它们,并根据这两个输入逻辑过滤退出和进入事件?)。 我还考虑添加另一层数据来显示通知,可能基于 GPS 或 Wifi 信息。有人试过吗?

还有什么想法吗?我愿意接受任何建议。

以防万一,我正在使用 Estimote iBeacons 和 iOS9 (Objective-c)。

感谢您的宝贵时间!

【问题讨论】:

    标签: objective-c ios9 core-location ibeacon estimote


    【解决方案1】:

    信标发出脉冲信号。测距还执行间歇扫描(大约每 100 毫秒)。这意味着您的设备可能会连续几秒钟错过信标,这可能会导致您遇到的结果。您可以在此方法中记录信标 RSSI 值:

    - (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)iBeacons inRegion:(CLBeaconRegion *)region
    

    我相信在看到 didExitRegion 被调用之前你会看到很多零值。这不是您的代码或信标的错误。这仅与发出的信号或检测都不是恒定的事实有关。它们在脉动。当信标与您的设备放在同一张桌子上时,可能会出现这些问题,而在现实世界中,当信号被物理物体和人阻挡时,这些问题可能会被夸大。

    我会使用测距来更准确地确定您的信标是否在附近。请注意,测距(尤其是在后台)可能会消耗大量电量。

    【讨论】:

      【解决方案2】:

      间歇性区域退出/进入事件是一个常见问题,并且通常完全按照您的建议使用带计时器的软件过滤器解决。您如何设置过滤器的细节(在处理退出逻辑之前退出后等待重新进入的最短时间)因每个用例而异,因此最好控制它。

      了解区域退出是由于 iOS 在 30 秒内未检测到来自 CLBeaconRegion 中的信标的任何蓝牙广告。 如果两个检测到的数据包相隔 31 秒,您将获得一个区域退出然后一秒后进入区域。

      这通常发生在信号电平较低的情况下。如果 iOS 设备位于信标传输范围的外部边缘,则只会收到一小部分数据包。以 1Hz 传输信标,如果连续丢失 30 个数据包,iOS 设备将收到退出事件。

      您可以采取几项措施来减少此问题,您可以在需要可靠覆盖的特定区域:

      1. 将信标发射器的功率调到最大。这将在您关心的区域提供更强的信号水平和更少的丢失数据包。

      2. 将广告费率调到最大。 10 赫兹的广告接收的数据包数量是 1 赫兹的 10 倍。

      3. 如果需要,添加具有相同标识符的其他信标以增加覆盖范围。

      当然,上述情况是有代价的,包括在高广告费率和发射器功率水平下电池寿命缩短。

      即使您做了以上所有操作,您仍然需要软件过滤器,因为如果最近的信标的传输半径,总会有一个点您处于边缘。

      您可以在我的回答here.中看到软件过滤器代码的示例

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-29
        • 1970-01-01
        • 1970-01-01
        • 2011-05-08
        • 1970-01-01
        • 2013-12-13
        • 2015-12-12
        • 1970-01-01
        相关资源
        最近更新 更多