Альтернативный способ создания уникального идентификатора жизни

Я хочу создать UDID для устройства iphone/ipad, которое останется неизменным, поэтому, пожалуйста, скажите мне, есть ли у кого-нибудь идеи для этого?

У меня есть поиск вокруг google и stack-overflow, но не получил решение.

Также некоторые предложили использовать OpenUDID и CFUUID, но CFUUID будет отличаться, когда пользователи удаляют и переустанавливают ваше приложение. Но я хочу использовать один и тот же UDID для каждого приложения, которое будет генерироваться в первый раз и должно оставаться неизменным для жизни на каждое устройство для каждого приложения.

Ответ 1

РЕДАКТИРОВАТЬ 2

Из-за обновления iOS и согласно новой документации identifierForVendor не сохраняет ценность при повторной установке приложения. Я видел ответ на эту ссылку. Это может помочь в том или ином виде. Просто отметить только UDID будет сохраняться, даже если система reset, поэтому, вероятно, этот ответ может стать ограничением для разработчиков, ищущих пожизненный UDID даже в системе reset. Помимо этого, упомянутый ответ кажется полезным.

Также посмотрите сводка здесь.


identifierForVendor доступен из UIDevice Ссылка на класс.

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

[[UIDevice currentDevice] identifierForVendor].UUIDString

Примечание. Доступно в iOS 6.0 и более поздних версиях.

РЕДАКТИРОВАТЬ 1 В соответствии с новой версией Ссылка на класс UIDevice

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


ИЗМЕНИТЬ

Я бы хотел, чтобы вы просмотрели эту популярную ссылку

1) MD5 MAC + CFBundleIdentifier

[[UIDevice currentDevice] uniqueDeviceIdentifier]

Это останется таким же для каждого приложения, но отличается для каждого приложения. Если вы удалите и переустановите приложение, оно будет одинаковым для каждого приложения.

2) MD5 MAC

[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier]

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

РЕДАКТИРОВАТЬ 3

Примечание. Это решение в iOS 7 больше не является полезным, поскольку uniqueIdentifier больше не доступен для iOS7.

Ответ 2

Важно отметить разницу между UDID и UUID.

Уникальный идентификатор устройства UDID является аппаратным. Он не изменяется для конкретного устройства. По этой причине это стало проблемой конфиденциальности, и Apple блокирует приложения, которые пытаются это использовать. В результате Apple выпустила отказоустойчивый "идентификатор устройства", особенно для использования рекламы. Этот новый хэш-идентификатор называется IFA и доступен в iOS 6.0 +.

UUID "универсально уникальный идентификатор" не является аппаратным. Это хэш, используемый для идентификации устройства; но не особенно абсолютная величина. Например, PhoneGap генерирует UUID на основе свойств устройства; это то, что вы получаете, когда делаете device.uuid. Если вы удалите приложение и переустановите его, вы получите новый хэш идентификатора. UUID не блокируется Apple.

Я думаю, что лучшим решением является использование IFA, с OpenUDID в качестве резервной копии для iOS < 6,0.

Вот код, который мы используем. Если IFA недоступен, получите OpenUDID. [[Вы должны установить OpenUDID, подробнее об этом читайте, https://github.com/ylechelle/OpenUDID.]]

NSString* uuid = nil;
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {
    // IOS 6 new Unique Identifier implementation, IFA
    uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
} else {
    // Before iOS6 (or if IFA disabled) you shoud use a custom implementation for uuid
    // Here I use OpenUDID (you have to import it into your project)
    // https://github.com/ylechelle/OpenUDID
    NSString* openUDID = [OpenUDID value];
    uuid = [OpenUDID value];
}

Ответ 3

Сгенерируйте UUID (возможно, используя API CFUUIDRef) в первый раз и сохраните его в цепочке ключей.