Показ пейвола с таргетингом Apple Ads при первом запуске в Kotlin Multiplatform SDK

Эта статья относится к iOS-сборке вашего приложения. Атрибуция Apple Ads доступна только на iOS.

Apple Ads (AA) атрибуция поступает асинхронно после Adapty.activate(). Если вы вызовете getFlow слишком рано, атрибуция может ещё не поступить, и Adapty разрешит плейсмент относительно аудитории по умолчанию — минуя ваши пейволы с AA-сегментацией. AdaptyProfile.appliedAttributionSources позволяет приложению определить, когда AA-атрибуция применена к профилю, чтобы запрос пейвола подождал корректного разрешения AA-сегментации.

Important

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

Прежде чем начать

Вам потребуется:

  • Adapty Kotlin Multiplatform SDK 4.0 или выше.
  • Apple Ads, настроенный для приложения в Adapty. См. Apple Ads.
Note

В примерах используются названия API из SDK 4.0. В SDK 3.x пейволы получают с помощью getPaywall/getPaywallForDefaultAudience, которые возвращают AdaptyPaywall. См. Миграция Adapty Kotlin Multiplatform SDK на v4.

Как это работает

После вызова Adapty.activate() SDK в фоне запрашивает атрибуцию Apple Ads у Apple и передаёт результат в бэкенд Adapty. Когда AA становится активным источником атрибуции для профиля, SDK доставляет обновлённый AdaptyProfile в ваш OnProfileUpdatedListener, где в списке appliedAttributionSources появляется "apple_search_ads".

Пустой список может означать любое из следующего:

  • Атрибуция Apple Ads для этого профиля ещё не была обработана.
  • Атрибуция вообще не поступала.
  • Атрибуция пришла от другого провайдера, который этот список не отображает.

Даже с пустым списком вызов getFlow абсолютно безопасен — Adapty обрабатывает запрос относительно той аудитории, которая соответствует текущему состоянию профиля, как правило это аудитория по умолчанию.

Important

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

Реализация

При первом запуске отслеживайте "apple_search_ads" в профиле и установите жёсткий таймаут — если атрибуция Apple Ads так и не придёт, эти пользователи всё равно должны увидеть пейвол.

  1. Активируйте SDK. См. Установка и настройка Kotlin Multiplatform SDK.
  2. Подпишитесь на обновления профиля с помощью Adapty.setOnProfileUpdatedListener. Если вы ещё не настроили слушатель, см. Отслеживание обновлений подписки.
  3. Отслеживайте появление "apple_search_ads" в appliedAttributionSources. Когда он появится, запросите пейвол — Adapty вернёт вариант, сегментированный по Apple Ads:
Adapty.setOnProfileUpdatedListener { profile ->
    if ("apple_search_ads" in profile.appliedAttributionSources) {
        // load the paywall via Adapty.getFlow(placementId)
    }
}
  1. Запустите таймер на 3–5 секунд параллельно с подпиской. Если таймер сработает раньше, чем появится "apple_search_ads", запросите пейвол для аудитории по умолчанию с помощью getFlowForDefaultAudience. Он возвращает пейвол без ожидания сегментации.

Какой бы путь ни сработал первым, он должен загрузить пейвол; второй путь нужно пропустить. Используйте единый флаг состояния (например, hasLoadedPaywall) для дедупликации, чтобы пейвол не запрашивался дважды. Настройте резервный пейвол для плейсмента, чтобы пользователь не застрял при сбое сетевого запроса.

setOnProfileUpdatedListener принимает только один слушатель. Если в вашем приложении он уже используется для других целей (например, для отслеживания обновлений подписки), добавьте проверку в существующий слушатель, а не регистрируйте второй.