Идентификация пользователей в Flutter SDK
Этот гайд для тех, у кого есть собственная система аутентификации. Здесь вы узнаете, как работать с профилями пользователей в Adapty, чтобы они соответствовали вашей системе аутентификации.
То, как вы управляете покупками пользователей, зависит от модели аутентификации в вашем приложении:
- Если приложение не использует серверную аутентификацию и не хранит данные пользователей, см. раздел об анонимных пользователях.
- Если приложение использует (или будет использовать) серверную аутентификацию, см. раздел об идентифицированных пользователях. Ключевые понятия:
- Профили — это сущности, необходимые для работы SDK. Adapty создаёт их автоматически.
- Они могут быть анонимными (без customer user ID) или идентифицированными (с customer user ID).
- Вы передаёте customer user ID, чтобы связать профили в Adapty с вашей внутренней системой аутентификации.
Вот в чём разница между анонимными и идентифицированными пользователями:
| Анонимные пользователи | Идентифицированные пользователи | |
|---|---|---|
| Управление покупками | Восстановление покупок на уровне стора | Сохранение истории покупок на всех устройствах через customer user ID |
| Управление профилем | Новый профиль при каждой переустановке | Один и тот же профиль во всех сессиях и на всех устройствах |
| Хранение данных | Данные анонимных пользователей привязаны к установке приложения | Данные идентифицированных пользователей сохраняются между установками приложения |
Анонимные пользователи
Если у вас нет серверной аутентификации, вам не нужно обрабатывать аутентификацию в коде приложения:
- Когда SDK активируется при первом запуске приложения, Adapty создаёт новый профиль для пользователя.
- Когда пользователь совершает покупку в приложении, она привязывается к его профилю в Adapty и его аккаунту в сторе.
- Когда пользователь переустанавливает приложение или устанавливает его на новое устройство, Adapty создаёт новый анонимный профиль при активации.
- Если пользователь ранее совершал покупки в вашем приложении, по умолчанию они автоматически синхронизируются из App Store при активации SDK. Итак, при работе с анонимными пользователями новые профили создаются при каждой установке — но это не проблема, поскольку в аналитике Adapty можно настроить, что считать новой установкой.
Для анонимных пользователей нужно считать установки по идентификаторам устройств. В таком случае каждая установка приложения на устройство считается отдельной установкой, включая переустановки.
Идентификация пользователей
Есть два способа идентифицировать пользователей в приложении:
-
При входе/регистрации: Если пользователи входят уже после запуска приложения, вызовите
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) должны быть уникальными для каждого пользователя. Если указать одно и то же значение, все пользователи будут считаться одним.
Всегда используйте await для identify перед вызовом других методов SDK. Параллельные вызовы приводят к ошибке #3006 profileWasChanged или работе с анонимным профилем. См. Порядок вызовов во Flutter SDK.
try {
await Adapty().identify(customerUserId); // Уникален для каждого пользователя
} on AdaptyError catch (adaptyError) {
// handle the error
} catch (e) {
}
При активации SDK
Если вы уже знаете customer user ID в момент активации SDK, передайте его прямо в метод activate — вызывать identify отдельно не нужно.
Если вы знаете customer user ID, но передаёте его только после активации, это значит, что при активации Adapty создаст новый анонимный профиль и переключится на существующий лишь после вызова identify.
Вы можете передать как существующий customer user ID (ранее уже использованный), так и новый. Если передать новый, то профиль, созданный при активации, будет автоматически привязан к этому customer user ID.
По умолчанию создание анонимных профилей не влияет на дашборды аналитики, так как установки считаются по идентификаторам устройств. Идентификатор устройства соответствует одной установке приложения из стора и пересоздаётся только после переустановки. Он не зависит от того, является ли установка первой или повторной, и от того, используется ли существующий пользовательский идентификатор.
Создание профиля (при активации SDK или выходе из системы), вход в систему или обновление приложения без переустановки не генерируют дополнительные события установки. Если вы хотите считать установки по уникальным пользователям, а не по устройствам, перейдите в App settings и настройте Installs definition for analytics.
try {
await Adapty().activate(
configuration: AdaptyConfiguration(apiKey: 'YOUR_API_KEY')
..withCustomerUserId(YOUR_CUSTOMER_USER_ID) // Customer user IDs must be unique for each user. If you hardcode the parameter value, all users will be considered as one.
);
} catch (e) {
// handle the error
}
Выход пользователей из системы
Если в вашем приложении есть кнопка выхода, используйте метод logout.
Выход из системы создаёт новый анонимный профиль для пользователя.
try {
await Adapty().logout();
} on AdaptyError catch (adaptyError) {
// handle the error
} catch (e) {
// handle unknown error
}
Чтобы снова авторизовать пользователя в приложении, используйте метод identify.
Разрешить покупки без входа
Если ваши пользователи могут совершать покупки как до, так и после входа в приложение, необходимо убедиться, что после входа они сохранят доступ:
- Когда неавторизованный пользователь совершает покупку, Adapty привязывает её к анонимному идентификатору профиля.
- Когда пользователь входит в аккаунт, Adapty переключается на работу с идентифицированным профилем.
- Если это новый customer user ID (например, покупка была совершена до регистрации), Adapty присваивает customer user ID текущему профилю, и вся история покупок сохраняется.
- Если это существующий customer user ID (customer user ID уже привязан к профилю), после смены профиля нужно получить актуальный уровень доступа. Для этого можно либо вызвать
getProfileсразу после идентификации, либо подписаться на обновления профиля, чтобы данные синхронизировались автоматически.
Дальнейшие шаги
Поздравляем! Вы реализовали логику встроенных покупок в своём приложении! Желаем вам успехов в монетизации! Чтобы получить от Adapty ещё больше пользы, изучите эти темы:
- Тестирование: Убедитесь, что всё работает как ожидается
- Онбординги: Вовлекайте пользователей с помощью онбордингов и повышайте удержание
- Интеграции: Интегрируйтесь с сервисами маркетинговой атрибуции и аналитики всего в одну строку кода
- Настройка пользовательских атрибутов профиля: Добавляйте пользовательские атрибуты к профилям, создавайте сегменты и запускайте A/B-тесты или показывайте разные пейволы разным пользователям