Порядок вызовов в React Native SDK

adapty.activate() должен завершиться до вызова любого другого метода Adapty SDK. Пока он не выполнен, у 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, затем вызывайте его методы.
  • Шаги 1 и 3: Нужны только при интеграции MMP или аналитического SDK (AppsFlyer, Adjust, Branch, PostHog).
  • Шаг 4: Нужен только если ваше приложение аутентифицирует пользователей и получает customer user ID после запуска.

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

ШагВызовКогдаПримечания
1Инициализируйте ваш MMP или аналитический SDK (AppsFlyer, Adjust, PostHog, Branch)Запуск приложения, первым деломДождитесь коллбэка с UID от MMP, например getAppsFlyerUID.
2aadapty.activate('YOUR_PUBLIC_SDK_KEY', { customerUserId: 'YOUR_USER_ID' })Запуск приложения, после шага 1, если у вас есть customer user IDРекомендуется. Анонимный профиль никогда не создаётся.
2badapty.activate('YOUR_PUBLIC_SDK_KEY') без customerUserIdЗапуск приложения, после шага 1, если у вас нет customer user ID (или вы его не собираете)Adapty создаёт анонимный профиль.
3adapty.setIntegrationIdentifier(key, value) для каждого MMPПосле шага 2, до любого вызова, инициируемого пользователемОбязательно, чтобы ID от MMP попали в нужный профиль.
4await adapty.identify('YOUR_USER_ID')После шага 3 (или шага 2, если нет MMP), перед шагом 5 — только на пути 2b с аутентификациейВсегда используйте await. Параллельные вызовы во время 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 до запуска приложения (из вашего флоу авторизации или install referrer), передайте его напрямую в activate(). В противном случае веб-покупка останется невидимой на устройстве, пока вы не вызовете identify('YOUR_USER_ID'), а затем restorePurchases.

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