Как я могу получить 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.
http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood/organizerudid
помните, что UDID устарел в IOS 5. В iOS 7 Apple теперь всегда возвращает фиксированное значение при запросе MAC, чтобы специально помешать MAC в качестве базы для ID схема. Так что теперь вам действительно стоит использовать -[identifierForVendor Уиткевица] или создайте UUID для каждой установки. Надеюсь, это кому-то поможет.