2015-11-24 4 views
1

В официальном iBeacon guide для разработчиков компании Apple заявляет, чтоIBeacon: определение UUID

Разработчиков приложений должны определить UUID, специфичный для их приложений и использования развертывания случае.

Вопрос:

  • Часть A: Как я могу определить UUID в пути, что я уверен, что это не будет конфликтовать с другими? Есть ли официальный способ его получить?
  • Часть B: Предполагая, что A возможно, как я могу гарантировать, что UUID уникален для устройств iOS и Android?

Рассматривая приведенную выше цитату, кажется, что разработчик. Однако это похоже на непродуманные решения.


Если часть B вопроса 1 не представляется возможным, то было бы следующее случай использования, что я беспокоюсь будет:

Две компании определили один и тот же UUID для двух разные приложения и пользователь имеют оба установленных. Пользователь входит рядом с одним из iBeacons одной из компаний (оба iBeacons не имеют младшего и базового значения , либо оба имеют одинаковое незначительное и второстепенное значение ).

Вопрос 2:

  • как IOS и Android справиться с этим? Это вообще возможно?

ответ

4

Это 128-битный UUID. Напишите пятистрочную программу MacOS X, которая создает и печатает UUID и использует его.

Существует ненужный шанс, что клиент пожалуется вам о том, что тот же UUID, что и другое устройство. Однако более вероятно, что один метеорит ударит его, а другой ударит вас, и вы оба умрете за пять секунд до того, как ему или ей удастся пожаловаться.

Вот как работают UUID.

+2

Upvoted для hliarity: D –

0

Единственный официальный способ получить ProximityUUID - генерировать его с использованием (безопасного) случайного генератора UUID. Статистически крайне маловероятно, что вы случайно внесите в качестве другой компании, если вы используете случайный генератор UUID like one here. Это верно, потому что существует так много комбинаций, как @ gnasher729 говорит в своем ответе. Шансы на случайное перекрытие настолько низки, что просто не стоит беспокоиться.

Тем не менее, нет ничего, чтобы остановить кого-то другого от нарочно, используя тот же ProximityUUID, который вы определяете.Поскольку передача iBeacon отправляется в ясном тексте без шифрования, любой, у кого есть Bluetooth LE-сканер на устройстве Android, Mac или Windows, может считывать ваш ProximityUUID с маяком по радио.

Невозможно остановить это.

Способ, которым приложения Android и iOS справляются с этим, только используя iBeacons для использования в случаях, когда это приемлемо. Если это неприемлемо для вашего варианта использования, вы должны искать другое решение, чем предлагалось iBeacons.

+0

Не использовать случайное число для UUID! Существует класс Objective-C: 'NSUUID', используйте его. – zaph

+0

Класс NSUUID использует генератор случайных чисел внутри. Да, это прекрасный выбор, но есть и многие другие. – davidgyoung

+0

API требует UUID, просто используйте одну, а не домашнюю модель ID. Домашние ID-схемы, где безопасность потеряна. Тщеславие против безопасности, выберите. – zaph

1

UUID имеет длину 128 бит и может гарантировать уникальность в пространстве и во времени .

См A Universally Unique IDentifier (UUID)

IOS UUID код (Google для Android):

// Create a `NSUUID 
NSUUID *uuid = [NSUUID new]; 

// As a string: 
NSString *uuidString = [uuid UUIDString]; 
NSLog(@"uuidString: %@", uuidString); 

// As a bytes: 
uuid_t uuidBytes; 
[uuid getUUIDBytes:uuidBytes]; 

// as `NSData`: 
NSData *uuidData = [NSData dataWithBytes:uuidBytes length:sizeof(uuid_t)]; 
NSLog(@"uuidData: %@", uuidData); 

Выход:

uuidString: 8F16F262-3E60-49F4-9D1B-FC4F4975B219 
uuidBytes: 8F16F2623E6049F49D1BFC4F4975B219 
uuidData: <8f16f262 3e6049f4 9d1bfc4f 4975b219> 
Смежные вопросы