我正在使用@capacitor-community/bluetooth-le将我的Ionic 6应用程序连接到特定BLE设备。在Android中,一切正常。在iOS中,第一次连接到BLE成功,但下次(配对后)尝试连接时出现以下错误:加密连接失败,连接意外超时。
我已经尝试了很多不同的方法:扫描后连接。扫描时连接。但没有任何工作。奇怪的是在第一次一切正常(配对后)。
有人帮忙吗?
我正在使用@capacitor-community/bluetooth-le将我的Ionic 6应用程序连接到特定BLE设备。在Android中,一切正常。在iOS中,第一次连接到BLE成功,但下次(配对后)尝试连接时出现以下错误:加密连接失败,连接意外超时。
我已经尝试了很多不同的方法:扫描后连接。扫描时连接。但没有任何工作。奇怪的是在第一次一切正常(配对后)。
有人帮忙吗?
2条答案
按热度按时间7kqas0il1#
不幸的是,这是iOS中的一个已知问题。我认为正在发生的是,由于您已经在操作系统级别与设备配对/绑定,因此当远程BLE设备可被发现时,连接将在操作系统级别重新建立。当您尝试从应用重新连接到远程设备时,已在操作系统级别建立连接,这是在应用程序级别失败的原因。或者,可能是绑定过程中存储的密钥导致重新绑定/配对过程发生冲突。您可以通过执行以下操作确认此问题:-
1.进入iOS设置,蓝牙,然后取消配对设备(如果存在)。
1.尝试从iOS应用程序重新连接到设备。
1.断开设备与iOS应用的连接(这次不要取消与蓝牙设置的配对)。
1.尝试从您的Android应用(或您可以在iOS设备之外使用的任何其他设备)连接到远程设备。如果连接不成功,则意味着iOS设备仍连接到远程设备。
1.如果从Android设备连接成功,请尝试断开连接,然后从iOS设备重新连接,如果连接成功,您将知道问题是与OS级别的连接,如果连接不成功,您将知道问题是与存储的绑定/配对密钥冲突。
至于解决方案,我不认为有一个简单和直接的不幸。下面是一个建议的解决方案,我发现在过去有用(您可能需要修改您的离子应用程序):-
在某些情况下,如HID设备,绑定外设后,iOS会在看到外设广告时自动连接到该外设。此行为独立于任何应用发生,外设可以连接到iOS设备,但不能连接到最初建立绑定的应用。如果绑定的外设与iOS设备断开连接,然后在iOS级别重新连接,应用将需要检索外围设备对象(retrieveConnectedPeripherals(with[Services/Identifiers]:)),并通过CBCentralManager再次显式连接以建立应用级别的连接。要使用此方法检索你的设备,你必须从以前返回的CBPeripheral对象中指定Apple分配的设备标识符,或指定它包含的至少一个服务。
iOS不允许开发者应用该高速缓存中清除外围设备的绑定状态。若要清除绑定,用户必须转至iOS设置的蓝牙部分并明确“忽略”外围设备。如果此信息会影响用户体验,则将其包含在应用的UI中可能会有所帮助,因为大多数用户并不知道这一点。
您可以在下面的链接中找到更多信息:-
cld4siwp2#
在我的情况下,iPhone与外设配对后,再也没有连接过。奇怪的是,在我的iPhone 6 s与iOS 15. 5中,一切都很好。
该pugin有这个代码(有可能有些是错误的?)
https://github.com/capacitor-community/bluetooth-le/blob/main/ios/Plugin/Plugin.swift
我已经尝试了其他插件,结果是相同的。