繁体   English   中英

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

[英]Core Bluetooth: Cannot get iPhone (the central) and Mac (the peripheral) to pair

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

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

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

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

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

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

  [peripheralManager respondToRequest:request withResult:CBATTErrorInsufficientAuthentication];

  ...
}

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM