Порядок вызовов в Unity SDK

Adapty.Activate() должен завершиться до вызова любого другого метода Adapty SDK. Пока не сработает callback завершения, SDK не имеет состояния. Любой вызов, сделанный до или параллельно с Activate(), завершится ошибкой #2002 notActivated.

Если ваше приложение аутентифицирует пользователей и вы получаете customer user ID после запуска, вызовите Adapty.Identify() в этот момент. Не вызывайте методы, требующие действий пользователя, пока не сработает колбэк Identify. Вызовы, конкурирующие с ним, либо завершаются ошибкой #3006 profileWasChanged, либо применяются к анонимному профилю, созданному при активации. В таком случае атрибуция, MMP ID (например, appsflyer_id) и принадлежность установки не всегда переносятся на идентифицированный профиль. Если ваше приложение не аутентифицирует пользователей, пропустите Identify и продолжайте работу с анонимным профилем.

MMP и аналитические SDK (AppsFlyer, Adjust, Branch, PostHog) подчиняются тому же правилу. Сначала инициализируйте их и дождитесь коллбэков с UID, а затем вызывайте Adapty.Activate. Иначе MMP ID попадёт в кратковременный анонимный профиль и не всегда переносится в идентифицированный. Подробнее об особенностях AppsFlyer см. в разделе AppsFlyer.

Правильный порядок

Ваш путь зависит от двух вещей: когда вы узнаёте customer user ID и используете ли вы MMP или аналитический SDK.

  • Шаги 2 и 5: Обязательны для каждого приложения. Активируйте SDK, затем вызывайте методы SDK.
  • Шаги 1 и 3: Нужны только если вы интегрируете MMP или аналитический SDK (AppsFlyer, Adjust, Branch, PostHog).
  • Шаг 4: Нужен только если ваше приложение аутентифицирует пользователей и получает customer user ID после запуска.

Если у вас есть customer user ID при запуске приложения, передайте его напрямую в Activate() (шаг 2a). В этом случае анонимный профиль не создаётся, поэтому шаг 4 не нужен.

ШагВызовКогдаПримечания
1Инициализируйте MMP или аналитический SDK (AppsFlyer, Adjust, PostHog, Branch)При запуске приложения, первымДождитесь колбэка с UID от MMP, например getAppsFlyerId.
2aAdapty.Activate(builder.Build(), ...) с SetCustomerUserId на билдереПри запуске приложения, после шага 1, если у вас есть customer user IDРекомендуется. Анонимный профиль не создаётся.
2bAdapty.Activate(builder.Build(), ...) без SetCustomerUserIdПри запуске приложения, после шага 1, если у вас нет customer user ID (или вы его не собираете)Adapty создаёт анонимный профиль.
3Adapty.SetIntegrationIdentifier(key, value, callback) для каждого MMPПосле шага 2, до любых вызовов, инициированных действиями пользователяНеобходимо, чтобы ID из MMP попали в правильный профиль.
4Adapty.Identify("YOUR_USER_ID", callback)После шага 3 (или шага 2, если нет MMP), до шага 5 — только при пути 2b с аутентификациейДождитесь колбэка завершения. Конкурентные вызовы во время Identify приводят к ошибке #3006 profileWasChanged.
5GetPaywall (GetFlow в SDK v4), GetPaywallProducts, RestorePurchases, MakePurchase, UpdateAttribution (UpdateExternalAttribution в SDK 4.1), UpdateProfileПосле шага 4, если вызывается Identify; иначе после шага 3 (или шага 2, если нет MMP)Эти вызовы требуют стабильного профиля.
Important

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

Установки через web2app и веб-воронки

Если пользователь совершает покупку через веб-чекаут (Stripe, Paddle) и затем устанавливает нативное приложение, первый вызов Activate() на устройстве создаёт новый анонимный профиль. Этот профиль не связан с веб-профилем. Если вы можете получить customer user ID до запуска приложения (из потока аутентификации или реферера установки) — передайте его напрямую в Activate(). В противном случае веб-покупка останется невидимой на устройстве до тех пор, пока вы не вызовете Identify("YOUR_USER_ID"), а затем RestorePurchases.

Подробнее о метаданных, которые нужно передавать при каждом веб-чекауте, читайте здесь: