Как стать автором
Обновить
189.24
Рейтинг
Ситимобил
Творим городскую мобильность

Вас заметили! App Tracking Transparency (ATT) для iOS 14.5

Блог компании Ситимобил Разработка под iOS *Разработка мобильных приложений *Swift *Монетизация мобильных приложений *
Tutorial

Недавно вышла iOS 14.5, а чуть ранее Apple предупредила разработчиков, что начиная с этой версии ОС необходимо поддерживать фреймворк AppTrackingTransparency, который позволяет получить доступ к IDFA.

IDFA (The Device Identifier For Advertisers)  —  это уникальный случайный идентификационный номер, который используется рекламными сетями для распознавания вашего устройства. Этот идентификатор позволяет подобрать для вас максимально точную рекламу. Также на его основе работают многие сервисы аналитики.

Если пользователь запретит доступ к своему идентификатору, тот будет состоять из нулей, что не позволит идентифицировать ваше устройство:

Zeroed out IDFA: 00000000-0000-0000-0000-000000000000

Помимо требования Apple поддерживать AppTrackingTransparency, модераторы с 26 апреля отклоняют все обновления приложений, которые не запрашивают доступ к идентификатору. Давайте посмотрим, как соблюдать новое требование.

Как быть дружелюбнее?

По предварительным результатам исследования AppsFlyer, не менее 40 % пользователей готовы делиться IDFA. Чтобы увеличить этот показатель, перед отображением запроса можно показать свой информационный экран, объясняющий, для чего это необходимо.

Руководство Apple: https://developer.apple.com/design/human-interface-guidelines/ios/app-architecture/accessing-user-data/

Facebook и Instagram решили надавить на жалость, и сказали, что собирают и продают данные, так как это им помогает оставаться бесплатными социальными сетями.

Нам в Ситимобил показалось, что нужно быть честнее и дружелюбнее. Необходимо объяснить пользователям, что давая согласие они сделают только лучше и нам, и себе; Win-win, так сказать. Поэтому мы сделали информационный экран, после которого отображаем системное окно с запросом IDFA.

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

Техническая реализация

Реализация необходимой и достаточной поддержки AppTrackingTransparency не займет у вас много времени. Для начала вам необходимо в info.plist добавить параметр:

<key>NSUserTrackingUsageDescription</key>
<string>Можно ли использовать данные о вашей активности? Если вы разрешите, реклама Ситимобила на сайтах и в других приложениях будет более актуальной.</string>

Если ваше приложение поддерживает несколько языков, не забудьте про локализацию!

Далее необходимо запросить разрешение. Так как функция доступна начиная с iOS 14.5, то сначала необходимо проверить версию системы, и лишь потом запросить права.

private func requestTrackingAuthorization() {
    guard #available(iOS 14, *) else { return }
    ATTrackingManager.requestTrackingAuthorization { _ in
        DispatchQueue.main.async { [weak self] in
            // self?.router.close() or nothing to do
        }
    }
}

Для примера можете вызвать получившийся метод в didFinishLaunchingWithOptions. И не забудьте про

import AppTrackingTransparency

Запустите приложение и взгляните на получившийся запрос. Теперь ваше приложение готово для обновления.

Пограничные случаи

В примере выше мы запросили права, но не проконтролировали, дал ли пользователь свое согласие. Это можно проверить через AuthorizationStatus, возвращаемый методом requestTrackingAuthorization.

private func requestTrackingAuthorization() {
    guard #available(iOS 14, *) else { return }
    ATTrackingManager.requestTrackingAuthorization { status in
        DispatchQueue.main.async {
            switch status {
            case .authorized:
                let idfa = ASIdentifierManager.shared().advertisingIdentifier
                print("Пользователь разрешил доступ. IDFA: ", idfa)
            case .denied, .restricted:
                print("Пользователь запретил доступ.")
            case .notDetermined:
                print("Пользователь ещё не получил запрос на авторизацию.")
            @unknown default:
                break
            }
        }
    }
}
  • Функция requestTrackingAuthorization(completionHandler:) отобразит запрос на права только когда у авторизации отслеживания будет статус .notDetermined. После установки статуса вызов функции просто запустит обработчик без отображения запроса.

  • Обратите внимание, что обработчик функции запускается не в основном потоке. Учтите это, если работаете с UI.

Если необходимо, чтобы пользователь обязательно дал разрешение, то можно обработать статусы .denied и .restricted. Например, снова показать информационный экран с объяснением, для чего необходим доступ к IDFA, после чего перенаправить пользователя в настройки приложения, чтобы он дал разрешение. Вспомогательная функция, которая перенаправит в настройки приложения:

func goToAppSettings() {
    guard let url = URL(string: UIApplication.openSettingsURLString),
          UIApplication.shared.canOpenURL(url)
    else {
        return
    }
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

Теперь точно всё. Был ли у вас интересный опыт с внедрением ATT? Буду рад вашим комментариям и отзывам!

Теги: app tracking transparencyidfaswiftiosразработка под iosappstorecitymobilios developmentios 14.5
Хабы: Блог компании Ситимобил Разработка под iOS Разработка мобильных приложений Swift Монетизация мобильных приложений
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 12
Комментарии Комментарии 12

Похожие публикации

Лучшие публикации за сутки

Информация

Дата основания
Местоположение
Россия
Сайт
city-mobil.ru
Численность
1 001–5 000 человек
Дата регистрации

Блог на Хабре