gpt4 book ai didi

iOS 低功耗蓝牙 : unable to connect using stored pairing data

转载 作者:技术小花猫 更新时间:2023-10-29 11:01:06 26 4
gpt4 key购买 nike

我想做什么

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

当前行为

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

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

终于……

在花了几个小时在网络上搜索但没有运气之后,我的问题是:

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

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

是否有具有蓝牙 LE 和 IOS 经验的人可以帮助我?

更新 2013-10-27

我发现您无法通过配对身份验证读取 protected 特征,之后如果存在配对(无确认弹出窗口)。非保护特性没问题!我不知道为什么会这样,但行为是 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];
}
}
}

最佳答案

您无需在应用中执行任何配对管理操作。

如果您的应用在 LE Central 模式下运行,并且外围设备发送身份验证不足错误代码以响应读/写请求,iOS 将自动与您的设备配对并重试该请求。

如果您断开与设备的连接,然后重新连接,外设需要再次发送 Insufficient Authentication 错误代码,以便 iPhone 重新启动加密。同样,您无需在此处对您的应用执行任何特殊操作。

如果您的应用在 LE 外设模式下运行,情况就会有所不同。设置 GATT 数据库时,请确保为 CBAAttributePermissionsCBCharacteristicProperties 设置正确的标志。这将告诉 iOS 如果没有配对,它应该自己发送 Insufficient Authentication 错误代码。然后中央设备负责启动加密过程。

Bluetooth Accessory Design Guidelines for Apple Products , 描述了进一步的限制。

  • 您的配件需要能够解析私有(private)蓝牙地址。 iPhone 会不时更改其公共(public)蓝牙地址,只有配对的设备才能拥有正确的 key 来解析该公共(public)地址并识别 iPhone。

  • 《Section 3.9 Pairing》也很有意思。

  • 请注意,如果您在没有中间人 (MITM) 保护的情况下配对,您的外围设备可以使用生成的 key 来解析 iPhone 的私有(private)蓝牙地址。但是,您将无法加密 channel 。

    在 iOS 上与 MITM 保护配对涉及输入由远程设备显示的 PIN 码。据我所知,iOS 不支持通过外部 channel 发送配对数据的带外 (OOB) 配对(至少没有用于设置 OOB 数据的公共(public) API)。

    长话短说:如果您只有“配对”/“取消”配对,则无法加密 LE channel ,只能在以后的连接中识别 iPhone。令人高兴的是,即使您在 iPhone 端取消配对,甚至在恢复 iPhone 固件后,您仍然可以识别 iPhone ;-)。

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

关于iOS 低功耗蓝牙 : unable to connect using stored pairing data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19589836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com