Я реализовал подключение от устройства IOS к периферийному устройству .Затем я также реализовал выборки доступных сервисов и характеристик этих сервисов.Также стало возможным вызывать
peripheral.setNotifyValue(true, for: characteristic) or
peripheral.readValue(for: characteristic)
Вызов peripheral.readValue(for: characteristic)
запускает func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { }
и получает значение из кэша .Похоже, что нет способа обновить / очистить кэш программно в IOS.Таким образом, каждый раз, когда он вызывается, он возвращает то же значение , пока кеш не будет очищен вручную путем перезапуска приложения / BLE.
После вызова peripheral.setNotifyValue(true, for: characteristic)
он успешно обновляет состояние периферийного устройства, а также вызывает тот же метод делегата
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { } just once.
Пытался выполнить задачу с IOS 11 и 12, iphone X, 6+, 6s Plus.Устройство отлично работает с Android , оно может получать значения обновлений с.Устройство также было проверено с помощью примера приложения RxBluetoothKit, результат был таким же, как у меня (не удалось получить уведомления).
Похоже, что у многих людей возникают такие же проблемы.Это может быть ошибка в Core Bluetooth или IOS-версиях, поэтому она ограничивает диапазон Гц, который используется для уведомлений.
Не могли бы вы поделиться какими-либо другими идеями или возможными решениями, как это исправить, чтобы можно было получать уведомления от периферийного устройства.Также может помочь опция очистки кеша программным способом (некоторые люди упоминают некоторые хитрые хаки для этого).
Обновление: устройство работает с OSX и MacBook Pro 2014 и приложением BlueSee, но не работает с тем жеПриложение BlueSee для IOS и iPhone 6s Plus.