如何处理互相重叠的iBeacons

时间:2014-03-07 14:09:38

标签: ios iphone ios7 ibeacon

我创建了一个用于检测信标的应用程序。事情进展顺利。我的问题是: 当有更多信标相互重叠时。考虑到这个案子,我怎么想处理这种情况 1.当我们想要在进入信标时从特定信标接收一次报价时/我们在我们有多个信标相互重叠的地方。

谢谢,

2 个答案:

答案 0 :(得分:1)

当您有重叠的iBeacons时,重要的是设计iBeacon标识符(UUID,主要,次要)和用于监控它们的CLBeaconRegions,以便获得所需的结果。

是否要在检测到任何重叠的iBeacons时触发“优惠”?如果是这样,那么监视一个匹配它们的CLBeaconRegion,可能只需设置UUID(如果所有信标都共享该值,则可能是主要的。)在这种情况下,你只能得到一个检测到其中任何一个时的区域输入通知。每个重叠的iBeacon都不会得到一个。

如果你只想在检测到一个重叠的iBeacons时触发“提议”,那么监视只与那个iBeacon匹配的CLBeaconRegion,通常是通过指定UUID,major和minor在那CLBeaconRegion。当然,您还需要确保每个iBeacon配置有不同的辅助。还要记住,如果需要,您可以同时监控多个CLBeaconRegions,并为每个{@ p>获得特定的回调。

虽然它与重叠iBeacons是一个单独的问题,但如果你真的希望用户“只收到一次”,你还需要在检测回调中添加一个过滤器。 iOS中的故障有时会为您提供一个非常快速的退出区域回调,然后是几乎即时进入的区域回调。为了防止用户第二次获得优惠,请将优惠最后一次推送给用户的时间戳存储起来,如果已经过了足够的时间(例如1小时或一天),则只能再次推送。{{ 3}}

答案 1 :(得分:0)

我目前的工作流程是在didRangeBeacons方法中检测最接近我实际位置的信标。这是通过比较每个信标的rssi属性来完成的。

在识别出最近的Beacon之后,我处理该信标的所需动作。

为了避免重复触发此操作(因为每秒触发didRangeBeacons方法几次),我在实际的beaconHandler中实现了一个isLocked Flag(BOOL),用于处理。

所以我只对距离我最近的灯塔作出反应。我只做了一次反应。我还跟踪我最后确定的最近的灯塔。这使我能够立即做出反应,如果你正在进入另一个灯塔的范围。所以例如当你沿着商店走路时,每个灯塔都会被立即触发,但不会重复。