核心蓝牙:无法让iPhone(中央)和Mac(外围设备)配对

问题描述 投票:4回答:1

我正在开发一个iPhone应用程序和一个通过蓝牙LE相互通信的Mac应用程序。 iPhone是核心,Mac是外围设备。我希望iPhone应用程序能够在重新启动后重新连接到Mac应用程序。因此,我在NSUserDefaults中保存代表Mac的外围设备的UUID,然后当iPhone应用程序启动时,我调用-[CBCentralManager retrievePeripheralsWithIdentifiers:],传入UUID。虽然这种方法返回外设,但当我调用-[CBCentralManager connectPeripheral:options:]时,iPhone永远不会重新连接到Mac。根据this SO帖子,问题是这两个设备需要配对,以便Mac的UUID是持久的。这让我想到了我的问题。我不能为我的生活让iPhone和Mac配对。根据Core Bluetooth Programming Guide的this页面,要求配对连接的方法是外设将特性的属性和权限设置为适当的值。我引用:

您可以通过设置适当的特性属性和权限,确保只有受信任的设备才能访问敏感的特征值。要继续上面的示例,要仅允许受信任的设备检索成员的电子邮件地址,请设置相应的特性的属性和权限,如下所示:

emailCharacteristic = [[CBMutableCharacteristic alloc]
    initWithType:emailCharacteristicUUID
    properties:CBCharacteristicPropertyRead
    | CBCharacteristicPropertyNotifyEncryptionRequired
    value:nil permissions:CBAttributePermissionsReadEncryptionRequired];

但是,这不起作用。即使我为特征设置了正确的权限和属性,iPhone仍然可以读取/写入它而不显示配对对话框。在其他地方我被告知启动配对的方法是外围设备拒绝认证错误不足的读/写请求。根据this帖子,

要配对,您需要响应认证错误不足的写入请求。例如,对于iOS外围设备,您可以编写如下内容:

- (void)peripheralManager:(CBPeripheralManager *)peripheralManager didReceiveWriteRequests:(NSArray *)requests {
  ...

  [peripheralManager respondToRequest:request withResult:CBATTErrorInsufficientAuthentication];

  ...
}

但这仍然不起作用!当Mac拒绝认证错误的写入请求时,iPhone会收到-[CBPeripheralDelegate peripheral:didWriteValueForCharacteristic:error:]回调,并显示“身份验证不足”的错误。没有配对对话框。我不知道该怎么办,如果我不能让它工作,我正在考虑完全放弃Core Bluetooth。如果您有任何想法如何工作,请告诉我。

iphone macos core-bluetooth reconnect pairing
1个回答
0
投票

来自Apple DTS:“我已经在这里与其他工程师进行了核实,我们不相信两个iOS设备之间可以配对弹出,而是iOS设备和BLE外围设备。”

因此,配对弹出窗口仅在iOS / Mac应用程序和外围设备之间发生。时间。

© www.soinside.com 2019 - 2024. All rights reserved.