2015-12-17 2 views
0

Я хотел бы создать «официальный» рандомизированный UUID в своем приложении, прежде чем/вместо библиотеки CoreBluetooth IOS, получающей пакет iBeacon с реального устройства iBeacon и генерирующего рандомизированный UUID в это время.Могу ли я предварительно генерировать UUID от CoreBluetooth до того, как IOS получит рекламный пакет iBeacon?

Позвольте мне объяснить. CoreBluetooth, когда он получает пакет iBeacon, создаст случайно сгенерированный UUID, который он будет использовать для привязки к определенному устройству iBeacon. Используя CoreBluetooth, разработчики не имеют доступа к фактическому UUID, Major/Minor, TX Power или MAC-адресу рекламного устройства iBeacon, у них есть только доступ к произвольно сформированному UUID IOS. IOS использует MAC-адрес iBeacon в качестве своего уникального идентификатора для генерации случайного UUID, а не для широковещательного UUID iBeacon. При тестировании я несколько раз менял UUID iBeacon, и когда я передаю рекламный пакет, IOS по-прежнему читает его как тот же iBeacon. Но когда я изменяю MAC-адрес iBeacon, IOS воспринимает его как другой iBeacon. Случайный сгенерированный UUID IOS постоянно работает между приложениями, запущенными на устройстве IOS, до перезагрузки устройства.

Я использую слово «официальный», потому что, несмотря на то, кажется, я могу генерировать UUID с определенными функциями в библиотеке CoreBluetooth использованием UUIDWithString, UUIDWithData, UUIDWthNSUUID,

https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBUUID_Class/index.html

Я хотел бы, чтобы убедиться, что я создавая случайный UUID, который IOS будет регистрировать и правильно связываться с этим iBeacon.

Процесс IOS CoreBluetooth, который я пытаюсь выполнить сам, обычно запускается в первый раз, когда IOS получает определенную рекламу iBeacon. Мой план состоит в том, чтобы упредить это, чтобы первый раз, когда он получил пакет из этого iBeacon, устройство IOS уже имеет свой случайный UUID, сгенерированный и связанный с этим iBeacon. Мое приложение будет содержать список MAC-адресов для генерации этих случайных UUID.

+0

Я не уверен, что понимаю, чего вы пытаетесь достичь. Вы не можете заставить iOS использовать данный UUID для периферии Bluetooth. Вы беспокоитесь о безопасности? Вам не нужно - периферийный UUID будет отличаться на каждом устройстве iOS, обнаружив маяк, поэтому нет возможности глобально идентифицировать маяк через периферийный UUID. – heypiotr

+0

Я не столько забочусь о безопасности. Я хотел бы, чтобы мое приложение выполняло различные действия, в зависимости от того, из какого iBeacon он получает рекламный пакет. Прямо сейчас, и я не могу отправить какой-либо уникальный идентификатор из каждого iBeacon, который предоставляет мне CoreBluetooth. Я думал, что если каждое устройство IOS узнает, какие MAC-адреса iBeacon будут искать, я бы смог выполнить то, что мне нужно. Мне не нужно форсировать определенный UUID, мне просто нужно определить, какой iBeacon он обнаруживает. Любое другое направление также оценивается по этому поводу. –

+1

Ах, понял. Да, вы не увидите идентификатор через Core Bluetooth, фильтры iOS. Вместо этого вы решили использовать Core Location? Альтернативно, используйте Eddystone-UID, этот доступен через Core Bluetooth. Большинство маяков от известных поставщиков могут быть переключены на трансляцию Eddystone вместо iBeacon, поэтому вам не нужно покупать новое оборудование. – heypiotr

ответ

1

К сожалению, я не думаю, что это возможно. Как вы говорите, UUID, назначенный обнаруженному устройству Bluetooth LE, внутренне генерируется CoreBluetooth. Нет публичного API, чтобы изменить его поведение в этом отношении.

+0

В конечном счете, я ищу способ отправки уникального идентификатора в моем пакете iBeacon, поэтому мое приложение знает, какой iBeacon отправляет сигнал. Это ветерок с Android.Любые мысли о том, как я могу это сделать в IOS? –

+0

Понял, я думал об этом несколько раз раньше. К сожалению, Apple делает это очень сложно с помощью sandboxing CoreBluetooth обнаружения маяков из обнаружений CoreLocation и блокирования доступа к чтению MAC-адреса. Вы можете использовать исходные и младшие значения для идентификации маяка, но это дает вам только два байта для работы. В этих байтах вы можете сохранить 4 младших бит Mac, но CoreBluetooth все равно не позволит вам его прочитать. – davidgyoung

+0

Я попытался использовать майор/минор, но, похоже, не смог разобрать его из пакета. Как получить доступ к тем, у кого CoreBluetooth с использованием объектного-c? Когда вы говорите два байта, эти два шестнадцатеричных слота? Даже этого было бы достаточно для меня. У меня есть доступ ко всем этим хорошим данным через CoreLocation, но это только, кажется, дает мне сообщение с интервалом в 1 секунду. В моем приложении мне нужен доступ к сообщению в режиме реального времени (задержка 10-50 мс). –

Смежные вопросы