Прикрепление рекламной нагрузки на iOS без сопряжения - PullRequest
0 голосов
/ 16 июня 2020

Кто-нибудь знает, как можно передать короткий массив String или байтов через BLE на iOS без необходимости сопряжения?

Согласно моим исследованиям, для метода startAdvertise разрешены только 2 ключа: CBAdvertisementDataLocalNameKey и CBAdvertisementDataServiceUUIDsKey.

https://developer.apple.com/documentation/corebluetooth/cbperipheralmanager/1393252-startadvertising

Я также думал, что могу использовать

CBAdvertisementDataServiceDataKey: String
A dictionary that contains service-specific advertisement data.

для прикрепления данных, но это похоже на еще одну мертвую конец ВНИМАНИЕ: рекламный ключ «Сервисные данные» не разрешен ?

1 Ответ

1 голос
/ 16 июня 2020

К сожалению, API CoreBluetooth нельзя использовать для прикрепления данных к рекламным объявлениям. На iOS CBAdvertisingDataServiceDataKey доступен только для чтения. В то время как Bluetooth LE позволяет подключать служебные данные, Apple фактически запрещает это делать сторонним приложениям.

У вас есть несколько вариантов:

  1. Закодируйте свои данные внутри 128-битный UUID службы и объявить это. Вам нужно будет зарезервировать один или два байта в UUID, чтобы знать, что это «ваша» реклама, и, следовательно, нормально декодировать данные из других байтов. Этот полный UUID будет объявляться только тогда, когда ваше приложение находится на переднем плане, видимом на экране. Дайте ему go выключиться в фоновом режиме или на экране, и он больше не будет рекламировать в таком виде. Точно так же принимающие iOS устройства также должны находиться на переднем плане с включенным экраном. Это связано с тем, что iOS запрещает получение результатов фонового сканирования без предварительного указания UUID соответствующей службы. И поскольку вы динамически манипулируете некоторыми из этих байтов, вы не знаете, что это будет.

  2. Сделайте аналогичное кодирование с 4-байтовыми полями major и minor внутри рекламы iBeacon BLE с использованием CoreLocation. Опять же, это позволяет передавать только тогда, когда приложение находится на переднем плане. Прием, однако, может происходить в ограниченной степени в фоновом режиме (в течение 5-10 секунд после того, как один из ваших маяков впервые появится при объединении API-интерфейсов мониторинга и ранжирования). Большим недостатком является то, что у вас есть только четыре байта для работы.

  3. Рекламируйте данные, манипулируя 128-битным фоновым объявлением области переполнения BLE . Этот метод более продвинутый, но реклама работает в фоновом режиме. Прием работает на переднем плане, а частично - на заднем - получать можно, если хотя бы включен экран. Вы можете узнать больше об этой технике и получить доступ к бесплатному образцу кода в моем сообщении в блоге здесь http://www.davidgyoungtech.com/2020/05/07/hacking-the-overflow-area.

...