gpt4 book ai didi

objective-c - iBeacon 监控结果不可靠(didEnterRegion 和 didExitRegion)

转载 作者:搜寻专家 更新时间:2023-10-30 20:08:36 25 4
gpt4 key购买 nike

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

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

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

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

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

感谢您的宝贵时间!

最佳答案

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

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

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

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

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

  2. 将广告率调到最大。以 10 Hz 进行广告时,接收的数据包数量是 1 Hz 时的 10 倍。

  3. 如果需要,添加具有相同标识符的额外信标以扩大覆盖范围。

当然,上述做法是有代价的,包括在高广告率和发射机功率水平下电池生命周期缩短。

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

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

关于objective-c - iBeacon 监控结果不可靠(didEnterRegion 和 didExitRegion),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36405896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com