Поддержка словаря iOS Bluetooth CBPeripheralManager
В документации CBPeripheralManager метод startAdvertising получает словарь, содержащий данные, которые вы хотите рекламировать. Согласно документации, CBPeripheralManager.startAdvertising принимает только два возможных ключа в своем словарном аргументе: CBAdvertisingDataLocalNameKey и CBAdvertisingDataServiceUUIDsKey.
Однако в документации Apple по превращению устройства iOS в iBeacon они предполагают, что вы можете передать словарь, который возвращается из метода периферийных данных CLBeaconRegion. Словарь, возвращаемый этим методом, содержит 1 пару значений ключа с ключом с именем " kCBAdvDataAppleBeaconKey ", а значением является идентификатор близости, основного, младшего и маякового идентификатора.
Здесь отображается дамп словаря, возвращенного методом Периферийные данные: Словарь Дамп
У меня такой вопрос: как метод PeripheralManager.startAdvertise получает словарь с ключом " kCBAdvDataAppleBeaconKey " и по-прежнему транслируется без ошибок, если единственными поддерживаемыми ключами являются CBAdvertisingDataLocalNameKey и CBAdvertisingDataServiceUUIDsKey?
1 ответ
Самое простое и наиболее вероятное объяснение состоит в том, что документация о CBPeripheralManager.startAdvertising, принимающая только два ключа, является неточной. Документы, возможно, просто никогда не обновлялись после того, как была выпущена поддержка iBeacon.
В связи с этим я подозреваю (но не могу подтвердить), что метод поддерживает еще больше ключей в качестве частных API. Вы должны декомпилировать двоичный файл фреймворка, чтобы выяснить, что это такое.
Реальность такова, что очень часто документация не синхронизируется с новыми функциями, добавленными в API, и даже более распространена в документации, не говоря уже о секретном поведении, которое не поддерживается публично.