ios - IBeacon 后台监控
问题描述
我正在构建一个核心功能需要信标监控的应用程序。确切地说,我需要将具有特定 UUID 的每个信标的有效负载(最小范围)值添加到核心数据列表中(如果我可以设置信标需要保持到达的某个时间阈值,那就更好了在它被添加到列表之前)。我一直在寻找解决方案,但这有点混乱,我无法确定我需要的是否可行。我找到了这篇文章,根据它我可以在后台触发事件,或者使用后台模式。我的问题是这是否仍然正确,如果有人有关于使用背景模型与 IBeacon 结合的资源。
来自德国的问候!
解决方案
Apple 限制了 iOS 应用程序可以在后台“范围”信标的持续时间。截至 2020 年 4 月,情况确实如此,过去 5-6 年的情况基本没有变化。
一些澄清:
信标监控在后台不受限制,前提是用户向应用授予“始终定位”权限。但是信标监控只为您提供“进入”和“退出”事件。 当您正在寻找的任何信标首次出现时,它会为您提供一个进入事件,并在您正在寻找的最后一个信标消失时为您提供退出事件。监控不会告诉您有关单个信标的估计距离或信号强度的任何信息。
信标测距可让您通过所有可见信标的列表、每个信标的信号强度和距离估计值每秒获得更新。 如果距离估计低于某个阈值,您可以轻松编写逻辑以写入数据库。
信标范围在 iOS 的后台受到限制。首先,用户必须授予对您应用的“始终定位”访问权限。即便如此,在您的应用程序进入后台后,您也被限制在大约 5-10 秒的范围内,或者信标在它进入后台后首先出现。
您可以将 (3) 中提到的 5-10 秒延长到 180 秒,只需按照我的博文在此处运行后台任务即可。
如果您在 Info.plist 中声明“位置”后台模式,使用 (4) 中所述的后台任务,并使用 CoreLocation 请求位置更新(只有 3km 分辨率的粗略位置更新),则可以进一步无限延长 180 秒为此目的可以正常工作,并通过关闭 GPS 来节省电池。)
(5) 的一个问题是,如果您计划将其提交到 App Store,并且您没有为在后台使用位置提供明显的面向用户的好处,它可能会导致您的应用被拒绝。如果您确实有充分的理由,或者您打算在 App Store 之外分发应用程序(例如企业应用程序),那么这将正常工作。
(5) 的第二个问题是,一直测距会导致大量电池消耗。您可能需要编写额外的逻辑以在不需要时停止这种恒定的背景范围以节省电池。
这无疑是令人困惑和复杂的。但最重要的是,有办法无限期地确定信标的范围,以满足许多用例。你只需要跳过一些障碍来实现它。
推荐阅读
- python - ValueError: int() 以 10 为底的无效文字:'pippi'
- javascript - 如何格式化子字符串以使用 javascript 链接类似 Twitter 的链接?
- r - 使用 for 循环按列名绘制图形
- gradient-descent - 成本函数的导数如何给出成本下降最快的方向?
- matplotlib - pyplot:在文本框环境中制作图例
- r - 在 r 中使用公式时如何从“htest”对象中提取数据集
- angular - 使用 SCSS 和 angular 的背景 url 问题
- ios - 使用 swift 将嵌套数据上传到 firebase
- javascript - 如何使用 vuetify 减少 vue js 构建大小?
- go - 迭代golang无缓冲通道时输出混乱