Идентификация пользователей в Capacitor SDK

Управление покупками пользователей зависит от модели аутентификации вашего приложения:

Ключевые понятия:

  • Профили — сущности, необходимые для работы SDK. Adapty создаёт их автоматически. Они могут быть анонимными (без customer user ID) или идентифицированными (с customer user ID).
  • Customer user ID — необязательные идентификаторы, которые вы создаёте, чтобы Adapty мог связать ваших пользователей с их профилями в Adapty.

Вот в чём разница между анонимными и идентифицированными пользователями:

Анонимные пользователиИдентифицированные пользователи
Purchase managementВосстановление покупок на уровне стораИстория покупок сохраняется на всех устройствах через customer user ID
Profile managementНовый профиль при каждой переустановкеОдин и тот же профиль во всех сессиях и на всех устройствах
Data persistenceДанные анонимных пользователей привязаны к устройству/установкеДанные идентифицированных пользователей сохраняются на всех устройствах и сессиях

Анонимные пользователи

Если у вас нет серверной аутентификации, никакой дополнительной обработки аутентификации в коде приложения не требуется:

  1. Когда SDK активируется при первом запуске приложения, Adapty создаёт новый профиль для пользователя.
  2. Когда пользователь совершает покупку в приложении, она привязывается к его профилю Adapty и аккаунту в сторе.
  3. Когда пользователь переустанавливает приложение или устанавливает его на новом устройстве, Adapty создаёт новый пустой профиль при активации.
  4. Если пользователь ранее совершал покупки в вашем приложении, по умолчанию они автоматически синхронизируются из App Store при активации SDK.

Восстановление из резервной копии работает иначе, чем переустановка. По умолчанию при восстановлении из резервной копии SDK сохраняет кешированные данные и не создаёт новый профиль. Вы можете настроить это поведение с помощью параметра clearDataOnBackup. Подробнее.

Идентифицированные пользователи

  • Если у профиля ещё нет customer user ID (то есть пользователь не вошёл в систему), при отправке customer user ID он будет привязан к этому профилю.
  • Если это переустановка, повторный вход или установка на новом устройстве, и вы уже отправляли customer user ID этого пользователя ранее, новый профиль не создаётся — вместо этого происходит переключение на существующий профиль, связанный с данным customer user ID.

У вас есть два способа идентифицировать пользователей в приложении:

  • При входе/регистрации: Если пользователи входят в систему после запуска приложения, вызовите identify() с customer user ID при аутентификации.

  • При активации SDK: Если customer user ID уже сохранён на момент запуска приложения, передайте его при вызове activate().

По умолчанию, когда Adapty получает покупку от Customer User ID, который в данный момент связан с другим Customer User ID, уровень доступа становится общим — таким образом, оба профиля получают платный доступ. Вы можете настроить это поведение так, чтобы платный доступ передавался от одного профиля другому, или полностью отключить совместный доступ. Подробнее — в статье.

identify-diagram.webp

В момент входа или регистрации

Если вы идентифицируете пользователей после запуска приложения (например, после входа в аккаунт или регистрации), используйте метод identify, чтобы задать их customer user ID.

  • Если вы раньше не использовали этот customer user ID, Adapty автоматически привяжет его к текущему профилю.
  • Если вы уже использовали этот customer user ID для идентификации пользователя, Adapty переключится на работу с профилем, связанным с этим customer user ID.

При создании customer user ID сохраните его вместе с данными пользователя, чтобы отправлять тот же ID при входе с новых устройств или переустановке приложения.

Всегда используйте await для identify перед вызовом других методов SDK. Конкурентные вызовы приводят к ошибке #3006 profileWasChanged или обращаются к анонимному профилю. См. Порядок вызовов в Capacitor SDK.

try {
  await adapty.identify({ customerUserId: "YOUR_USER_ID" });
  // successfully identified
} catch (error) {
  // handle the error
}

При активации SDK

Если вы уже знаете customer user ID на момент активации SDK, можно передать его сразу в методе activate — тогда отдельно вызывать identify не нужно.

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

Чтобы исключить созданные пустые профили из аналитики дашборда, перейдите в App settings и настройте Installs definition for analytics.

await adapty.activate({
  apiKey: "YOUR_PUBLIC_SDK_KEY",
  params: {
    customerUserId: "YOUR_USER_ID"
  }
});

Выход пользователей из системы

Если в приложении есть кнопка выхода, используйте метод logout. При этом для пользователя создаётся новый анонимный ID профиля.

try {
  await adapty.logout();
  // successful logout
} catch (error) {
  // handle the error
}

Для повторного входа пользователя в приложение используйте метод identify.

Разрешение покупок без входа в систему

Если пользователи могут совершать покупки как до, так и после входа в приложение, никаких дополнительных настроек не требуется: Вот как это работает:

  1. Когда незалогиненный пользователь совершает покупку, Adapty привязывает её к анонимному идентификатору профиля.
  2. Когда пользователь входит в аккаунт, Adapty переключается на работу с его идентифицированным профилем.
    • Если customer user ID уже существует (уже привязан к профилю), Adapty автоматически синхронизирует транзакции.
    • Если customer user ID новый (например, покупка была сделана до регистрации), Adapty присваивает его текущему профилю, сохраняя всю историю покупок.