Фоновый CBPeripheral не остается читаемым

У меня есть приложение, которое транслирует CBPeripheral с небольшим количеством текста. Я использую фоновый режим bluetooth-peripheral, чтобы он мог транслироваться в фоновом режиме.

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

Однако на заднем плане что-то не так. Я сканирую периферийные устройства с помощью своего сервиса, и он находит его в порядке. Подключаю тоже нормально. Затем я discoverServices со своей службой, которая также работает нормально, поскольку вызывается обратный вызов didDiscoverServices. Однако в этом обратном вызове периферийное устройство не имеет никаких сервисов! peripheral.services пусто. Он бы не зашел так далеко, если бы не сервис, так что же дает? error в этом обратном вызове также nil

Все работает нормально при трансляции CBPeripheral на iOS 12

РЕДАКТИРОВАТЬ ----- Говорил слишком рано, кажется, что теперь мое устройство iOS 12 начало показывать те же симптомы. Через некоторое время CBPeripheral не работает.


person Darren    schedule 31.01.2020    source источник


Ответы (1)


Проблема была устранена путем добавления клавиши CBAdvertisementDataLocalNameKey при вызове startAdvertising на CBPeripheralManager. Кажется, этот ключ необходим, если вы хотите, чтобы ваш CBPeripheral продолжал вещание в фоновом режиме. Документы Apple не упоминают об этом.

person Darren    schedule 03.02.2020
comment
Привет @Darren, для меня эта точно такая же проблема продолжает сохраняться, несмотря на предоставление кода CBAdvertisementDataLocalNameKey для инициализации службы периферийной рекламы: // create our characteristics let characteristic = CBMutableCharacteristic.init(type: CBUUID(string: "12484b62-8da6-40b7-a54a-94ddf8f957a4"), properties: CBCharacteristicProperties.read, value: "dummy data to broadcast".data(using: String.Encoding.utf8), permissions: CBAttributePermissions.readable) - person Andreas Papageorgiou; 23.02.2020
comment
Не могли бы вы связаться со мной или ответить на мой комментарий выше. обнаружение не работает должным образом, и я получаю ту же ошибку, что и вы, несмотря на использование CBAdvertisementDataLocalNameKey - person Andreas Papageorgiou; 26.02.2020
comment
Моя проблема была решена путем добавления CBAdvertisementDataLocalNameKey к CBPeripheralManager. Я предлагаю вам начать новый вопрос. - person Darren; 26.02.2020
comment
Спасибо за ваш ответ. Ваш код все еще работает? т. е. вы можете обнаружить службу с периферийного устройства, работающего в фоновом режиме, подключиться к нему и прочитать его характеристики? Я начну новую дискуссию и свяжу этот вопрос, но если вы все еще заинтересованы в этой теме, пожалуйста, свяжитесь со мной по электронной почте. - person Andreas Papageorgiou; 26.02.2020
comment
Да, мой код теперь работает нормально. Я могу оставить iPhone в режиме ожидания на несколько дней и при этом обнаружить и подключиться к периферийному устройству в фоновом приложении. - person Darren; 26.02.2020