iOS 延长信标监控的后台时间

Posted

技术标签:

【中文标题】iOS 延长信标监控的后台时间【英文标题】:iOS Extending background time for beacon monitoring 【发布时间】:2020-01-17 09:21:47 【问题描述】:

我正在开发一个 ios swift 应用程序用于旅行,该应用程序的概念是在与用户验证旅行之后,而在旅行中,该应用程序一直在寻找蓝牙信标,我正在使用这个库来做到这一点@ 987654321@

我看到这个库使用 CoreBluetooth,它在后台运行良好。问题是,由于进行了一次旅行,旅行甚至可以持续 1 到 2 个小时,而我需要在此期间扫描信标(例如每 15 秒一次)以记录用户所走的路线。

现在,每当我使用我的应用程序进入后台时,我只有 30 秒的信标范围,然后 iOS 会终止我的应用程序(可能是因为我没有我在论坛上看到的过期处理程序)但仍然我需要让信标的范围无限期地持续,从 10 分钟到 2 小时不等。

我怎样才能做到这一点?我在 iOS 方面不是那么有经验,所以请帮助我。

【问题讨论】:

也许这对你有用***.com/a/48198826/7512091,请看一下后台执行developer.apple.com/documentation/uikit/app_and_environment/… 问题是 当 iOS 认为这是一个好时机时会调用这个方法所以我不能不断地对信标进行测距,因为这是一项必要的任务并且需要发生。 你可以在这里使用位置管理器,位置管理器会在大约500米位移后打开你的应用程序,然后你可以继续做任何你想做的事情,应用程序会一直在后台运行。 @ShahzaibQureshi 你有任何可以帮助我的代码示例吗?并感谢您的回答 iOS 中没有选项可以让您的服务始终在后台运行。 【参考方案1】:

你想做的都是可能的。。但这很棘手。

几点:

    在后台,您永远无法使用 CoreBluetooth 检测 AltBeacon 或其他制造商广告,因为 iOS 会阻止制造商广告在后台投放。 (当您使用 CoreLocation 时,iBeacon 广告在后台遵循不同的规则。)

    在后台可以检测到像 Eddystone 这样的服务广告。

    一般情况下,您的应用程序在发送到后台后只能运行几秒钟,然后检测将停止。但是,您可以根据要求使用here 描述的技术将此时间最多延长 180 秒。虽然我的博文是关于 CoreLocation 的,但同样的技术也适用于 CoreBluetooth。

    正如上面文章提到的,也可以通过执行以下操作将 180 秒延长到永远:

    在 Info.plist 中设置 BackgroundModes 以包含位置。 除蓝牙权限外,始终获取位置权限。 使用 CoreLocation 启动主要位置更新。 (您不必使用由此产生的位置结果,但需要它来使应用程序在后台保持活动状态。) 按照上面链接的博客文章中的说明启动后台任务。

这将使您的应用程序永远在后台扫描 Eddyatone 等蓝牙服务信标,但存在三个问题:

    如果您想让您的应用在 App Store 中获得批准,您必须让 Apple 审核人员相信您的应用为用户提供了对用户来说显而易见的特定位置优势。 iOS 将每 3 天左右向您的用户显示一个可怕的对话框,警告他们该应用程序正在后台使用您的位置,并显示一张地图,其中包含用户在应用程序运行时所在的所有位置。该对话框将允许用户禁用后台位置权限,如果用户这样做,后台信标更新将停止。有关详细信息,请参阅我的博文 here。 当您的应用持续进行蓝牙扫描时,会消耗大量电池电量。

【讨论】:

感谢您的关注,是的,我会尝试这样做。向苹果证明,我们已经指望这一点,对我们来说,问题实际上是技术部分,以及如何做到这一点。但有了你的解释,我想我可以做到,再次感谢。

以上是关于iOS 延长信标监控的后台时间的主要内容,如果未能解决你的问题,请参考以下文章

iOS:从后台(信标)开始监控时,GPS 位置更新仅工作 10 秒

在后台监控期间接收来自信标区域检测的通知

在后台或应用未运行时监控 Bluecats 信标

iOS 上的后台信标测距

后台 iBeacon 监控

在iOS中测距和监控时如何获取信标的MAC地址