无法使用 CoreBluetooth 显示配对对话框

Posted

技术标签:

【中文标题】无法使用 CoreBluetooth 显示配对对话框【英文标题】:Unable to show the pairing dialog using CoreBluetooth 【发布时间】:2017-04-24 12:07:41 【问题描述】:

您好,我正在使用 Apple Sample BLTE 应用程序来显示配对对话框。(iPhone 到 iPhone)

这是我创建特征的代码

self.transferCharacteristic = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:TRANSFER_CHARACTERISTIC_UUID]
                                                                  properties: CBCharacteristicPropertyRead| CBCharacteristicPropertyNotifyEncryptionRequired
                                                                       value:nil
                                                                 permissions:CBAttributePermissionsReadable];

以上代码取自 Apple 的一篇文章link

这是我在通知并尝试读取特征时的代码

if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:TRANSFER_CHARACTERISTIC_UUID]]) 
        [peripheral setNotifyValue:YES forCharacteristic:characteristic];

        [peripheral readValueForCharacteristic:characteristic];
    

我的问题是,当我尝试此代码时,我没有看到配对对话框,而是在 didUpdateValueForCharacteristic 中收到此错误

2017-04-24 17:24:58.636 BTLE Transfer[1351:457263] Error discovering characteristics: Authentication is insufficient.

这基本上意味着我需要配对才能阅读,但框架没有显示配对对话框。

我在这里做错了什么?请帮忙。

编辑: 我更新了我的特征如下:

self.transferCharacteristic = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:TRANSFER_CHARACTERISTIC_UUID]
                                                                  properties: CBCharacteristicPropertyRead| CBCharacteristicPropertyNotifyEncryptionRequired
                                                                       value:nil
                                                                 permissions:CBAttributePermissionsReadEncryptionRequired];

【问题讨论】:

添加CBAttributePermissionsReadEncryptionRequired到权限? 我现在在更改权限后收到此错误Error discovering characteristics: Reading is not permitted.。仍然没有配对对话框。而且它现在似乎没有击中我的didReceiveReadRequest 代表 【参考方案1】:

配对对话框没有出现的真正问题是因为我在两部 iPhone 上都有相同的 iCloud 帐户。当我从一台设备上删除帐户时,出现了配对对话框。

这个答案帮助我弄清楚link

【讨论】:

【参考方案2】:

如果您使用的是低功耗蓝牙(未加密),则没有配对对话框... 您必须自己实现配对。

您可以订阅特征/获取通知并读取或写入,仅此而已。您必须从 CBPeripheralManagerDelegate 实现相应的方法。设置您的 peripheralManager 的委托,将调用方法。

见https://developer.apple.com/reference/corebluetooth/cbperipheralmanagerdelegate?language=objc

【讨论】:

我正在使用上面代码中提到的加密。根据 Apple 文档,核心蓝牙框架应该在读/写失败时处理配对,但在我的情况下并没有发生。这就是问题

以上是关于无法使用 CoreBluetooth 显示配对对话框的主要内容,如果未能解决你的问题,请参考以下文章

如何完全关闭蓝牙配对请求对话框?

屏幕固定模式下未显示蓝牙配对对话框

CoreBluetooth 框架能否与从属蓝牙 2.0 串行模块配对并通信?

未使用 CoreBluetooth (iPhone 6) 接收外围设备发现回调

如何完全解除蓝牙配对请求对话框?

使用不安全的 RFCOMM 蓝牙套接字时,android 何时显示配对对话框?