Идентификация пользователей в Unity SDK
Adapty создаёт внутренний ID профиля для каждого пользователя. Однако если у вас есть собственная система аутентификации, вам следует задать свой Customer User ID. Вы можете находить пользователей по Customer User ID в разделе Профили, а также использовать его в серверном API — он будет передаваться во все интеграции.
Указание идентификатора пользователя при конфигурации
Если у вас есть ID пользователя в момент конфигурации, просто передайте его как параметр customerUserId в метод .activate():
using UnityEngine;
using AdaptySDK;
var builder = new AdaptyConfiguration.Builder("YOUR_API_KEY")
.SetCustomerUserId("YOUR_USER_ID");
Adapty.Activate(builder.Build(), (error) => {
if (error != null) {
// handle the error
return;
}
});
Хотите увидеть реальный пример интеграции Adapty SDK в мобильное приложение? Посмотрите наши примеры приложений — они демонстрируют полную настройку: отображение пейволов, совершение покупок и другие базовые функции.
Задание customer user ID после инициализации
Если при настройке SDK у вас не было ID пользователя, его можно задать позже в любой момент с помощью метода .identify(). Чаще всего этот метод используется после регистрации или авторизации, когда пользователь переходит из анонимного состояния в аутентифицированное.
Adapty.Identify("YOUR_USER_ID", (error) => {
if(error == null) {
// successful identify
}
});
Параметры запроса:
- Customer User ID (обязательный): строковый идентификатор пользователя.
Повторная отправка важных данных пользователя В некоторых случаях, например когда пользователь повторно входит в свой аккаунт, серверы Adapty уже располагают информацией об этом пользователе. В таких сценариях Adapty SDK автоматически переключится на работу с новым пользователем. Если вы передавали какие-либо данные анонимному пользователю — например, пользовательские атрибуты или атрибуцию из сторонних сетей — необходимо повторно отправить эти данные для идентифицированного пользователя.
Также важно учитывать, что после идентификации пользователя следует заново запросить все пейволы и продукты, поскольку данные нового пользователя могут отличаться.
Выход и вход пользователя
Вы можете выйти из аккаунта пользователя в любой момент, вызвав метод .logout():
Adapty.Logout((error) => {
if(error == null) {
// successful logout
}
});
После этого можно снова войти, используя метод .identify().
Назначение appAccountToken (iOS)
appAccountToken — это UUID, который позволяет связать транзакции App Store с внутренним идентификатором пользователя.
StoreKit привязывает этот токен к каждой транзакции, поэтому ваш бэкенд может сопоставить данные App Store с конкретными пользователями.
Используйте стабильный UUID, сгенерированный для каждого пользователя, и применяйте его для одного и того же аккаунта на всех устройствах. Это гарантирует, что покупки и уведомления App Store будут правильно привязаны к нужному пользователю. Токен можно задать двумя способами — при активации SDK или при идентификации пользователя.
appAccountToken необходимо всегда передавать вместе с customerUserId.
Если передать только токен, он не будет включён в транзакцию.
using UnityEngine;
using AdaptySDK;
using System;
// During configuration:
var appAccountToken = new Guid("YOUR_APP_ACCOUNT_TOKEN");
var builder = new AdaptyConfiguration.Builder("YOUR_API_KEY")
.SetCustomerUserId("YOUR_USER_ID", appAccountToken);
Adapty.Activate(builder.Build(), (error) => {
if (error != null) {
// handle the error
return;
}
});
// Or when identifying users
Adapty.Identify("YOUR_USER_ID", appAccountToken, (error) => {
if (error == null) {
// successful identify
}
});
Установка обфусцированных идентификаторов аккаунта (Android)
Google Play требует обфусцированные идентификаторы аккаунта в ряде случаев — для защиты конфиденциальности и безопасности пользователей. Эти идентификаторы позволяют Google Play отслеживать покупки, не раскрывая личные данные пользователей, что особенно важно для предотвращения мошенничества и аналитики.
Они могут понадобиться, если приложение работает с чувствительными пользовательскими данными или если вы обязаны соблюдать определённые требования по конфиденциальности. Обфусцированные идентификаторы позволяют Google Play отслеживать покупки, не раскрывая реальные пользовательские идентификаторы.
using UnityEngine;
using AdaptySDK;
// During configuration:
var builder = new AdaptyConfiguration.Builder("YOUR_API_KEY")
.SetCustomerUserId("YOUR_USER_ID", null, "YOUR_OBFUSCATED_ACCOUNT_ID");
Adapty.Activate(builder.Build(), (error) => {
if (error != null) {
// handle the error
return;
}
});
// Or when identifying users
Adapty.Identify("YOUR_USER_ID", null, "YOUR_OBFUSCATED_ACCOUNT_ID", (error) => {
if (error == null) {
// successful identify
}
});
Обнаружение пользователей на разных устройствах
При активации SDK он автоматически считывает существующие права пользователя из StoreKit (iOS) или Google Play Billing (Android) и синхронизирует их с бэкендом Adapty. Активная подписка появляется в профиле Adapty без вызова restorePurchases со стороны приложения.
Что не происходит автоматически — так это распознавание того, что профиль на новом устройстве принадлежит тому же пользователю, что и профиль на исходном устройстве. Adapty сопоставляет профили по Customer User ID, поэтому непрерывность идентификации зависит от того, что вы используете в качестве CUID.
Что Adapty может определить между устройствами
| Ваша настройка | Что Adapty определяет | Что нужно сделать |
|---|---|---|
Customer User ID = device_id (без входа в аккаунт) | Новое устройство получает другой CUID и, следовательно, другой профиль. Подписка синхронизируется с новым профилем через событие Access level updated, но subscription_started не срабатывает — новый профиль считается наследником исходной покупки. Аналитика, основанная на subscription_started, будет занижать количество возвращающихся пользователей. | Используйте стабильный идентификатор аккаунта в качестве Customer User ID, чтобы вернувшийся пользователь соответствовал существующему профилю на разных устройствах. |
| Customer User ID = стабильный идентификатор аккаунта (вход на каждом устройстве) | SDK автоматически синхронизирует подписку при activate(), а identify() сопоставляет существующий профиль по CUID. | Никаких дополнительных действий не требуется — и идентификация, и подписка разрешаются автоматически. |
| Наследник Apple Family Sharing | Член семьи получает подписку только через событие Access level updated — subscription_started не срабатывает. | Отслеживайте событие Access level updated. Полную матрицу событий см. в разделе Apple Family Sharing. |
| Один аккаунт Apple/Google, разные пользователи внутри приложения | Первый профиль, зафиксировавший покупку, становится родительским. Последующие профили видят подписку через цепочку наследования с одним событием Access level updated. | Требуйте входа в аккаунт, затем выберите режим совместного использования, подходящий для вашей модели. |
Восстановление покупок на новом устройстве
Добавьте кнопку «Восстановить покупки», инициируемую пользователем, на свой пейвол. Apple App Review (руководство 3.1.1) её требует, и она служит запасным вариантом на случай, если автоматическая синхронизация пропустит граничный случай. Кнопка должна вызывать restorePurchases в вашем SDK.
Программный вызов restorePurchases при первом запуске не нужен для обычного использования — SDK уже выполняет аналогичную операцию при activate(). Программные вызовы стоит использовать только для принудительной проверки чека, например при отладке отсутствующего доступа после завершения activate().