gpt4 book ai didi

ios - 超过 20 个信标的 iBeacon 区域监控和接近度?

转载 作者:技术小花猫 更新时间:2023-10-29 10:23:28 24 4
gpt4 key购买 nike

我一直在开发一个原型(prototype) iOS 应用程序,它利用 iBeacons 为办公室员工提供位置相关信息,具体取决于他们在办公室的位置。理想的用例是,每当员工进入或离开他们的办公室时,都会触发一个回调,以通知的形式向他们提供一些信息(它可能会首先查询服务器以获取信息,等等 - 诸如此类)。我们还希望能够在应用程序后台运行或终止时执行此操作;幸运的是,我们已经知道即使应用程序处于后台或挂起状态,信标区域边界交叉点也会触发适当的 CoreLocation 回调。

环顾四周,我大致了解到,对于如何进行信标区域监控,我有两种选择:

  1. 为每个 iBeacon 提供自己的 CLBeaconRegion,并独立监控每个区域。
  2. 监控与多个 iBeacon 对应的 CLBeaconRegion - 例如,每个 iBeacon 具有相同的 UUID,并且仅监控与该 UUID 对应的 CLBeaconRegion - 然后尝试使用测距确定哪个信标触发了边界交叉。

到目前为止,我选择了选项 #1。这种方法的优点是我得到 didEnterRegion: 和 didExitRegion: 调用每个单独的信标,并立即知道我进入/退出了哪个信标。另外,我只接到一个进入调用和一个退出调用,这正是我想要的。不幸的是,我刚刚意识到这种方法也限制了我只能使用 20 个信标(因为每个信标都有自己的区域)。

我不太熟悉 #2 的确切实现细节,所以如果我错了请纠正我。但似乎这种做法有更多的缺点:

  • Apple 不鼓励应用在后台进行测距,因为结果可能不那么准确。
  • 测距调用每秒触发一次,而我只想有“进入/退出”回调。
  • 如果信标有区域重叠,测距调用可能会不断翻转哪个是“最近的”,这会使事情进一步复杂化。

基本上,我想知道是否有一种方法可以利用选项 #2,但仍然具有选项 #1 的好处 - 一种快速简便的方法,可以立即确定哪个信标触发了区域更改,只需一次进入或退出打回来?

我希望这个问题足够清楚。我自己的脑子里还不是很清楚,尤其是测距是如何工作的。

最佳答案

选项 #2 绝对更复杂,但您必须接受这些复杂情况才能绕过 20 个区域的监控限制。

几点:

  • 在后台,您只有大约 5 秒的测距时间,这没有给您足够的时间来平均来自每个信标的 RSSI(信号强度)以获得良好的距离估计。所以,是的,估计会不太准确。如果您了解此限制并且可以在您的用例中接受它,那么在后台测距就没有错。

  • 是的,进入区域后每个信标会收到多个测距调用,并且在退出区域时不会收到任何回调。您必须编写额外的代码来处理这个问题。我通过维护所有可见的唯一信标(相同的 uuid/major/minor)的 NSMutableArray 并在测距回调中更新它来做到这一点。然后您可以在区域退出回调中访问这个数组,这样您就知道哪些信标消失了。当然,在 5 秒的背景测距时间到期后,可能会看到其他信标,但您的应用永远不会知道它们。使用此选项,您必须接受此限制。

  • 虽然测距中距离估计的误差确实可能会错误地告诉您哪个信标最近,但在进行监控时您会遇到更糟糕的问题,因为您根本无法获得距离估计。如果多个信标大约同时进入监控范围,则无法保证您收到的第一个进入区域回调将针对最近的信标。因此,如果您的用例需要根据最近的信标采取行动,那么您必须进行测距(知道距离估计可能存在误差。)

关于ios - 超过 20 个信标的 iBeacon 区域监控和接近度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25387660/

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