IBeacon后台监控

IBeacon background monitoring

我正在构建一个核心功能需要信标监控的应用程序。确切地说,我需要将具有特定 UUID 的每个信标的有效负载(最小范围)值添加到核心数据列表中(如果我可以设置信标需要保持在一定范围内的特定时间阈值,那就更好了在它被添加到列表之前)。我一直在寻找解决方案,但版本有点混乱,我无法真正判断我需要的是否可行。我找到了这个 article,根据它我可以在后台触发一个事件,或者使用后台模式。我的问题是这是否仍然是真的,如果是的话,是否有人有关于结合使用背景模型和 IBeacon 的资源。

来自德国的问候!

Apple 限制 iOS 应用可以在后台 "range" 信标的持续时间。截至 2020 年 4 月都是如此,过去 5-6 年的情况基本没有变化。

几点说明:

  1. Beacon 监控 在后台不受限制,前提是用户向应用程序授予 "location always" 权限。但是 beacon 监控只给你 "entry" 和 "exit" 事件。 当你正在寻找的任何 beacon 第一次出现时它给你一个进入事件,当你正在寻找的任何信标第一次出现时给你一个退出事件您正在寻找的最后一个信标消失了。监控不会告诉您有关单个信标的估计距离或信号强度的任何信息。

  2. Beacon 测距让您可以每秒更新一次所有可见信标的列表、每个信标的信号强度和距离估计值。您可以轻松地编写逻辑程序如果距离估计低于特定阈值,则写入数据库。

  3. Beacon iOS 在后台 测距受到限制。首先,用户必须授予 "location always" 对您应用的访问权限。即便如此,在您的应用进入后台后,或者信标在进入后台后首次出现时,您的测距范围也被限制在 5-10 秒内。

  4. 您可以将 (3) 中提到的 5-10 秒延长到 180 秒,只需 运行 每个 my blog post here 一个后台任务即可。

  5. 如果您在 Info.plist 中声明 "location" 后台模式,您可以进一步延长 180 秒 无限期 ,使用后台任务如 (4) 中所述,并且您使用 CoreLocation 请求位置更新(只有 3 公里分辨率的粗略位置更新可以很好地用于此目的,并通过关闭 GPS 来节省电池。)

  6. (5) 的一个问题是,如果您打算将应用提交到 App Store 并且您没有提供明显的面向用户的好处来使用位置信息,它可能会导致您的应用被拒绝的背景。如果您确实有充分的理由,或者您打算在 App Store 之外分发该应用程序(例如公司企业应用程序),那么这会很好。

  7. (5) 的第二个问题是一直测距会导致大量电池消耗。您可能需要编写额外的逻辑程序,以便在不需要时停止这种恒定的背景测距,以节省电池电量。

这无疑是令人困惑和复杂的。但最重要的是,有多种方法可以无限期地确定信标的范围,以满足许多用例。你只需要跳过一些障碍就可以实现。