如果删除外围设备中的配对信息,则无法显示iOS BLE配对对话框

时间:2015-10-02 02:35:35

标签: ios iphone bluetooth pairing

我正在开发iOS应用程序,它作为BLE核心,具有自定义服务和特性。

外围设备由某个供应商开发。

系统需要在中央和外围设备之间进行配对以写入特征值。 现在我的配对存在问题。

如果我在[设置]的[蓝牙]中[忘记此设备]删除中央(iPhone)端的配对信息,
当我的应用程序尝试在连接后写入特征值并发现服务和特性时,匹配序列再次启动。 (配对对话显示在我的申请表上)

序列如下,

 1. Complete connection
     [_centralMgr centralManager:didConnectPeripheral:]
 2. Discover service
 [_centralMgr peripheral:didDiscoverServices:]
 3. Discover characteristic
 [_centralMgr peripheral:didDiscoverCharacteristicsForService:error:]
 4. Try to write characteristic value
 [_centralMgr peripheral:writeValue:forCharacteristic:tyep:]
 5. At this timing, paring  dialog is shown and user tap [Paring] button
 6. Complete writing of characteristic value without error
 [_centralMgr peripheral:didWriteValueForCharacteristic:error:]

但如果我删除外围设备端的配对信息(通过重置设备), 当我的应用程序在连接后尝试写入特征值并发现服务和特征时,配对序列不会启动。

配对对话从不显示,写入请求的响应也不会返回。

序列如下,

 1. Complete connectiton
 [_centralMgr centralManager:didConnectPeripheral:]
 2. Discover service
 [_centralMgr peripheral:didDiscoverServices:]
 3. Discover characteristic
 [_centralMgr peripheral:didDiscoverCharacteristicsForService:error:]
 4. Try to write characteristic  value
 [_centralMgr peripheral:writeValue:forCharacteristic:tyep:]
 5. At this timing, paring dialog is never shown
 6. Response of writing request(in STEP 4.) doesn't return

外围设备供应商表示即使外围设备返回写错误 iPhone也不会请求配对

但是我的应用程序(至少iOS中的应用程序层)并没有收到编写错误的委托API。

有没有人有同样的问题? 如果您愿意提供一些提示或信息,我将不胜感激。

添加编写特征值的代码

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(nonnull CBService *)service error:(nullable NSError *)error
{
    NSArray* characteristics = service.characteristics;

    for (CBCharacteristic* characteristic in characteristics) {
        if (characteristic.properties & CBCharacteristicPropertyWrite) {
            if ([[characteristic.UUID UUIDString] isEqualToString:MY_CUSTOM_CHARACTERISTIC]) {
                NSData* data = MY_CUSTOM_DATA;
                [peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
                NSLog(@"writeValue:%@", data);
            }
        }
    }
}

在这两种情况下(删除中心/外设侧的配对信息后),它会发现完全相同的特征并写入相同的数据。

但仅在后一种情况下(在外围方面删除),配对序列不会启动。

1 个答案:

答案 0 :(得分:0)

在这种情况下,配件(外围设备)应该要求配对而不是电话。它应该在固件端处理。当它收到特征的写入请求时(仅在需要加密时)如果尚未配对,则应该要求配对。请求供应商处理它,你的一面都很好。