【发布时间】:2016-09-26 09:29:56
【问题描述】:
我们有一个 BLE 外围设备,每小时连接到手机并传递一些数据。以下是该过程的工作原理:
在使用密钥UIApplicationLaunchOptionsBluetoothCentralsKey 启动时
-
application(didFinishLaunchingWithOptions launchOptions)app 使用传递给它的 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])
我看到一些建议队列参数不应该为零。鉴于我无法可靠地重现问题,因此在我能够自信地观察其影响之前,我会犹豫是否要进行更改。
【问题讨论】:
标签: ios iphone bluetooth-lowenergy cbcentralmanager