我们有一个 BLE 外设,每小时连接到手机并传递一些数据。该过程的工作原理如下:
使用密钥启动后UIApplicationLaunchOptionsBluetoothCentralsKey
in
-
application(didFinishLaunchingWithOptions launchOptions)
应用程序使用传递给它的 ID 重新初始化 CBCentralManager。
- 然后它会执行常规恢复周期并从 BLE 外设读取数据。
- 向云中的服务执行 REST 请求。
假设应用程序在手机重启后至少启动一次,几天内一切正常(如果应用程序没有运行或被迫内存不足,iOS 会正确地再次启动它,假设用户没有手动强制关闭)。
然而,每隔几天,当有来自 BLE 设备的传入请求时,iOS 就会停止唤醒应用程序。如果用户重新启动应用程序,一切都会正常运行几天,然后再次停止。鉴于我们产品的性质,让我们的应用程序/外围设备以最可靠的方式协同工作至关重要。
关于为什么会发生这种情况的理论:
(经过仔细检查,他们都被解雇了)
用户重新启动手机并忘记重新启动应用程序。
我们添加了正常运行时间的记录,它显示手机在应用程序启动之间没有重新启动。
内存警告导致应用程序被启动。
再次添加日志记录,他们表明没有applicationDidReceiveMemoryWarning
连接不良会导致应用程序在上传结果时运行时间超过 10 秒,iOS 会终止它并感到不安
我们人为地将服务器响应延迟了 15 秒来测试这一点,并且在测试过程中一切都继续正常工作。
关于正在发生的事情以及为什么 iOS 停止通知应用程序有关传入 BLE 连接的任何想法?
问题之一是我们无法弄清楚如何可靠地重现该问题,因此任何建议也将不胜感激!
谢谢你!
更新1:这是我们初始化的方式CBCentralManager
:
self.centralManager = CBCentralManager(delegate: self, queue: nil, options: [
CBCentralManagerOptionRestoreIdentifierKey : MyCentralManagerID,
CBCentralManagerOptionShowPowerAlertKey : 0])
我看到一些建议,队列参数不应为零。鉴于我无法可靠地重现问题,我会犹豫是否要进行更改,直到我可以自信地观察其效果。