Идентификация пользователей в Kotlin Multiplatform 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 можно настроить, что считать новой установкой.
Для анонимных пользователей установки нужно считать по идентификаторам устройств. В этом случае каждая установка приложения на устройство считается отдельной установкой, включая переустановки.
Резервное восстановление работает иначе, чем переустановка. По умолчанию при восстановлении из резервной копии SDK сохраняет кешированные данные и не создаёт новый профиль. Это поведение можно настроить с помощью параметра withAppleClearDataOnBackup. Подробнее.
Идентификация пользователей
У вас есть два способа идентифицировать пользователей в приложении:
-
При входе/регистрации: Если пользователи входят в систему после запуска приложения, вызовите
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) должны быть уникальными для каждого пользователя. Если вы укажете фиксированное значение, все пользователи будут считаться одним.
Дождитесь завершения identify (в колбэке onSuccess), прежде чем вызывать другие методы SDK. Конкурентные вызовы могут попасть на анонимный профиль. См. Порядок вызовов в Kotlin Multiplatform SDK.
Adapty.identify("YOUR_USER_ID") // Уникален для каждого пользователя
.onSuccess {
// successful identify
}
.onError { error ->
// handle the error
}
При активации SDK
Если вы уже знаете идентификатор пользователя на момент активации SDK, передайте его прямо в методе activate — вызывать identify отдельно не нужно.
Если идентификатор пользователя известен, но вы задаёте его только после активации, то при старте SDK Adapty создаст новый анонимный профиль и переключится на существующий лишь после вызова identify.
Вы можете передать как существующий customer user ID (тот, который вы уже использовали ранее), так и новый. Если передать новый, профиль, созданный при активации, будет автоматически привязан к этому customer user ID.
По умолчанию создание анонимных профилей не влияет на аналитику дашборда, поскольку установки считаются на основе идентификаторов устройств. A device ID представляет собой одну установку приложения из стора на устройстве и regenerated only after the app is reinstalled. Он не зависит от того, является ли это первой или повторной установкой, и от того, используется ли существующий customer user ID.
Создание профиля (при активации SDK или выходе из системы), вход в систему или обновление приложения без его переустановки не генерирует дополнительных событий установки. Если вы хотите считать установки по уникальным пользователям, а не устройствам, перейдите в App settings и настройте Installs definition for analytics.
AdaptyConfig.Builder("PUBLIC_SDK_KEY")
.withCustomerUserId("user123") // Customer user IDs must be unique for each user. If you hardcode the parameter value, all users will be considered as one.
.build()
Выход пользователей из системы
Если в вашем приложении есть кнопка выхода, используйте метод logout.
Выход из аккаунта создаёт новый анонимный профиль для пользователя.
Adapty.logout()
.onSuccess {
// successful logout
}
.onError { error ->
// handle the error
}
Чтобы снова войти в приложение, используйте метод identify.
Разрешите покупки без входа
Если пользователи могут совершать покупки как до, так и после входа в приложение, необходимо убедиться, что после авторизации они сохранят доступ к своим покупкам:
- Когда пользователь, не вошедший в систему, совершает покупку, Adapty привязывает её к анонимному ID профиля.
- Когда пользователь входит в свой аккаунт, Adapty переключается на работу с идентифицированным профилем.
- Если это новый customer user ID (например, покупка была совершена до регистрации), Adapty присваивает customer user ID текущему профилю, и вся история покупок сохраняется.
- Если это существующий customer user ID (customer user ID уже привязан к профилю), после переключения профиля нужно получить актуальный уровень доступа. Можно либо вызвать
getProfileсразу после идентификации, либо подписаться на обновления профиля — тогда данные будут синхронизироваться автоматически.
Дальнейшие шаги
Поздравляем! Вы реализовали логику встроенных покупок в своём приложении! Желаем вам успехов в монетизации! Чтобы получить от Adapty ещё больше, изучите следующие темы:
- Тестирование: убедитесь, что всё работает как ожидается
- Интеграции: подключите сервисы маркетинговой атрибуции и аналитики буквально в одну строку кода
- Настройка атрибутов профиля: добавляйте пользовательские атрибуты к профилям, создавайте сегменты и запускайте A/B-тесты или показывайте разные пейволы разным пользователям