Идентификация пользователей в Capacitor SDK
То, как вы управляете покупками пользователей, зависит от модели аутентификации в вашем приложении:
- Если приложение не использует аутентификацию на бэкенде и не хранит данные пользователей, см. раздел об анонимных пользователях.
- Если в приложении есть (или будет) аутентификация на бэкенде, см. раздел об идентифицированных пользователях.
Ключевые понятия:
- Профили — это сущности, необходимые для работы SDK. Adapty создаёт их автоматически. Они могут быть анонимными (без customer user ID) или идентифицированными (с customer user ID).
- Customer user ID — необязательные идентификаторы, которые вы создаёте, чтобы Adapty мог связать ваших пользователей с их профилями Adapty.
Вот чем отличаются анонимные и идентифицированные пользователи:
| Анонимные пользователи | Идентифицированные пользователи | |
|---|---|---|
| Управление покупками | Восстановление покупок на уровне стора | Сохранение истории покупок на всех устройствах через customer user ID |
| Управление профилем | Новый профиль при каждой переустановке | Один и тот же профиль во всех сессиях и на всех устройствах |
| Сохранность данных | Данные анонимных пользователей привязаны к устройству/установке | Данные идентифицированных пользователей сохраняются на всех устройствах и во всех сессиях |
Анонимные пользователи
Если у вас нет серверной аутентификации, вам не нужно реализовывать аутентификацию в коде приложения:
- Когда SDK активируется при первом запуске приложения, Adapty создаёт новый профиль для пользователя.
- Когда пользователь совершает покупку в приложении, она привязывается к его профилю в Adapty и аккаунту в сторе.
- Когда пользователь переустанавливает приложение или устанавливает его на новом устройстве, Adapty создаёт новый пустой профиль при активации.
- Если пользователь ранее совершал покупки в вашем приложении, по умолчанию они автоматически синхронизируются из 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, чтобы задать их 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.
Разрешить покупки без входа в систему
Если пользователи могут совершать покупки как до, так и после входа в приложение, никакой дополнительной настройки не требуется: Вот как это работает:
- Когда незарегистрированный пользователь совершает покупку, Adapty привязывает её к анонимному ID профиля.
- Когда пользователь входит в аккаунт, Adapty переключается на работу с его идентифицированным профилем.
- Если это существующий customer user ID (customer user ID уже привязан к профилю), Adapty автоматически синхронизирует транзакции.
- Если это новый customer user ID (например, покупка была совершена до регистрации), Adapty присваивает customer user ID текущему профилю, сохраняя всю историю покупок.