【问题标题】:iBeacon case - trigger didEnterRegion with distance constraintsiBeacon 案例 - 使用距离约束触发 didEnterRegion
【发布时间】:2014-10-31 02:44:28
【问题描述】:

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

我有一些特定的限制:

  • 产品必须在一定水平上进行扩展,因此无法覆盖 20 个区域。我们将仅使用一个 UUID(如果我们开发一组新功能,可能是 2 或 3 个,但我们不会为每个物理信标注册一个区域)

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

  • 关于这一点,我知道我将不得不使用以下方法:首先 didEnterRegion:没有关于主要/次要/距离的先验信息,然后是 didRangeBeacon:执行更高级的操作。 考虑到信标的快速传输速率,我已经使用本地存储机制来超时使用信标。

    * 主要限制:我们必须根据信标的距离对事件进行区域划分(例如,仅在 CLProximityImmediate 时触发通知)

现在我看到了一个主要限制。由于我的应用在进入某个区域后只会在后台运行几秒钟,如果我有基于距离/接近度的限制,那么该应用很可能会:

  • 在用户离物理信标足够近以触发事件之前返回后台状态
  • 永远不会再次触发,因为它必须再次进入区域范围,这可能不会发生

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

【问题讨论】:

    标签: ios bluetooth core-location ibeacon


    【解决方案1】:

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

    不幸的是,标准信标没有简单的解决方法,CoreLocation. CLBeaconRegion 对象没有像 CLCircularRegion 那样用于地理围栏的距离场。

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

    1. 一旦检测到设备距离太远,立即关闭对某个区域的监控,然后在您的应用程序在applicationWillResignActive: 回调中挂起时重新启用它。你可能会得到一个新的进入事件和更多的背景测距时间。

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

    【讨论】:

    • 感谢您确认我的观点。我将探索第一个看起来很有趣的选项!
    猜你喜欢
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多