Ios iBeacon区域监控和接近>;20个信标?
我一直在开发一个iOS原型应用程序,利用iBeacons向办公室员工提供位置相关信息,具体取决于他们在办公室的位置。理想的使用案例是,每当员工进出办公室时,都会触发回调,以通知的形式向他们提供一些信息(可能会进行服务器查询以首先获取信息,诸如此类)。我们也希望能够做到这一点时,应用程序是后台或终止;幸运的是,我们已经知道,信标区域边界交叉会触发适当的CoreLocation回调,即使应用程序是后台或挂起的 环顾四周,我大致了解到,对于如何进行信标区域监控,我有两种选择:Ios iBeacon区域监控和接近>;20个信标?,ios,ibeacon,Ios,Ibeacon,我一直在开发一个iOS原型应用程序,利用iBeacons向办公室员工提供位置相关信息,具体取决于他们在办公室的位置。理想的使用案例是,每当员工进出办公室时,都会触发回调,以通知的形式向他们提供一些信息(可能会进行服务器查询以首先获取信息,诸如此类)。我们也希望能够做到这一点时,应用程序是后台或终止;幸运的是,我们已经知道,信标区域边界交叉会触发适当的CoreLocation回调,即使应用程序是后台或挂起的 环顾四周,我大致了解到,对于如何进行信标区域监控,我有两种选择: 为每个iBeacon指定
- 苹果不鼓励在应用程序处于后台时进行测距,因为结果可能不那么准确
- 测距呼叫每秒触发一次,而我只希望有“进入/退出”回调
- 如果信标有区域重叠,测距呼叫可能会不断翻转哪一个是“最近的”,这将使事情进一步复杂化
我希望这个问题足够清楚。我自己并不完全清楚,尤其是测距是如何工作的。如果你对每个信标使用相同的UUID,你只需设置主要/次要数字来区分不同的信标。这样,您只监视1个信标,而不是>20个。然后从其他标识符中找出其中一个。这就是它目前与星巴克和其他零售商应用程序的合作方式。1无论您身处世界何处,都可以使用不同的标识符在后端进行分类。选项2绝对更复杂,但您必须接受这些复杂因素,才能绕过20个区域的监控限制 有几点:
- 在背景中,您只有大约5秒的测距时间,这并没有给您足够的时间来平均每个信标的RSSI(信号强度)以获得良好的距离估计。因此,是的,估计的准确性会降低。如果您理解这个限制,并且能够在您的用例中接受它,那么在后台进行测距没有什么错
- 是的,在进入区域后,每个信标将收到多个测距呼叫,并且在区域退出时不会收到任何回调。您必须编写额外的代码来处理此问题。为此,我维护了一个NSMutableArray,其中包含所有在测距回调中看到的唯一信标(相同的uuid/major/minor),并对其进行了更新。然后可以在区域退出回调中访问此数组,以便知道哪些信标消失了。当然,有可能在5秒的背景测距时间到期后看到其他信标,但你的应用程序永远不会知道它们。使用此选项,您必须接受此限制
- 虽然测距中的距离估计错误可能会错误地告诉您哪个信标最近,但在进行监视时,您会遇到更严重的问题,因为您根本无法获得距离估计。如果多个信标同时进入监控范围,则无法保证您得到的第一个输入区域回调将针对最近的信标。因此,如果您的用例需要根据最近的信标采取行动,那么您必须进行测距(知道距离估计可能有错误)
- 对所有信标使用相同的UID
- 信标使用测距时收集的主/次值进行唯一标识
- 正如apple doc中提到的,当用户从一个信标移动到另一个信标时,通过移除和添加信标,始终将监控区域的数量保持在20以下(最好在服务器中保留信标-邻居关系图)
- 进入区域时开始测距。。。识别主要/次要,并计算接近度
- 退出区域时停止测距
- 从测距方法中查找最近的信标(需要跳过未知距离信标)
- 在给定时间内仅监视最近信标的邻居