iBeacon区域监控和接近> 20个信标?

 不懂 发布于 2022-12-27 10:53

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

从环顾四周来看,我明白,对于如何进行信标区域监控,我有两种选择:

    为每个iBeacon提供自己的CLBeaconRegion,并独立监控每个区域.

    监视对应于多个iBeacons CLBeaconRegions - 例如,每个iBeacon显示具有相同的UUID和仅监视对应于该UUID一个CLBeaconRegion - 然后试图确定使用测距哪个信标触发了边界交叉.

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

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

当应用程序处于后台时,Apple不鼓励范围,因为结果可能不准确.

测距调用每秒触发一次,而我只想进行"进入/退出"回调.

如果信标具有区域重叠,则测距呼叫可能不断地翻转哪一个"最接近",这将使事情进一步复杂化.

基本上,我想知道是否有办法利用选项#2,但仍然有选项#1的好处 - 一种快速简便的方法来立即确定哪个信标只通过一个进入或退出回调触发了区域变化?

我希望这个问题足够清楚.在我自己的头脑中并不是完全清楚,特别是测距的工作方式.

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

    几点:

    在后台,您只有大约5秒的测距时间,这不会给您足够的时间来平均每个信标的RSSI(信号强度)以获得良好的距离估计.所以,是的,估计数将不那么准确.如果你理解这个限制并且可以为你的用例使用它,那么在后台进行测距没有任何问题.

    是的,在区域输入后,您将获得每个信标的多个范围调用,并且您将不会在区域退出时获得任何回调.你必须编写额外的代码来处理这个问题.我通过维护所见的所有唯一信标(相同的uuid/major/minor)的NSMutableArray并在测距回调中更新它来完成此操作.然后,您可以在区域退出回调中访问此数组,以便了解哪些信标消失了.当然,在5秒的背景测距时间到期后,可能会看到额外的信标,但您的应用程序永远不会知道它们.使用此选项,您必须接受此限制.

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

    2022-12-27 10:56 回答
  • 第二种方法的缺点是检测特定信标的输入将纯粹基于测距,如果应用程序被杀死则不起作用.原因是我们只会获得一次didEnterRegion,因为我们只监视一个具有特定UID的区域.如果应用程序终止或后台测距停止,则不会再次检测到具有相同UID的下一个信标.

    我建议结合上述方法,

    对所有信标使用相同的UID.

    使用在测距时收集的主要/次要值唯一地标识信标.

    如apple doc中所述,当用户从信标移动到信标时,通过删除和添加信标,始终将监视区域的数量保持在20以下(更好地在服务器中保留信标邻居关系图).

    进入区域时开始测距...并识别主要/次要并计算接近度.

    退出该地区时停止测距.

    从测距方法中找到最近的信标(需要跳过未知范围信标).

    在给定时间内仅监视最近的信标的邻居.

    在实现这两个选项时,我们应该考虑一个事实,即在200英尺距离内检测到iBeacon.200英尺范围内可能有多个信标.

    2022-12-27 10:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有