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

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

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

Important

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

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

Вам понадобится:

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

В примерах используются имена API из SDK 4.1. В SDK 4.0 свойство профиля называется AppliedAttributionSources. В SDK 3.x это свойство имеет то же устаревшее название, а пейволы получаются с помощью GetPaywall/GetPaywallForDefaultAudience, которые возвращают AdaptyPaywall. См. Миграция Adapty Unity SDK на v4.

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

После вызова Adapty.Activate() SDK в фоновом режиме запрашивает данные атрибуции Apple Ads у Apple и передаёт результат на бэкенд Adapty. Когда AA становится активным источником атрибуции для профиля, SDK передаёт обновлённый AdaptyProfile в обработчик OnLoadLatestProfile, при этом AdaptyExternalAttributionProvider.AppleAds добавляется в список AppliedExternalAttributionProviders.

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

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

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

Important

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

Реализация

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

  1. Активируйте SDK. См. Установка и настройка Unity SDK.
  2. Подпишитесь на обновления профиля, реализовав IAdaptyEventListener и зарегистрировав его через Adapty.SetEventListener. Если вы ещё не настроили слушатель, см. Отслеживание обновлений подписки.
  3. Отслеживайте появление AppleAds в AppliedExternalAttributionProviders. Когда оно появится, запросите пейвол — Adapty вернёт вариант, сегментированный по AA:
using System.Linq;

public void OnLoadLatestProfile(AdaptyProfile profile)
{
    if (profile.AppliedExternalAttributionProviders.Contains(AdaptyExternalAttributionProvider.AppleAds))
    {
        // load the paywall via Adapty.GetFlow(placementId, ...)
    }
}
  1. Запустите таймер на 3–5 секунд параллельно с подпиской. Если таймер сработает раньше, чем появится AppleAds, запросите пейвол для аудитории по умолчанию с помощью GetFlowForDefaultAudience. Он возвращает пейвол без ожидания сегментации.

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

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