iBeacon案例 - 触发带有距离约束的didEnterRegion

时间:2014-09-06 07:15:55

标签: ios bluetooth core-location ibeacon

对于特定的商业案例,我想通过利用iBeacon技术触发基于邻近度的通知(推送或UILocalNotification)。 这是为了在应用程序处于后台/锁屏时工作。

我有一些特定的限制:

  • 产品必须在一定程度上扩展,因此不可能在20个区域范围内扩展。我们将只使用一个UUID(如果我们开发新的功能集,可能只有2或3个,但我们不会为每个物理信标注册一个区域)

  • 我们将使用major和minor来调用webservices

  • 对此,我知道我将不得不使用以下方法:首先是didEnterRegion:没有关于major / minor / distance的先验信息,然后是didRangeBeacon:执行更高级的操作。 考虑到信标的快速波束率,我已经使用本地存储机制来超时信标。

    *主要限制因素:我们必须区分有关信标距离的事件(例如,如果CLProximityImmediate只触发通知)

现在我看到一个主要的限制。因为我的应用程序在进入某个区域后只会在背景中显示几秒钟,如果我有基于距离/距离的约束,则应用程序很可能会:

  • 在用户与物理信标足够接近之前返回到后台状态以触发事件
  • 再也不会被触发,因为它必须再次进入该区域,这可能不会发生

对于这种情况,您有什么想法/解决方法吗?

1 个答案:

答案 0 :(得分:3)

对于此用例中适用的限制CoreLocation,您完全正确。如果您按照描述进行设置,典型的行为将是应用程序将在未知距离(通常最大范围约为50米)的背景中检测到信标,在背景中的范围约为5秒,然后应用程序将被iOS暂停。这五秒的测距时间通常不足以让用户靠近信标触发您的用例。

不幸的是,标准信标没有简单的解决方法,CoreLocation. CLBeaconRegion个对象没有CLCircularRegion对地理围栏这样的距离字段。

您可以尝试两种极端方法:

  1. 一旦检测到设备太远,请立即关闭对您所在地区的监控,然后在应用程序暂停在applicationWillResignActive:回调中时重新启用它。您可能会获得新的参赛活动和更多背景测距时间。

  2. 使用非标准信标,定期停止传输以触发强制退出/进入事件。