我到处寻找答案,但尚未找到明确的答案......请帮忙......
我创建了一个连接并绑定到需要引脚的BLE设备的应用程序。在触发iOS蓝牙绑定对话框之前,将以实用方式创建并显示给用户。到现在为止还挺好。如果用户正确地将引脚输入绑定对话框,则手机和BLE设备现已绑定,每个人都很高兴。
现在用户关闭应用并终止蓝牙连接。
当应用程序再次启动并且发现BLE设备时,有没有办法知道绑定已经发生?基本上,如果设备已经绑定,我不想向用户重新显示引脚。
我目前正在保存BLE设备的标识符并调用RetrievePeripheralsWithIdentifiers以查看设备之前是否已连接。这是有效的,但如果用户进入蓝牙列表并选择“忘记此设备”,则RetrievePeripheralsWithIdentifiers仍会返回其他外设。我尝试重新启动手机,卸载并重新安装应用程序。似乎没有什么能让iOS忘记在过去的某个时刻,该标识符已经连接......
帮助!
答案 0 :(得分:1)
我在我的应用中遇到了类似的问题,如果用户从设置中选择“忘记此设备”,那么我的应用就不会知道。
您可以使用retrieveConnectedPeripherals(withServices: [CBUUID])
检查您的设备是否已连接到操作系统。如果是,则继续执行其他功能,否则再次显示PIN(或任何您想要的)。
retrievePeripherals(withIdentifiers:)
将返回该设备。
我在我的应用中这样做。希望这会有所帮助。
答案 1 :(得分:1)
iOS没有用于配对或绑定的API。 iOS将仅在其他设备请求时或在读取需要安全性的特征时提示配对对话框。您的应用甚至不会知道配对对话框正在显示,配对完成时,还是当/当前链接已加密时。
如果设备已经绑定并且可以使用iOS在之前的配对过程中存储的LTK(从属设备也有),则链接将自动加密,因此不会显示新的配对对话框。 / p>
以前连接的设备列表与绑定设备无关。它只是以前已知设备的列表。
答案 2 :(得分:0)
我认为你正在混淆概念。绑定本质上意味着"具有相同的长期密钥"。
因此,如果您有两台设备,并且希望它们打开加密连接,则两台设备只需检查它们是否具有与相应设备关联的密钥,并尝试使用此密钥加密消息。
这就是设备无法真正检查绑定是否仍然存在的原因。每个设备都可以检查自己的密钥是否仍然存在,但是如何知道其他设备是否还有密钥呢?一方忘记密钥,债券就会丢失。
我对iOS没有太多经验,但我认为它们应该是一个功能,可以让存储的长期密钥检查是否存在与蓝牙地址相关联的LTK。或者,它应该是可能的 使用外部存储,以便代替堆栈为您执行此操作,您可以定义存储所有密钥的文件,并在需要时为堆栈提供密钥。 (至少,这适用于其他实现。)在这种情况下,您可以直接查看文件以检查设备是否已被绑定。
请注意,输入引脚对应于"配对"的过程。该过程的成功传导和随后的连接加密并不能证明这些设备是粘合的。断开连接后,配对信息丢失,设备需要再次配对 - 除非您已经存储了密钥,这使得该对成为一个保证金。