---
title: "Порядок вызовов в Unity SDK"
description: "Избегайте потери premium-доступа, отсутствия атрибуции и периодических ошибок #2002, вызывая методы Adapty SDK в правильном порядке."
---

`Adapty.Activate()` должен завершиться до вызова любого другого метода Adapty SDK. Пока не сработает callback завершения, SDK не имеет состояния. Любой вызов, сделанный до или параллельно с `Activate()`, завершится ошибкой [`#2002 notActivated`](unity-handle-errors#custom-network-codes).
Если ваше приложение аутентифицирует пользователей и вы получаете customer user ID после запуска, вызовите `Adapty.Identify()` в этот момент. Не вызывайте методы, требующие действий пользователя, пока не сработает колбэк `Identify`. Вызовы, конкурирующие с ним, либо завершаются ошибкой [`#3006 profileWasChanged`](unity-handle-errors#custom-network-codes), либо применяются к анонимному профилю, созданному при активации. В таком случае атрибуция, MMP ID (например, `appsflyer_id`) и принадлежность установки не всегда переносятся на идентифицированный профиль. Если ваше приложение не аутентифицирует пользователей, пропустите `Identify` и продолжайте работу с анонимным профилем.
MMP и аналитические SDK (AppsFlyer, Adjust, Branch, PostHog) подчиняются тому же правилу. Сначала инициализируйте их и дождитесь коллбэков с UID, а затем вызывайте `Adapty.Activate`. Иначе MMP ID попадёт в кратковременный анонимный профиль и не всегда переносится в идентифицированный. Подробнее об особенностях AppsFlyer см. в разделе [AppsFlyer](appsflyer).
## Правильный порядок \{#the-correct-order\}

Ваш путь зависит от двух вещей: когда вы узнаёте 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`.                                   |
| 2a   | `Adapty.Activate(builder.Build(), ...)` с `SetCustomerUserId` на билдере                                      | При запуске приложения, после шага 1, если у вас есть customer user ID                  | Рекомендуется. Анонимный профиль не создаётся.                                                 |
| 2b   | `Adapty.Activate(builder.Build(), ...)` без `SetCustomerUserId`                                               | При запуске приложения, после шага 1, если customer user ID нет (или вы его не собираете) | Adapty создаёт анонимный профиль.                                                              |
| 3    | `Adapty.SetIntegrationIdentifier(key, value, callback)` для каждого MMP                                       | После шага 2, до любых вызовов, связанных с действиями пользователя                   | Обязательно, чтобы идентификаторы MMP попали в правильный профиль.                            |
| 4    | `Adapty.Identify("YOUR_USER_ID", callback)`                                                                   | После шага 3 (или шага 2, если MMP нет), до шага 5 — только на пути 2b с аутентификацией | Дождитесь коллбэка завершения. Параллельные вызовы во время `Identify` приводят к `#3006 profileWasChanged`. |
| 5    | `GetPaywall`, `GetPaywallProducts`, `RestorePurchases`, `MakePurchase`, `UpdateAttribution`, `UpdateProfile`  | После шага 4, если вы вызываете `Identify`; иначе после шага 3 (или шага 2, если MMP нет) | Этим вызовам нужен стабильный профиль.                                                         |
:::important
Пропуск этих шагов приведёт к потере уровня доступа у вернувшихся пользователей, отсутствию `appsflyer_id` в профилях и отображению пейволов для неправильной аудитории.
:::
## Установки через web2app и веб-воронки \{#web2app-and-web-funnel-installs\}

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

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

- [Stripe](stripe)
- [Paddle](paddle)