CoreBluetooth Central Manager не может обнаружить периферию в фоновом режиме

У меня есть приложение, использующее Bluetooth 4.0 LE. Приложение позволяет устройству действовать как центральное и периферийное.

Я хочу, чтобы приложение выполнялось в фоновом режиме. Я уже включил UIBackgroundModes с "bluetooth-central" и "bluetooth-peripheral" в info.plist.

Я запускаю приложение на двух разных устройствах, поддерживающих Bluetooth 4.0 LE.

Когда оба устройства работают на переднем плане, все работает отлично, и информация передается в обоих направлениях.

Когда одно устройство работает на переднем плане, а другое работает в фоновом режиме, устройство, работающее в фоновом режиме, может сканировать и рекламировать, но не может обнаружить другое устройство, работающее в фоновом режиме. Устройство, работающее на переднем плане, может обнаружить и подключиться к устройству, работающему в фоновом режиме.

После прочтения Руководства по программированию Apple Core Bluetooth, я знаю, что подключение к другому устройству и обмен информацией возможны. Возможны пути.

Я могу отправить дополнительную информацию по запросу. Спасибо.

Ответ 1

Когда периферийное приложение имеет фоновые рисунки, рекламируемые сервисы переносятся в "область переполнения", а имя периферии не объявляется вообще. Кроме того, увеличивается рекламный интервал. Теоретически, стек iOS BLE должен обрабатывать этот случай и запрашивать данные области переполнения, но он этого не делает. В то же время сканирование в фоновой центральной части также замедляется, и, кроме того, для работы требуются определенные UUID службы. (Вы не можете сканировать в фоновом режиме с помощью служб nil)

Как следствие, сканирование фоновых устройств на фоновой центральной части невозможно.

Либо это ошибка или функция, только Apple знает. Откройте радар и сообщите им свою проблему. Чем больше мы это делаем, тем больше шансов получить ответ.