2013-04-13 3 views
10

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

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

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

+0

Думаю, вы могли бы добавить идентификатор для приложения к устройству ID и взять хэш -код этого. Однако я не знаю, как получить фиксированный идентификатор устройства на iThings. –

ответ

8

EDIT 2

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

Также смотрите summary here.


identifierForVendor доступен из UIDevice Class Reference.

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

[[UIDevice currentDevice] identifierForVendor].UUIDString 

Примечание:Доступно в прошивкой 6.0 и выше.

РЕДАКТИРОВАТЬ 1 В соответствии с новым выпуском UIDevice Class Reference

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


EDIT

Я хотел бы увидеть на this popular link

1) MD5 МАК + CFBundleIdentifier

[[UIDevice currentDevice] uniqueDeviceIdentifier] 

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

2) MD5 УДС

[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier] 

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

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

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

+0

: - Значение идентификатораForVendor не будет изменено для этого приложения для этого устройства, верно? –

+1

Значение идентификатора ForVendor никогда не изменится для этого перкулярного Vender + App + Device. –

+0

Apple document words: «Значение этого свойства одинаково для приложений, которые принадлежат одному и тому же поставщику, работающему на одном устройстве. Другое значение возвращается для приложений на том же устройстве, что и у разных поставщиков, а также для приложений на разных устройствах устройств, независимо от поставщика ». –

0

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

+0

Если пользователь обновляет ios и/или устанавливает новые ios, данные keychain удаляются или нет? –

+0

Я хочу сохранить созданный уникальный идентификатор на всю жизнь, возможно ли это? –

+0

@sunilz Я знаю, я прочитал ваш вопрос. Мой ответ здесь. Я не знаю, в чем твоя проблема. – 2013-04-13 06:11:58

2

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

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

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

Я думаю, что лучшим решением является использование 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]; 
} 
+0

Спасибо за ваш ответ. Но у меня есть вопрос: если вы удалите приложение и переустановите, выключите устройство, обновите или установите новые ios, тогда OpenUDID останется таким же, как и предыдущий? –

+0

Вы можете узнать больше о OpenUDID на сайте проекта. Но в значительной степени это универсально уникальная строка, разделяемая несколькими приложениями на устройстве. Так, например, Gmail, Chrome и Dropbox используют OpenUDID (я понятия не имею, но просто для использования имен для приложений). Первое загружаемое приложение говорит, что Gmail установит OpenUDID сильным. Второе и третье приложение прочитают ту же самую строку OpenUDID. Но скажите, что вы удалите Gmail - вместо потери строки OpenUDID ее будут поддерживать другие приложения, которые ее используют. (Чтобы избавиться от него, все приложения должны быть удалены). – Federico