Я пытаюсь заставить свое приложение реагировать на повторное рассмотрение в фоновом режиме - это ответ на обнаружение рекламной периферии.
Следующий код в настоящее время работает в моем приложении (на переднем плане + фон, даже после многих часов фонирования):
[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)
Реализация
Я следую шагам, изложенным в этой последней ссылке ^ в разделе "Добавление поддержки государственного сохранения и восстановления", выполняя следующие действия:
-
Проигрывание центрального менеджера по указанию:
self.centralManager = [[CBCentralManager alloc] initWithDelegate: self queue: nil options: @{CBCentralManagerOptionRestoreIdentifierKey: @"myCentralManagerIdentifier"}];
-
Восстановите свой центральный и периферийный менеджеры
Здесь я на самом деле ничего не сделал, поскольку didFinishLaunchingWithOptions
а центральный будет didFinishLaunchingWithOptions
инициализирован с тем же идентификатором. (Есть ли что-то еще, что я здесь пропустил?)
-
Реализация функции восстановления:
(void) centralManager: (CBCentralManager *) central willRestoreState: (NSDictionary *) state {//Точка останова, установленная здесь, но никогда не достигнутая... NSLog (@"..."); }
Как я проверяю сохранение/восстановление состояния
Я установил точку останова в функции восстановления (с шага 3), а также вставил NSLog
.
Нажимая "stop", как было предложено в разделе " Как запустить сохранение и восстановление состояния ядра Bluetooth", я надеялся, что я смогу запустить код с помощью рекламы с помощью своего периферийного устройства, как обычно, (это открытие/поток соединений отлично работает, когда приложение работает в фоновом режиме). Но ничего действительно не получается, что я могу сказать.
Мой общий вопрос: почему контрольная точка не запускается /NSLogs не печатается? Есть ли предпочтительный способ отладки функции восстановления?
Наконец, как проверка работоспособности, правильно ли я читаю документы, что открытие рекламного периферийного устройства должно инициировать перезапуск приложения в фоновом режиме для приложения?