В моем приложении для iOS я могу успешно подключаться к периферийным устройствам BLE, обнаруживать услуги и подписываться на характеристики, чтобы приложение получало уведомления всякий раз, когда происходит изменение значения характеристики. Все это происходит без проблем, пока приложение работает в фоновом режиме.
Но проблема возникает, когда происходит восстановление состояния. В методе centralManager:willRestoreState:
я могу получить ранее подключенные периферийные устройства, используя метод retrieveConnectedPeripheralsWithServices:
. Но ничего не происходит, когда я вызываю метод discoverServices:
на извлеченном периферийном устройстве. peripheral:didDiscoverServices:
метод никогда не вызывается. Значение свойства извлеченных периферийных служб также равно нулю. IOS не кеширует сервисы и характеристики?
Примечание. Наше периферийное устройство BLE изначально рекламирует услуги. Когда приложение запускается в первый раз, оно считывает значение с периферийного устройства и записывает пользовательские данные в характеристику. Написание сообщений, периферийные устройства останавливают рекламу услуг. Но инженер по микропрограммному обеспечению утверждает, что даже если служба остановлена периферийным устройством, периферийное устройство, извлеченное из восстановления состояния, должно иметь кэшированную службу. Это правда ?