Идентификация пользователя в iOS
SDK поддерживает два режима идентификации: SDK-managed и ручной.
Стандарт CUID на основе телефона (phone_hash)
Для LoginEvent и SignUpEvent рекомендуется использовать единый идентификатор пользователя — SHA-256 хеш нормализованного телефона.
Правила:
- номер очищается от всех символов, кроме цифр;
- для РФ и КЗ номер приводится к формату
7XXXXXXXXXX; - хеш считается по UTF-8 строке;
- результат передается в lowercase hex;
- в
LoginEvent.cuidTypeиспользуется строка"phone_hash".
SDK-managed режим
Если setUser(...) не вызывать:
uid, если он возвращён сервером, сохраняется вUserDefaults;ses, если он возвращён сервером, обновляется из ответов backend и хранится только в памяти процесса;- последующие запросы используют эти значения автоматически.
После логина рекомендуется отправить LoginEvent, чтобы связать анонимный и авторизованный профили.
Ограничение setUser
Если вам нужен внешний ID в просмотрах и событиях, задайте его явно:
GravitySDK.instance.setUser(
userId: "external-user-id",
sessionId: "session-id"
)
userId передаётся как user.custom, а не заменяет uid; sessionId задаёт user.ses. В iOS 1.0.6 эти значения используются для /visit и /event. Методы getContentBySelector, getContentByGroupSelector и getContentByCampaignId не передают ручного пользователя в repository и используют кэшированные uid/ses. Поэтому setUser не обеспечивает единую ручную идентификацию всех запросов.
Для единой идентификации просмотров, событий и контента используйте SDK-managed режим с LoginEvent. При Options(isReturnUserInfo: true) SDK запрашивает объект user; без него идентификаторы обновятся только если сервер всё равно вернул user.
Выход и смена аккаунта
В публичном API нет logout, resetUser или возврата из ручного режима через setUser(nil). Не заменяйте выход из аккаунта повторной инициализацией SDK: repository сохраняет свой кэш идентификаторов. Если нужен полный сброс профиля при смене аккаунта, согласуйте сценарий интеграции.
LoginEvent
let login = LoginEvent(
cuid: sha256PhoneHash,
cuidType: "phone_hash"
)
Отправляйте login/signup после успешной авторизации, с тем же CUID, что в других каналах. Как отправлять события.