Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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];

Ответ 10

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