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

我一直在使用iBeacons的原型iOS应用程序,根据办公室的位置向办公室员工提供位置相关信息.理想的用例是,每当员工进出办公室时,都会触发一个回调,以一种通知的形式向他们提供一些信息(它可能使服务器查询首先获取信息等等).我们还希望能够在应用程序背景或终止时执行此操作;幸运的是,我们已经知道,即使应用程序是背景或暂停的,信标区域边界也会触发相应的CoreLocation回调.

从周围看,我明白,我有两个方法来处理信标区域监控:

>给每个iBeacon自己的CLBeacon区域,并独立监控每个这些地区.
>监视对应于多个iBeacons的CLBeaconRegions,例如,每个iBeacon具有相同的UUID,并且仅对与该UUID相对应的CLBeaconRegion进行监视,然后尝试确定哪个信标通过测距触发了边界.

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

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

>苹果在应用程序处于背景状态时不鼓励使用,因为结果可能不准确.
>测距功能每秒钟都会触发一次,而我只想要进入/退出回调.
>如果信标具有区域重叠,则测距呼叫可能不断地翻转哪一个是“最接近”的,这将使事情进一步复杂化.

基本上,我想知道是否有一种方法来利用选项#2,但仍然具有选项1的好处 – 一种快速和容易的方法,可以立即确定哪个信标触发区域只有一个进入或退出回调?

我希望这个问题足够清楚.在我自己的头脑里,并不是完全清楚,特别是范围如何工作.

解决方法

选项#2绝对更复杂,但是您必须接受这些并发症才能达到20个区域的监控极限.

几点:

>在后台,你只有约5秒的测距时间,这并没有给你太多的时间来平均每个信标的RSSI(信号强度)来获得很好的距离估计.所以,是的,估计不太准确.如果你明白这个限制,并且可以根据你的用例生活,那么在背景中没有什么问题.>是的,您可以在区域输入后每个信标灯获得多个测距呼叫,并且您不会在区域退出时得到任何回调.你必须编写额外的代码来照顾这个.我已经通过维护所有独特的信标(同样的uuid / major / minor)的NSMutableArray,并在更改回调中进行更新.然后,您可以在区域退出回调中访问此数组,以便您知道哪些信标消失了.当然,在5秒的背景测试时间到期后,可能会看到额外的信标,但是你的应用程序将永远不会知道它们.使用此选项,您必须接受此限制.>尽管测距中的距离估计误差可能会错误地告诉您哪个信标最接近,但是在进行监控时,您会遇到更糟糕的问题,因为您根本无法估计距离.如果多个信标在同一时间进入监控范围,则不能保证您获得的第一个输入区域回调将是最接近的信标.因此,如果您的用例需要根据最近的信标采取行动,那么您必须进行测距(知道距离估计可能会有错误).

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...