Как я могу получить UDID на iOS?

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

10 ответов


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

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


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

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

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

посмотреть UIDevice ссылка.


как некоторые сказали, в 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 framework):

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

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

если" устаревшее " предупреждение ошибается, просто добавьте:

#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

надеюсь, что это помогает!


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

NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL);
if (uuid) {
    uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid);
    CFRelease(uuid);
}
NSLog(@"UDID: [%@]", uuidString);

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

Apple говорит о identifierForVendor:

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

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

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

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

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


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

NSString *uuidString = nil;

CFUUIDRef uuid = CFUUIDCreate(NULL); ...

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


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


Вариант 1 (класс NSUUID):

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

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

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

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


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

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

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


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

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


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