IOS Bluetooth LE:无法使用存储的配对数据进行连接

我被困在我的IOS开发中,我需要帮助。 我不是专家,这也许是一个愚蠢的问题。

我正在尝试做什么

我试图将我的应用程序连接到需要配对的蓝牙LE设备。

目前的行为

没有配对设备和我的iPhone应用程序没有问题。 我能够连接,重新连接和读/写特性没有任何问题。

但是,如果设备需要配对 ,我只能在配对popup确认之后第一次读取/写入特征。 下一次,我发现并连接到我的设备的应用程序,但我没有读/写特性数据的权利,因为(我猜)我没有使用配对信息。

最后…

花了几个小时在网上search没有运气这里是我的问题:

  • 如何使用手机中存储的配对数据将我的应用程序从我的iPhone应用程序连接到蓝牙LE设备? 我错过了什么吗?

  • 是否有可能不是IOS问题,因为如果连接设备的手机中存在配对数据,它会自动使用?

有没有与蓝牙LE和IOS的经验,以帮助我?

更新2013-10-27

我已经发现, 如果配对存在 (没有确认popup),那么通过配对authentication之后就不能读取受保护的特性 。 没有保护的特点没有问题! 我不知道为什么发生,但行为是IOS应用程序永远不会收到设备的答案。

所以如果第一次阅读完成后,不会造成问题。 这里是我用来发现评论中的数据阅读特征的代码。

- (void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error; { NSArray *characteristics = [service characteristics]; CBCharacteristic *characteristic; if (peripheral != servicePeripheral) { NSLog(@"Wrong Peripheral.\n"); return ; } if (service != batteryService) { NSLog(@"Wrong Service.\n"); return ; } if (error != nil) { NSLog(@"Error %@\n", error); return ; } for (characteristic in characteristics) { NSLog(@"discovered characteristic %@", [characteristic UUID]); if ([[characteristic UUID] isEqual:[CBUUID UUIDWithString:kBatteryCharacteristicUUIDString]]) { // Bat NSLog(@"Discovered Bat Characteristic"); batteryCharacteristic = [characteristic retain]; //--> generate problem when pairing exists between IOS app and device //[peripheral readValueForCharacteristic:batteryCharacteristic]; } } } 

您无需在应用程序中进行配对pipe理。

如果您的应用程序以LE集中模式运行,并且外设发送的validation错误代码不足以响应读/写请求,则iOS将自动与您的设备配对,并将重试请求。

如果从设备上断开连接,然后再次重新连接,则外设需要再次发送“不足validation”错误代码,以便iPhone重新开始encryption。 再次,你不必在这里做任何特别的应用程序。

如果您的应用程序在LE外设模式下运行,则情况会有所不同。 在设置GATT数据库时,请确保为CBAttributePermissionsCBCharacteristicProperties都设置了正确的标志。 这将告诉iOS,它应该发送不足validation错误代码本身,如果它没有配对。 这是中央设备开始encryption过程的责任。

在苹果产品的蓝牙配件devise指南中 ,描述了进一步的限制。

  • 您的配件需要parsing专用蓝牙地址的function。 iPhone会随时更改其公共蓝牙地址,只有配对的设备才会有正确的密钥来parsing该公共地址并识别iPhone。

  • “3.9节配对”也很有趣。

  • 请注意,如果您在没有中间人(MITM)保护的情况下进行配对,则外围设备可以使用生成的密钥来parsingiPhone的专用蓝牙地址。 但是,您将无法encryption频道。

    与iOS上的MITM保护配对包括input远程设备显示的PIN码。 根据我所知,iOS不支持通过外部通道发送配对数据的带外(OOB)配对(至less没有用于设置OOB数据的公共API)。

    长话短说:如果你只有“配对”/“取消”配对,你不能encryptionLE频道,但只能在未来的连接中识别iPhone。 好的是,即使你在iPhone上取消配对,甚至在恢复iPhone固件之后,你仍然可以识别iPhone .-)。

关于一般的LEencryption:无论如何都不安全(参见http://eprint.iacr.org/2013/309 )。