问题描述
总而言之,我有一个设备通过 ble 与我的应用程序进行通信。该应用程序使用 Corebluetooth 来处理连接和通信。
问题:
当设备超出范围时,它将断开连接 -> 它调用 diddisconnect() 函数,在那里我检查它是否超时并再次调用 central.connect。
然后它会开始连接,并立即在某些设备(仅限 iOS14)上,它会转到 didfailtoconnect 并显示错误消息:
"Error Domain=CBErrorDomain Code=15 "连接加密失败,连接意外超时。" UserInfo={NSLocalizedDescription=连接加密失败,连接意外超时。"
据我所知,似乎只存在于 iOS14 设备上。
我还测试了阻塞信号,如果我阻塞了来自设备的信号,则问题并不明显。如果我阻止来自电话的信号,问题就很明显了。不确定这是怎么回事,感觉它们都触发了超时。
其他地方也可能有问题,但在我的 iOS13 设备上似乎处理得很好。(主要在 4 部手机上测试,每个版本 2 部)
还要澄清一下,应用程序充当中心,设备充当外围设备。
解决方法
如果我从 CBErrorEncryptionTimedOut (15) 中正确解释了错误消息,这意味着设备发起了连接,然后,突然在 iOS 设备发起加密程序后,连接意外终止。
因此应该或多或少地与 CBErrorConnectionTimeout (6) 相同。
如果这种情况一直发生,您应该使用 BLE 嗅探器来查看发生了什么;也许是 iOS 中的一些错误。