Невозможно вызвать код восстановления состояния для BLE на iOS

Я пытаюсь заставить мое приложение реагировать на повторный запуск в фоновом режиме - это отклик на обнаружение рекламного периферийного устройства.

Следующий код в настоящее время работает в моем приложении (на переднем плане + фон, даже после многих часов работы в фоновом режиме):

[self.centralManager scanForPeripheralsWithServices:self.services options:nil];

Обычно мое приложение не имеет ожидающих запросов на подключение, так как я хочу сканировать новые рекламные объявления в фоновом режиме. Следующая документация заставляет меня полагать, что это все еще возможно:

важно иметь в виду, что приложение будет перезапущено и восстановлено тогда и только тогда, когда оно ожидает определенного события или действия Bluetooth (например, сканирования, подключения или подписки на уведомление), и это событие произошло. (из https://developer.apple.com/library/content/qa/qa1962/_index.html)

а также

Система отслеживает... Службы, которые центральный менеджер сканировал (и любые параметры сканирования, указанные при запуске сканирования)https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html)

Реализация

Я следую инструкциям, указанным в этой последней ссылке ^ в разделе "Добавление поддержки сохранения и восстановления состояния", выполняя следующие действия:

  1. Создание центрального менеджера в соответствии с указаниями:

    self.centralManager = [[CBCentralManager alloc] initWithDelegate: собственная очередь:nil options:@{ CBCentralManagerOptionRestoreIdentifierKey:@"myCentralManagerIdentifier" }];

  2. Восстановите ваши центральные и периферийные менеджеры

Здесь я на самом деле ничего не сделал, так как didFinishLaunchingWithOptions вызывается, и центральный будет повторно инициализирован с тем же идентификатором. (Есть ли что-то еще, что я должен здесь сделать?)

  1. Реализация функции восстановления:

    (void) centralManager: (CBCentralManager *) central willRestoreState: (NSDictionary *) состояние { // Точка останова установлена ​​здесь, но никогда не достигается... NSLog(@"..."); }

Как я проверяю состояние сохранения / восстановления

Я установил точку останова в функции восстановления (из шага 3), а также вставил NSLog,

Нажав кнопку "Стоп", как было предложено в разделе " Как запустить сохранение и восстановление состояния ядра Bluetooth", я надеялся, что смогу запустить код, размещая рекламу на моем периферийном устройстве, как обычно, (этот процесс обнаружения / подключения работает отлично, когда приложение работает в фоновом режиме). Но на самом деле ничего не происходит, что я могу сказать.

Мой общий вопрос: почему не срабатывает точка останова / NSLogs не печатается? Есть ли предпочтительный способ отладки функции восстановления?

Наконец, в качестве проверки работоспособности, правильно ли я читаю документы, что обнаружение рекламного периферийного устройства должно инициировать повторный запуск приложения в фоновом режиме для обработки приложением?

0 ответов

Другие вопросы по тегам