iOS中的BLE绑定回调函数

4
我正在尝试连接一个自动请求绑定(PIN)的从设备,我的问题是:如何确定绑定是否已发生并且是否成功呢?
我在文档中找不到任何与此相关的回调信息。
先行致谢。
2个回答

3

我们今年早些时候也遇到了一个类似的问题,涉及到连接Android和iOS的硬件。不要把这个当作你问题的答案,而是作为经验分享。

如果你也想支持Android并且与BLE硬件固件开发者有联系,我建议你不要使用BLE绑定方法,因为我们在Android上使用它时遇到了麻烦。 Android设备使用各种不同的蓝牙芯片,并且这些芯片采用不同的绑定方法。 如果你不介意Android,以下是如何至少让其在iOS上工作的方法:

您可以在iOS上读取特性,即使您尚未完成绑定过程。您可以在某个特征上注册通知/指示,并通过蓝牙外设获得通知,以确定绑定是否成功。

如果您没有设置通知或指示特性并且无法控制外设软件,则以下是另一种解决方案,该方案至少可以让您知道绑定过程是否有效: 尝试读取蓝牙外设上的加密特征。在iOS上,如果您没有进行绑定,这应该是不可能的。您还可以尝试写入特征(但如果我记得正确,如果特征没有受保护,则应该能够执行此操作)。

这些是我们今年早些时候所做的经验Yoav,祝你在蓝牙协议上好运。成功之路看起来相当漫长,但最终您会为自己找到方法而感到高兴 :-)


谢谢,我很感激。我无法控制BLE设备代码,也没有绑定事件或加密特性可供编写,因为有人决定自己制定安全协议。我们也有一个Android应用程序,所以我会把你的评论传达给我的团队。我认为我们将放弃绑定。不过,他们没有添加“peripheralDidBond”回调似乎有点奇怪。 - Yoav Schwartz
@Lepidopteron,你在Android绑定方面遇到了什么问题?绑定是由蓝牙堆栈在主机端完成的,而不是由芯片本身完成的。 - Emil

1
根据我的经验,“如何知道它是否绑定”这个问题的答案是:
  • 应该显示在“设置”-〉“蓝牙”-〉“我的设备”下
  • 它应该从调用CBCentralManager.retrievePeripherals返回
  • 您应该能够通过返回的CBPeripheral(通过CentralManager)重新连接,即使设备不再广告/配对模式。
至少这是对我有用的方法。
只有当外围设备在特征上设置了requires-encryption属性时,iOS才会触发与其的绑定,并且您仍然可以从连接到未加密的特征(而没有绑定)中获取来自retrievePeripherals的结果。但是,如果没有绑定,重新连接尝试将失败(除非它继续广告)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接