Мне было интересно узнать, удалось ли узнать UDID пользователя iPhone. Может кто-то пролить свет?
Как я могу получить UDID в iOS?
Ответ 1
Примечание: Apple больше не будет принимать приложения, которые получают доступ к UDID устройства с 1 мая 2013 г..
Вместо этого вы должны использовать новые методы identifierForVendor
и advertisingIdentifier
в iOS 6+ для доступа к этому. См. связанный пост здесь для более подробной информации.
Старый способ (устаревший и приведет к отклонению App Store)
NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
Начиная с iOS7, свойство uniqueIdentifier
больше не доступно.
См. ссылку UIDevice
.
Ответ 2
Как и некоторые из них, в 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"
Надеюсь, что это поможет!
Ответ 3
В IOS5 и выше, используйте это, чтобы найти UDID
NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL);
if (uuid) {
uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
}
NSLog(@"UDID: [%@]", uuidString);
Ответ 4
Возможно, стоит упомянуть, что идентификаторForVendor не уникален для устройства, он может и в конечном итоге изменится.
Apple говорит об этом identifierForVendor:
Значение этого свойства одинаково для приложений, которые поступают из тот же самый поставщик работает на одном устройстве. Возвращается другое значение для приложений на том же устройстве, что и у разных поставщиков, и для приложений на разных устройствах независимо от поставщика.
Если значение равно nil, подождите и снова получите значение позже. Бывает, например, после перезапуска устройства, но перед пользователем разблокирует устройство.
Значение в этом свойстве остается неизменным, пока приложение (или другое приложение от того же поставщика) устанавливается на устройстве iOS. Значение изменяется, когда пользователь удаляет все приложения этих поставщиков из устройства и затем переустанавливает один или несколько из них. Значение может также изменяются при установке тестовых сборок с использованием Xcode или при установке приложения на устройстве, использующем ad-hoc-распределение. Поэтому, если ваши магазины приложений значение этого свойства в любом месте, вы должны грациозно обрабатывать ситуации, в которых изменяется идентификатор.
Но что еще хуже, так это то, что кажется, что Apple также устраняет последний способ использования MAC-адреса в качестве уникального идентификатора, согласно этот AVG Блог.
Итак, что теперь делать, если мы хотим однозначно идентифицировать устройства - например. для лицензирования, настроек или других целей?
Ответ 5
В IOS5 и выше, используйте это, чтобы найти UDID
NSString * uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate (NULL);...
Я думаю, что вы показываете, как создать уникальный идентификационный номер, а не для получения уникального идентификатора устройства.
Ответ 6
Я не могу комментировать, но я хотел бы предупредить других. В ответ на DZenBot все методы не дают одинаковых результатов:
Альтернатива 1 (класс NSUUID):
NSString *udid = [[NSUUID UUID] UUIDString];
Альтернатива 2 (класс UIDevice) (доступен в iOS 6.0 и более поздних версиях):
NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
Альтернатива 1 генерирует случайный UUID, а в Альтернативе 2 указан фиксированный UID, который не изменится.
Ответ 7
Лучший способ сделать это, как это
NSString *udid = [[[UIDevice currentDevice]identifierForVendor]UUIDString];
Ответ 8
Как насчет использования [OpenUDID] lib https://github.com/ylechelle/OpenUDID
Ответ 9
Это очень просто. Перейдите в окно Xcode и выберите "Устройства" или вы можете найти его в "Организаторе".
http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood/organizerudid
Ответ 10
Помните, что UDID устарел в IOS 5. В iOS 7 Apple теперь всегда возвращает фиксированное значение при запросе MAC, чтобы конкретно препятствовать MAC в качестве базы для схемы ID. Итак, теперь вы действительно должны использовать - [UIDevice identifierForVendor] или создать UUID для каждой установки. Надеюсь, это поможет кому-то.