Перейти к основному содержимому
Версия: 5.8.2

Управление пользователем

Перед открытием чата в SDK обязательно должен быть установлен пользователь, для которого нужно открыть чат. Также может возникнуть необходимость этого пользователя удалить, например, при сбросе пользователем регистрации в приложении.

Для установки пользователя и управления им, в SDK есть несколько методов:

Авторизация пользователя

Метод для авторизации пользователя чата в ChatCenterUI SDK:

func authorize(user: ChatUser, auth: ChatAuth = ChatAuth())

Вызывается до открытия экрана чата, в момент, когда в родительском приложении становится известен пользователь (например, после ввода пин‑кода в банковском приложении).

Параметры:

  • user: Объект ChatUser, содержащий информацию о пользователе. (обязательный параметр)
  • auth: ChatAuth. Настройки кастомной авторизации (опционально, обговаривается при интеграции).
Требования к идентификатору пользователя

Поле identifier объекта ChatUser должно быть:

  • Уникальным — один ID соответствует ровно одному пользователю
  • Постоянным — не меняется при переустановке приложения или смене сессии
  • Устойчивым к подбору — не используйте номера телефонов, email и другие публично известные данные

Если использование таких данных неизбежно — обязательно применяйте RSA-шифрование. По вопросам шифрования: support@edna.ru

Параметры ChatAuth

ПараметрТипОписание
tokenString?Токен авторизации
schemeString?Схема авторизации
methodChatAuthMethodСпособ передачи: .headers (по умолчанию) или .cookies
signatureString?Подпись
isEncryptedBoolИспользуется ли шифрование подписи (по умолчанию false)
примечание

Параметры ChatAuth используются только при кастомной авторизации. Конкретные значения обговариваются при интеграции. По умолчанию передавать ChatAuth() не нужно — он используется автоматически.

Пример использования:

// Создание модели пользователя
let chatUser = ChatUser(identifier: "user_uuid",
name: "Иван Иванов",
data: ["email": "ivan.ivanov@example.ru"])

// Авторизация пользователя в SDK
chatCenterSDK.authorize(user: chatUser)

Обновление данных пользователя

Метод для обновления данных пользователя после авторизации:

mutating func updateData(data: [String: String]?)

Обновляет данные пользователя. Обновлённые данные будут отправлены на сервер при следующем подключении к чату.

Используется, когда данные пользователя стали известны или изменились уже после вызова authorize — например, пользователь заполнил профиль, сменил email, или приложение получило дополнительные сведения асинхронно.

Параметры:

  • data: Словарь [String: String]? с произвольными атрибутами пользователя. Передайте nil для очистки данных.

Пример использования:

// 1. Создание и авторизация пользователя с базовыми данными
var chatUser = ChatUser(identifier: "user_uuid",
name: "Иван Иванов")
chatCenterSDK.authorize(user: chatUser)

// 2. Позднее — обновление данных пользователя
chatUser.updateData(data: ["email": "ivan.ivanov@example.ru",
"segment": "premium",
"city": "Москва"])
примечание
  • Данные будут отправлены на сервер не сразу, а при следующем подключении к чату (открытии экрана чата или восстановлении WebSocket-соединения).
  • Метод объявлен как mutating — переменная ChatUser должна быть var, не let.

Предзаполнение поля ввода

Метод для установки предварительного текста в поле ввода сообщения:

func prefill(message: String)

Устанавливает текст, который будет подставлен в поле ввода при следующем открытии экрана чата. Текст подставляется однократно — при первом вызове getChat() после вызова prefill, после чего сбрасывается.

Используется, когда нужно предложить пользователю готовый текст сообщения — например, при переходе в чат из карточки товара, раздела помощи или по deeplink.

Пример использования:

// Установка предзаполненного сообщения
chatCenterSDK.prefill(message: "Здравствуйте, у меня вопрос по заказу №12345")

// При следующем открытии чата текст будет в поле ввода
let chatController = try chatCenterSDK.getChat()
navigationController?.pushViewController(chatController, animated: true)
примечание
  • Текст подставляется однократно — при следующем открытии чата. Повторный вызов getChat() уже не будет содержать этот текст.
  • Передача пустой строки сбрасывает предзаполненный текст.
  • Повторный вызов prefill(message:) перезаписывает предыдущее значение.
  • При вызове logout() предзаполненный текст также сбрасывается.

Логаут пользователя

В случае сброса пользователем регистрации в приложении необходимо также вызвать логаут в SDK (например, чтобы отписать его от уведомлений о новых сообщениях в чате). Для этого нужно вызвать метод:

func logout() throws(ChatCenterUIError)

Выполняет выход пользователя из SDK, очищая данные текущей сессии. После вызова этого метода для открытия чата потребуется повторная авторизация (через authorize).

Выбрасывает: ChatCenterUIError.userNotAuthorized, если пользователь не был авторизован.

Пример использования:

do {
try chatCenterSDK?.logout()
// Пользователь успешно вышел
} catch {
print("Ошибка при выходе: \(error)")
}

Удаление пользователя

В случае необходимости локального удаления пользователя (например, пользователь выходит из авторизационной зоны на экран ввода пин‑кода) можно использовать метод:

func deauthorizeUser()

Он удаляет текущего активного пользователя и закрывает подключения к серверу. В этом случае из SDK не будет обращений к серверу до следующей авторизации. Перед повторным открытием чата необходимо авторизовать нового пользователя через метод authorize.

warning

В отличие от logout(), метод deauthorizeUser() не отписывает устройство от пуш-уведомлений на сервере. Пуши продолжат приходить до вызова logout() или до истечения сессии на сервере.

Пример использования:

chatCenterSDK?.deauthorizeUser()

Связанные разделы