Я разрабатываю приложение для iOS, которое работает как центральный BLE с настраиваемыми службами и характеристиками.
А периферийное устройство разработано определенным производителем.
Системе необходимо объединить центральное и периферийное устройства в пары для записи значения характеристики. А теперь у меня проблема с сопряжением.
Если я удалю информацию о сопряжении на центральной (iPhone) стороне с помощью [Забыть это устройство] в [Bluetooth] в [Настройки],
последовательность сопряжения начнется снова, когда мое приложение попытается записать значение характеристики после подключения и обнаружить службу и характеристику. (Диалог сопряжения отображается в моем приложении)
Последовательность такая, как показано ниже,
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);
}
}
}
}
В обоих случаях (после удаления информации о сопряжении на центральной / периферийной стороне) он обнаруживает полностью одну и ту же характеристику и записывает одни и те же данные.
Но только в последнем случае (удален на периферийной стороне) последовательность сопряжения не запускается.