iOS6 UDID - Какие преимущества имеет identifierForVendor по сравнению с identifierForAdvertising?

Apple меняет свои настройки конфиденциальности для iOS6 и прекращает поддержку UUID устройств (UDID). Согласно презентации WWDC и документации есть две замены для UDID, оба в классе UIDevice:

-identifierForVendor

  • Идентификатор, идентичный для приложений от одного разработчика.
  • Удаляется с удалением последнего приложения для этого идентификатора команды.
  • Резервное копирование.

-identifierForAdvertising

  • Уникальный для устройства.
  • Доступно для всех приложений; используется для рекламы - iAd преобразован из UDID для iOS 6 и новее.
  • Выполните сброс с помощью «Стереть все содержимое и настройки».
  • Резервное копирование.

Мне кажется, что -identifierForVendor уступает -identifierForAdvertising, поскольку он будет сброшен при последнем удалении приложения от поставщика и "стереть все содержимое и настройки".

Какие преимущества у -identifierForVendor перед -identifierForAdvertising?


person Tihom    schedule 06.08.2012    source источник
comment
Разве то, что вы опубликовали в качестве вопроса, также не дает ответа :)   -  person AppHandwerker    schedule 07.08.2012
comment
Для всех случаев использования, которые я могу придумать, identifierForAdvertising лучше. Я не вижу возможности использования identifierForVendor.   -  person Tihom    schedule 07.08.2012
comment
На сайте Apple есть целый форум разработчиков, где вы можете пойти и обсудить iOS6, не беспокоясь о NDA.   -  person Abizern    schedule 08.09.2012


Ответы (10)


Важное примечание.

Apple только что выпустила iOS 6.0, и NDA было отменено.

Для разработчиков, которые предварительно включили код, ссылающийся на

[[UIDevice currentDevice] identifierForAdvertising]

этот метод НЕ включен в iOS 6. Если вы воспользуетесь указанным выше методом, ваше приложение (скорее всего) выйдет из строя и будет отклонено!

Вместо этого Apple создала новый класс ASIdentifierManager, который включает метод advertisingIdentifier. Вот документы Apple об этом:

person JRG-Developer    schedule 19.09.2012
comment
Обратите внимание, что это только для identifierForAdvertising. identifierForVendor остается в классе UIDevice. - person Andrei; 21.09.2012
comment
Только моя бабушка сейчас использует iOS 6, так что я предполагаю, что identifierForAdvertising - это честная игра? - person botbot; 03.12.2014
comment
@botbot Да, наша минимальная цель - iOS 7 практически для всех наших приложений ... ваше, вероятно, тоже должно быть ...:] - person JRG-Developer; 03.12.2014

Пользователи могут ограничить использование отслеживания рекламы на своем телефоне. См. эта статья о механизме отказа в разделе "Настройки> Общие> О программе> Реклама".

Новый класс ASIdentifierManager имеет свойство advertisingTrackingEnabled, которое возвращает истину или ложь в зависимости от того, ограничено ли отслеживание рекламы пользователем. Несмотря на то, что рекламный идентификатор устройства возвращается свойством advertisingIdentifier независимо от отказа, вы не должны использовать идентификатор, если пользователь отказался.

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

person Mr. T    schedule 02.10.2012
comment
Это единственный твердый ответ, который отвечает на актуальный вопрос. Спасибо. - person Basil Bourque; 08.03.2014

Я подозреваю, что Apple просто отклонит ваше приложение, если вы используете identifierForAdvertising для чего-либо, не связанного с рекламой (например, если вы отправите identifierForAdvertising на свои собственные серверы, даже если вы не являетесь рекламной сетью, или если вы отправите identifierForAdvertising в тот же запрос с другими данными, которые потенциально могут идентифицировать человека).

Если мое подозрение верно, то преимущество identifierForVendor перед identifierForAdvertising в том, что оно не приведет к отклонению вашего приложения.

person Ole Begemann    schedule 04.09.2012
comment
Вы знаете об этом из первых рук? Вы отправляли что-нибудь с новой рекламой или идентификатором поставщика? - person Tihom; 05.09.2012
comment
Как я уже сказал, это всего лишь предположение. - person Ole Begemann; 05.09.2012
comment
Я думаю, что очень маловероятно, что отправка IFA приведет к отклонению вашего приложения. Есть вполне законные причины для отправки IFA на ваши собственные серверы, не являясь рекламной сетью, т.е. отслеживание конверсии с сервера на сервер - person wallacer; 18.09.2012

Это два разных идентификатора, предназначенных для двух разных целей. Я бы подумал, что identifierForVendor будет тем, что нужно использовать для выполнения действий, требующих привязки приложения к конкретному пользователю / устройству, например, для предоставления push-уведомлений и обновления данных приложения пользователя на стороне сервера (например, их оценка или любые другие данные, которые хранятся для их).
Идентификатор ForAdvertising следует использовать для таких вещей, как таргетированная реклама, а также для проверки эффективности конкретной рекламной кампании (проверьте, на каких устройствах были установлены приложения по той или иной рекламе).

person g_low    schedule 28.09.2012

Используйте VendorID. Это очень поучительная статья http://www.doubleencore.com/2013/04/unique-identifiers/

person idiogo    schedule 14.11.2013

Чтобы создать uniqueString на основе уникального идентификатора устройства в iOS 6:

#import <AdSupport/ASIdentifierManager.h>

NSString *uniqueString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
NSLog(@"uniqueString: %@", uniqueString);
person Denis Kutlubaev    schedule 27.07.2013
comment
Это ужасный совет, сделайте так: [[NSUUID UUID] UUIDString] - person Kevlar; 05.03.2014
comment
Нет. Вы читали описание identifierForVendor / AdvertisingIdentifier в вопросе? Вы прочитали вопрос? - person jrc; 25.08.2015

Эти API настолько плохо спроектированы, что ясно говорят: Apple не хочет, чтобы мы идентифицировали пользовательские устройства.

Просто посмотрите на описание идентификатора ForVendor.

Он стирается, если пользователь стирает все приложения от одного и того же поставщика. :( Это ненадежно - может вернуть nil (документация советует "подождать" некоторое время, если это произойдет. :(

Они не использовали очевидное решение, которое работает в любое время и не полагается на установку / удаление - вернуть SHA-1 (или любой другой хэш) внутреннего идентификатора аппаратного устройства, объединенного с идентификатором команды.

person Hrissan    schedule 11.07.2013

identifierForAdvertising, вероятно, лучше с точки зрения отслеживания, но может потребовать от пользователя отказа в настоящем или будущем. С другой стороны, identifierForVendor вряд ли будет зависеть от пользователя.

person Gustav    schedule 30.07.2013

Важно знать, что резервную копию идентификатора ForVendor можно восстановить только на том же устройстве. Если резервная копия восстанавливается на другое устройство, идентификатор очищается.

person malhal    schedule 15.01.2014
comment
Привет, малхал, вы проверяли, сбрасывает ли устройство с приложением из магазина приложений, которое использует identifierForVendor, на устройстве A и восстанавливает на устройстве B identifierForVendor? Я не нашел ничего, связанного с этим ответом в документации. - person Segev; 10.01.2016

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

Вот альтернативное и лучшее решение для получения или постоянного перекрестного идентификатора устройства:

описание: https://blog.onliquid.com/persistent-device-unique-identifier-ios-keychain/

код: https://gist.github.com/miguelcma/e8f291e54b025815ca46

person Igor    schedule 06.06.2016