ios - iOS延长后台时间以进行信标监视

标签 ios swift core-bluetooth

我正在开发一个用于旅行的iOS快速应用程序,该应用程序的概念是在与用户验证行程后,而在旅途中,该应用程序会保持蓝牙信标的范围,我正在使用此lib来执行此https://github.com/AltBeacon/ios-beacon-tools

如我所见,此lib使用CoreBluetooth,并且在后台运行良好。问题在于,由于进行了一次旅行,因此旅行甚至可能持续1到2个小时,而且我需要在此期间扫描信标(例如,每15秒扫描一次),以注册用户选择的路线。

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

我怎样才能做到这一点?我没有iOS方面的经验,所以请帮助我。

最佳答案

您可能想要做什么。 。但这很棘手。

几点:

  • 在后台,您永远无法使用CoreBluetooth检测到AltBeacon或其他制造商广告,因为iOS阻止了制造商广告在后台传递。 (当您使用CoreLocation时,iBeacon广告在后台遵循不同的规则。)
  • 在后台,可以检测到诸如Eddystone之类的服务广告。
  • 通常,您的应用程序在发送到后台后只能运行几秒钟,然后检测将停止。但是,您可以根据要求使用here描述的技术将此时间最多延长180秒。虽然我的博客文章是关于CoreLocation的,但相同的技术也适用于CoreBluetooth。
  • 如上述文章所述,还可以通过执行以下操作将180秒永久延长:
  • 在Info.plist中设置BackgroundModes以包括位置。
  • 除了“蓝牙”权限外,还获得“位置始终”权限。
  • 使用CoreLocation开始主要位置更新。 (您不必使用由此产生的位置结果,但是需要使用它来使应用程序在后台保持 Activity 状态。)
  • 按照上面链接的博客文章中所述启动后台任务。

  • 这将使您的应用永远在后台扫描蓝牙服务信标(例如Eddyatone),但有以下三个问题:
  • 如果要使您的应用获得App Store的批准,则必须说服Apple审阅者,使您的应用为用户提供特定于位置的好处,这对用户来说是显而易见的。
  • iOS将每隔三天向您的用户显示一个可怕的对话框,以警告他们该应用程序在后台使用您的位置,并在 map 上显示该应用程序运行时用户所处的所有位置。该对话框将允许用户禁用后台位置权限,如果用户这样做,则后台信标更新将停止。有关更多信息,请参见我的博客文章here
  • 您的应用程序不断进行蓝牙扫描时,会消耗大量电池。
  • 关于ios - iOS延长后台时间以进行信标监视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59784388/

    相关文章:

    html - 基于 ul 的导航在 iOS Safari/Chrome 中不起作用

    xcode - 命令 ...swiftc 失败,退出代码为 1

    ios - 从一个位置移动到另一个位置后 UIButton 框架发生变化

    iphone - UISearchBar 在退出搜索模式时闪烁

    c# - 在 Xamarin.Forms 中使用带有嵌入图像的图标属性

    ios - 阻止旧版本的 iOS

    swift - 将 "or"逻辑与多个 "if case"语句一起使用

    bluetooth - 你能在 BLE 中提出自己的服务吗?

    objective-c - 核心蓝牙的限制?

    iphone - CoreBluetooth 在其他设备要求配对时触发一种方法?