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

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

У меня есть поиск в Google и переполнение стека, но решения нет.

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


person Sunil Zalavadiya    schedule 13.04.2013    source источник
comment
Подумайте, вы могли бы добавить идентификатор приложения к идентификатору устройства и взять его хэш-код. Я не знаю, как получить фиксированный идентификатор устройства на iThings.   -  person hack_on    schedule 13.04.2013


Ответы (3)


ИЗМЕНИТЬ 2

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

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


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.

person βhargavḯ    schedule 13.04.2013
comment
:- Значение идентификатораForVendor не изменится для этого приложения для этого устройства, верно? - person Sunil Zalavadiya; 13.04.2013
comment
Значение идентификатораForVendor никогда не изменится для конкретного поставщика + приложения + устройства. - person Brijesh Vadukia; 13.04.2013
comment
Слова из документа Apple: значение этого свойства одинаково для приложений одного и того же поставщика, работающих на одном устройстве. Различное значение возвращается для приложений на одном и том же устройстве от разных поставщиков, а также для приложений на разных устройствах независимо от поставщика. - person Brijesh Vadukia; 13.04.2013
comment
@Bhargavi Я попробовал то же самое, но идентификатор остался прежним. - person Pratik; 13.04.2013
comment
@Bhargavi Согласно моим тестам, он остается прежним. Пожалуйста, дайте мне знать ваш результат? - person Brijesh Vadukia; 13.04.2013
comment
Пратик и Бриджеш Спасибо. Ты прав. Я тоже получаю те же значения :) - person βhargavḯ; 13.04.2013
comment
@Bhargavi У меня есть один вопрос: если пользователь обновит ios и/или установит новую ios, тогда значение идентификатораForVendor изменится или останется прежним? - person Sunil Zalavadiya; 13.04.2013
comment
@sunilz, если пользователь обновит ios и/или установит новый ios, тогда значение идентификатораForVendor изменится или останется прежним? - Я не уверен, но я думаю, что это не должно пострадать из-за обновленной версии IOS. - person βhargavḯ; 13.04.2013
comment
@Bhargavi Теперь Apple изменила документы: значение этого свойства остается неизменным, пока приложение (или другое приложение от того же поставщика) установлено на устройстве iOS. Значение изменяется, когда пользователь удаляет все приложения этого поставщика с устройства, а затем переустанавливает одно или несколько из них. Поэтому, если ваше приложение хранит значение этого свойства в любом месте, вы должны изящно обрабатывать ситуации, когда идентификатор изменяется. - person Sunil Zalavadiya; 09.09.2013
comment
@Bhargavi См. следующую ссылку: - developer.apple.com/library/ios/documentation/uikit/reference/ - person Sunil Zalavadiya; 09.09.2013
comment
@sunilz Спасибо, что обратили мое внимание на новый релиз. Я обновил ответ. - person βhargavḯ; 09.09.2013
comment
@Bhargavi У тебя есть другое решение? - person Sunil Zalavadiya; 09.09.2013
comment
@sunilz Не сейчас. Но как только я получу решение, я обязательно обновлю пост. - person βhargavḯ; 09.09.2013
comment
@All Я также ожидал, что VedorId останется прежним для App+Vedor+Device. Но в текущем проекте он меняется при каждой установке. Если кто-нибудь сталкивался с этой проблемой и имеет какое-либо решение, напишите, пожалуйста. - person Mrug; 18.04.2015

Важно отметить разницу между 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];
}
person Federico    schedule 30.04.2013
comment
Спасибо за ответ. Но у меня есть вопрос: если вы удалите приложение и переустановите, выключите устройство, обновите или установите новый ios, тогда OpenUDID останется таким же, как и предыдущий? - person Sunil Zalavadiya; 01.05.2013
comment
Подробнее об OpenUDID можно прочитать на сайте проекта. Но в значительной степени это универсальная уникальная строка, используемая несколькими приложениями на устройстве. Так, например, Gmail, Chrome и Dropbox используют OpenUDID (понятия не имею, но только для того, чтобы использовать имена для приложений). Первое приложение, которое вы загружаете, говорит, что Gmail установит сильный OpenUDID. Второе и третье приложения будут читать ту же строку OpenUDID. Но скажем, вы затем удаляете Gmail — строка OpenUDID не теряется, а сохраняется другими приложениями, которые ее используют. (Чтобы избавиться от него, все приложения должны быть удалены). - person Federico; 18.05.2013

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

person Community    schedule 13.04.2013
comment
Если пользователь обновит ios и/или установит новый ios, тогда данные связки ключей будут удалены или нет? - person Sunil Zalavadiya; 13.04.2013
comment
Я хочу сохранить созданный уникальный идентификатор на всю жизнь, возможно ли это? - person Sunil Zalavadiya; 13.04.2013
comment
@sunilz Я знаю, я прочитал твой вопрос. Мой ответ здесь. Я не знаю, в чем твоя проблема. - person ; 13.04.2013
comment
Да, но я хочу убедиться, что данные связки ключей будут сброшены или нет. - person Sunil Zalavadiya; 13.04.2013
comment
@sunilz Вы не можете быть абсолютно уверены ни в чем. Но брелок сохранится с достаточно высокой вероятностью. - person ; 13.04.2013