IOS 7 Core Bluetooth Периферийная работа в фоновом режиме

Я хочу, чтобы мое устройство iOS постоянно рекламировало службу Bluetooth LE, даже когда приложение не работает, поэтому я могу найти другое устройство для iOS и найти его. Я следил за инструкциями Apple по созданию фона:

https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/PerformingCommonPeripheralRoleTasks/PerformingCommonPeripheralRoleTasks.html#//apple_ref/doc/uid/TP40013257-CH4-SW1.

Я могу заставить его рекламировать на переднем плане ok, а иногда и в фоновом режиме, но он не остается рекламой все время. Если у вас есть настройка для запуска в фоновом режиме, не следует ли начинать рекламу даже после перезапуска устройства, как и службы определения фона автоматически начинают работать после перезапуска? Являются ли их ограничения на фоне, которые не перечислены (или трудно найти) в документах Apple? У кого-нибудь есть пример базовой периферийной рекламы Bluetooth в фоновом режиме?

Спасибо...

Ответ 1

Фоновая реклама возможна, если вы добавили фоновый режим bluetooth-peripheral в приложение. Как только вы это сделаете, ваше приложение будет продолжать получать обратные вызовы, даже если они указаны.

Реклама - хитрый зверь, поскольку Apple реализовала несколько оптимизаций, чтобы снизить энергопотребление, и это снижает качество рекламы, как только приложение будет основано. А именно: ставка резко снижается, рекламируемые услуги не включены и местное имя также не включено. После того, как приложение вернется на передний план, эти ограничения недействительны.

В общем случае для такого типа фоновой операции приложение должно быть запущено. С iOS 7 был реализован процесс восстановления, который позволяет ОС действовать от имени приложения, когда он прекращается и восстанавливается, когда какая-либо передача или другая операция неизбежны. Для этого необходимо добавить ключ восстановления к параметрам инициализации CBPeripheralManager/CBCentralManager. Запуск приложения один раз по-прежнему требуется, но после этого iOS будет продолжать действовать как фасад BLE по отношению к центрам/периферийным устройствам.

UPDATE. Я запустил цикл в списке bluetooth-dev от Apple, а также нашел, что основные менеджеры Bluetooth были объявлено неспособным восстановить после перезагрузки. Это не описано ни в одной документации, но, вероятно, упоминалось в видео WWDC. Мы должны подать ошибку и скопировать ее, чтобы повысить осведомленность Apple.