Использование UDID в приложениях pre-iOS6 (и IDFA для 6.0+)

Новые функции IDOS iOS6 отлично подходят для отслеживания конверсий для пользователей, работающих под управлением iOS6. Однако, если приложение имеет минимальную поддерживаемую версию, меньшую, чем iOS 6, каков приемлемый подход при работе на устройстве pre-iOS6?

Jumptap упоминает, что вам по-прежнему разрешено использовать UDID на устройствах pre-iOS6:

Идентификатор рекламы (IDFA) был представлен в iOS 6. Он используется рекламодателями для отслеживания конверсий и расширенного таргетинга, среди прочего. На устройствах, использующих iOS 6 (или выше), IDFA предназначен для замены UDID в качестве идентификатора устройства. На устройствах, использующих iOS 5 (или ниже), Apple продолжит поддерживать использование UDID в качестве идентификатора устройства.

Но это не очень хорошо. Проверка версий iOS – это среда выполнения, то есть ваш код всегда статически ссылается на устаревший аксессуар UDID, и только во время выполнения решает, читать или нет. Разумеется, процесс рассмотрения Apple увидит статическую ссылку на UDID и отклонит приложение. Они не собираются декомпилировать код и подтвердить правильность вашей логики или попытаться выполнить 100% -ный тест покрытия кода, чтобы подтвердить, что он никогда не читается при работе в iOS6., Они?!?!

Кроме того, AppsFlyer упоминает, что UDID можно включить в своем SDK , с этой запиской:

* Подробности UDID. Некоторые рекламные сети (например, Tapjoy) требуют, чтобы UDID запускал кампании CPI. В вышеупомянутом случае вам необходимо включить UDID и обновить приложение «Условия и положения» с помощью четкого заявления о конфиденциальности, уведомляющего ваших пользователей о сборе их личной информации.

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

Скорее всего, это не так, но они должны. Но посмотрите, цель Apple – не порадовать разработчика; их цель – угодить себе (т. е. делать массу денег).

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

NSString *str1 = @"ueId"; NSString *str2 = @"uniq"; NSString *sel = [NSString stringWithFormat:@"%@%@ent%cfi%s", str2, str1, 'i', "er"]; SEL msg = NSSelectorFromString(sel); if (iOS_5_or_older) { deviceID = [[UIDevice currentDevice] performSelector:msg]; } 

Это довольно слабая «обфускация», но может быть достаточно, чтобы пройти статическую часть анализа истории, если Apple действительно станет ленивой и / или решит сделать вас.

UDID теперь не выполняет проверку. Откройте OpenIDID.

  • Как долго поставщики и рекламные идентификаторы заменяют iPhone UDID?
  • Как определить, звонят ли какие-либо внешние библиотеки uniqueIdentifier]?
  • iOS: UDID - это верхний регистр
  • Недопустимое бинарное приложение
  • Могу ли я использовать старый сервис TestFlight для тестирования версий моего приложения для iOS?
  • Репликация UDID с OpenUDID - это хороший способ?
  • Сертификаты центров разработчика iOS, идентификаторы и профили застревают на экране загрузки
  • Как получить UDID мертвого устройства iOS?
  • Программа iOS для корпоративных пользователей и программ для разработчиков iOS
  • Как получить UDID устройства iOS программно в iOS 7
  • Получить код страны с устройства UDID для iPhone?
  • Interesting Posts

    iOS Отключить отображение в корневом режиме при нажатии кнопки панели вкладок

    Как я могу генерировать 24-битные True Color Animated Gifs в iOS?

    Быстрая перемотка назад и быстрая перемотка вперед в AVAudioPlayer

    Размер шрифта на универсальной раскадровке

    Странное поведение с кнопкой рядом с центром уведомлений на iPad

    iOS7 UILabel визуальный сбой

    Преобразование Microsoft Project Оксфорд Распознавание речи от Objective-C до SWIFT

    Добавьте новый UIBackgroundMode в приложение App Store с помощью Tweak / script Jailbreak

    iOS Как проверить, действительно ли на телефоне

    Расширение результатов CLPlacemark в EXC BAD ACCESS

    Утечка памяти для CoreImage

    iOS8 CLLocationManager возвращает Null в фоновом состоянии

    Можно ли перечислить все аудиоустройства RemoteIO в настоящее время в приложении?

    Как читать QR-код из статического изображения

    Чрезвычайно высокая память и использование ЦП при загрузке проанализированных данных JSON в Firebase в функции цикла

    Давайте будем гением компьютера.