Как я могу сканировать устройства BLE на Iphone 6, которые не рекламируют имя

Мы используем Swift и IOS CBCentralManager. У нас есть Bluetooth с низким энергопотреблением (устройство с двойным режимом)

Пакет объявления двухрежимного устройства не имеет имени или сокращенного имени из-за нехватки места.

Когда мы вызываем «scanForPeripherals(withServices:options:)» с сервисным UUID, который включен в рекламный фрейм, мы получаем ответ только в том случае, если мы также включили короткое имя устройства.

Таким образом, с полем имени мы можем обнаружить устройство. Без поля имени мы не можем обнаружить устройство. Мы ожидаем, что CBPeripheral будет возвращен, очевидно, с именем NIL.

Мы получаем ответ на более ранние модели Iphone, такие как Iphone 5, но более поздние модели Iphone и iPad не получают ответа.

Стороннее программное обеспечение, такое как Lightblue, может обнаруживать эти устройства. Это стороннее программное обеспечение правильно определяет каждый раз на каждом протестированном нами устройстве.

Должно быть что-то, что нам не хватает.


person Paul Rolfe    schedule 30.05.2018    source источник


Ответы (1)


Я нашел плохо документированный вариант от Apple. Кажется, что это вариант для покрытия этого варианта использования.

let CBCentralManagerScanOptionAllowDuplicatesKey: String

Apple должен видеть повторяющийся идентификатор (или ноль), если в рекламе нет имени.

Вот яблоки пишут функция Apple Scan AllowDuplicatesKey

Это должно появляться довольно часто из-за ограничений размера рекламных фреймов в BLE.

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

person Paul Rolfe    schedule 31.05.2018