Идентификация пользователя в Android
Android SDK поддерживает два режима идентификации: автоматический и управляемый приложением.
Стандарт CUID на основе телефона (phone_hash)
Рекомендуемый идентификатор пользователя для LoginEvent и SignUpEvent - SHA-256 хеш нормализованного мобильного телефона.
Правила формирования:
- перед хешированием номер очищается от всех символов, кроме цифр;
- для РФ и КЗ номер приводится к формату
7XXXXXXXXXX; - для других стран используется международный формат без
+и разделителей; - хеш считается по строке в UTF-8;
- результат передается в lowercase hex;
- в
cuidTypeпередается строка"phone_hash".
Один и тот же идентификатор рекомендуется использовать во всех каналах: web, server-side API, offline import и mobile SDK.
Автоматическая идентификация
Это поведение SDK по умолчанию. Если сервер вернул uid и ses, SDK сохраняет и переиспользует их. uid сохраняется в постоянном хранилище, ses — только в памяти процесса. При Options(isReturnUserInfo = true) SDK запрашивает объект user; без него идентификаторы обновятся только если сервер всё равно вернул user.
Это означает:
- неавторизованный пользователь идентифицируется SDK автоматически;
uidиsesне нужно передавать вручную, если вы используете SDK-managed режим;- после логина рекомендуется отправить
LoginEvent, чтобы связать анонимный и авторизованный профили.
Ограничение setUser
Если приложение уже управляет идентификатором пользователя и сессии, можно задать их явно.
Пример:
GravitySDK.instance.setUser(
userId = "user-from-my-system-42",
sessionId = "session-from-my-system-xyz",
)
userId записывается в user.custom, sessionId — в user.ses. Это внешний ID приложения, а не подмена user.uid.
Ограничение 1.0.4: установленный пользователь передаётся только в /visit и /event. Публичные методы загрузки контента вызывают repository без customerUser, поэтому /choose продолжает использовать сохранённые SDK uid/ses. Для единой идентификации просмотров, событий и контента используйте автоматический режим с LoginEvent.
Выход и смена аккаунта
В публичном API нет logout, resetUser или setUser(null). Повторная инициализация SDK не очищает singleton repository и его кэш идентификаторов. Если нужен полный сброс профиля при смене аккаунта, согласуйте сценарий интеграции.
Вход в систему (LoginEvent)
val loginEvent = LoginEvent(
cuid = sha256Hex(normalizePhone(rawPhoneNumber)),
cuidType = "phone_hash",
)
Поле hashedEmail опционально. Если email не является обязательным в вашем процессе регистрации или логина, его можно не передавать.
Для LoginEvent рекомендуется использовать единый идентификатор phone_hash. Если проект использует другой cuid, он должен быть согласован и одинаково использоваться во всех каналах интеграции.
Отправляйте login/signup после успешной авторизации, с тем же CUID, что в других каналах. Как отправлять события.