Управление пользователем
Перед открытием чата в SDK обязательно должен быть установлен пользователь, для которого нужно открыть чат. Также может возникнуть необходимость этого пользователя удалить, например, при сбросе пользователем регистрации в приложении.
Для установки пользователя и управления им, в SDK есть несколько методов:
Авторизация пользователя
Метод для авторизации пользователя чата в ChatCenterUI SDK:
func authorize(user: ChatUser, auth: ChatAuth = ChatAuth())
Вызывается до открытия экрана чата, в момент, когда в родительском приложении становится известен пользователь (например, после ввода пин‑кода в банковском приложении).
Параметры:
user: ОбъектChatUser, содержащий информацию о пользователе. (обязательный параметр)auth:ChatAuth. Настройки кастомной авторизации (опционально, обговаривается при интеграции).
Поле identifier объекта ChatUser должно быть:
- Уникальным — один ID соответствует ровно одному пользователю
- Постоянным — не меняется при переустановке приложения или смене сессии
- Устойчивым к подбору — не используйте номера телефонов, email и другие публично известные данные
Если использование таких данных неизбежно — обязательно применяйте RSA-шифрование. По вопросам шифрования: support@edna.ru
Параметры ChatAuth
| Параметр | Тип | Описание |
|---|---|---|
token | String? | Токен авторизации |
scheme | String? | Схема авторизации |
method | ChatAuthMethod | Способ передачи: .headers (по умолчанию) или .cookies |
signature | String? | Подпись |
isEncrypted | Bool | Используется ли шифрование подписи (по умолчанию 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.
В отличие от logout(), метод deauthorizeUser() не отписывает устройство от пуш-уведомлений на сервере. Пуши продолжат приходить до вызова logout() или до истечения сессии на сервере.
Пример использования:
chatCenterSDK?.deauthorizeUser()
Связанные разделы
- Отображение чата — открытие чата после авторизации
- Внедрение в жизненный цикл — полная схема интеграции
- Сообщения и счётчик непрочитанных — отправка сообщений и счётчик
- Справочник ошибок — ошибки
ChatCenterUIError