Как я могу получить UDID на iOS? - PullRequest
38 голосов
/ 24 ноября 2010

Мне было интересно, можно ли узнать UDID iPhone пользователя. Может кто-нибудь пролить свет?

Ответы [ 10 ]

67 голосов
/ 24 ноября 2010

Примечание: Apple больше не будет принимать приложения, которые обращаются к UDID устройства, начиная с 1 мая 2013 года .

Вместо этого вы должны использовать новые методы identifierForVendor и advertisingIdentifier в iOS 6+ для доступа к этому. См. соответствующий пост здесь для более подробной информации.


Старый способ (устарел и приведет к отказу в App Store)

NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];

Начиная с iOS7, свойство uniqueIdentifier больше не доступно.

См. Справочник UIDevice.

11 голосов
/ 14 октября 2012

Как некоторые говорили, в iOS5 это устарело:

NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];

У Apple теперь есть 3 API для получения UUID (универсального уникального идентификатора) устройства:

Альтернатива 1 (класс NSUUID):

NSString *udid = [[NSUUID UUID] UUIDString];

Альтернатива 2 (класс UIDevice):

NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

Альтернатива 3 (класс ASIdentifierManager, требуется среда AdSupport):

NSUUID *UUID = [[ASIdentifierManager sharedManager] advertisingIdentifier];
NSString *udid = [UUID UUIDString];

Но все они буквенно-цифровые, и уникальный идентификатор типового устройства состоит только из цифр. Таким образом, эти 3 API бесполезны, а старый [[UIDevice currentDevice] uniqueIdentifier] все еще работает в iOS6, но как долго?

Если предупреждение «устарело» вас раздражает, просто добавьте:

#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

Надеюсь, это поможет!

6 голосов
/ 17 октября 2012

В IOS5 и выше, используйте этот, чтобы найти UDID

NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL);
if (uuid) {
    uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid);
    CFRelease(uuid);
}
NSLog(@"UDID: [%@]", uuidString);
3 голосов
/ 27 сентября 2013

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

Apple говорит об этом identifierForVendor :

Значение этого свойства одинаково для приложений от одного поставщика, работающих на одном устройстве.Разное значение возвращается для приложений на одном устройстве от разных поставщиков и для приложений на разных устройствах независимо от поставщика.

Если значение равно нулю, подождите и получите значение позже.Это происходит, например, после перезапуска устройства, но до того, как пользователь разблокировал его.

Значение в этом свойстве остается неизменным, пока приложение (или другое приложение того же производителя) установлено наустройство iOS. Значение изменяется, когда пользователь удаляет все приложения этого поставщика с устройства, а затем переустанавливает одно или несколько из них.Это значение также может изменяться при установке тестовых сборок с использованием XCode или при установке приложения на устройство с использованием специального распространения.Поэтому, если ваше приложение хранит значение этого свойства где-либо, вы должны изящно обрабатывать ситуации, когда меняется идентификатор.

Но что еще хуже, похоже, что Apple также удаляетпоследнее средство использования MAC-адреса в качестве уникального идентификатора, в соответствии с этого блога AVG .

Так что же делать сейчас, если мы хотим однозначно идентифицировать устройства - например,для лицензирования, настройки или других целей ??

2 голосов
/ 09 июня 2014

Лучший способ сделать это так:

NSString *udid = [[[UIDevice currentDevice]identifierForVendor]UUIDString];
2 голосов
/ 22 апреля 2013

Я не могу комментировать, но я хотел бы предупредить других. В ответе DZenBot все методы не дают одинаковых результатов:


Альтернатива 1 (класс NSUUID):

NSString *udid = [[NSUUID UUID] UUIDString];

Альтернатива 2 (класс UIDevice) (доступно в iOS 6.0 и более поздних версиях):

NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

Альтернатива 1 генерирует случайный UUID , а Альтернатива 2 дает фиксированный UID , который не изменится.

2 голосов
/ 12 января 2013

В IOS5 и выше, используйте этот, чтобы найти UDID

NSString * uuidString = ноль;

CFUUIDRef uuid = CFUUIDCreate (NULL); ...

Я думаю, что вы показываете, как создать уникальный идентификационный номер, а не получить уникальный идентификатор устройства.

1 голос
/ 07 апреля 2015

Это очень просто. Перейдите в окно Xcode и выберите «Устройства» или вы можете найти его в «Органайзере». enter image description here

http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood/organizerudid

1 голос
/ 07 августа 2013

Как насчет использования [OpenUDID] lib https://github.com/ylechelle/OpenUDID

0 голосов
/ 23 июля 2013

Помните, что UDID устарел в IOS 5. В iOS 7 Apple теперь всегда возвращает фиксированное значение при запросе MAC, чтобы специально помешать MAC в качестве основы для схемы ID .Так что теперь вам действительно следует использовать - [UIDevice identifierForVendor] или создать UUID для каждой установки.Надеюсь, это кому-нибудь поможет.

...