保持iOS BLE应用程序在后台运行的最佳实践方法

时间:2017-04-11 20:22:39

标签: ios bluetooth background bluetooth-lowenergy

我有一个连接到蓝牙外设的iOS应用程序(将其视为连接按钮)。外围设备位于固定位置,因此并不总是在iOS设备的范围内。我的应用程序是作为后台任务运行的,外围设备会定期通知我的应用程序按下按钮。

我发现由于(我相信)内存压力,iOS有时会杀死我的应用程序。我认为BLE状态保存和恢复会对我有所帮助:

https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html

...每当恢复与外围设备的蓝牙连接并按下外围设备上的按钮时,重新启动已杀死的应用程序。但是,这篇文章:

BLE background reconnect

......(安东的评论)似乎暗示状态恢复有点不稳定,在BT关闭/开启后或飞机模式等之后无法恢复状态。

这仍然是BLE状态恢复的情况。我是否在浪费时间试图让它发挥作用?如果它确实有效,那么在任何地方都有任何好的示例实现吗?

如果我不能使用状态恢复,还有其他选择吗?

  • 保持我的应用足迹小,以免被iOS杀死?
  • 将某种保持活动的通信添加到使应用程序保持活动状态的远程服务器上?
  • 向我的应用添加消息或VOIP等功能(我知道通过应用商店批准需要合法)。是否允许重新启动应用程序并通过BLE外设重新建立连接,或者唤醒是否仅允许VOIP特定的API调用?
  • 还有别的吗?

显然,上面的列表不太适合让BLE状态恢复为我做的工作。任何建议都非常感谢。

1 个答案:

答案 0 :(得分:0)

我前一段时间写了一篇评论,您可能也想阅读:Does CBCentralManager connect ever time out?

无论如何,保持你的应用程序足迹可能会使你的应用程序在早期被杀死的可能性降低,但最终无论如何都会发生。 如果您确实有合理的理由使用它,VOIP可能是一个很好的解决方案。您可能想要阅读VOIP推送消息。 订阅重要的位置更改也非常有用,但仅适用于移动很多的用户。如果您的用户使用带有“固定”iPad的BLE,那么它将无济于事。 正如我之前提到的,你可以让它工作起来“好”(取决于你的用例),但100%是不可能的。此外,Apple Watch的bug有点不幸。由于我现在配对了一块表,我基本上放弃了Core Bluetooth供我自己使用。

我曾经与一些Apple蓝牙工程师保持联系,他们或多或少地证实他们已经意识到这些问题。为什么他们不会修复它我不知道,但很明显,确保第三方外围设备运行良好并不是他们的首要任务。对于他们自己的产品(手表,EarPods等)来说,他们没有相同的限制。