Идентификация пользователя в 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, что в других каналах. Как отправлять события.