Управление пользователем
Перед открытием чата в SDK обязательно должен быть установлен пользователь, для которого нужно открыть чат. Также может возникнуть необходимость этого пользователя удалить, например, при сбросе пользователем регистрации в приложении.
Для установки пользователя и управления им, в SDK есть несколько методов:
Установка пользователя
Метод для установки пользователя чата в ChatCenterUI SDK:
func authorize(user: ChatUser, auth: ChatAuth = ChatAuth())
Вызывается до открытия экрана чата, в момент, когда в родительском приложении становится известен пользователь (например, после ввода пин‑кода в банковском приложении).
Параметры:
user: ОбъектChatUser, содержащий информацию о пользователе. (обязательный параметр)auth: Настройки авторизации (если используется кастомный способ, это обговаривается при интеграции).
Пример использования:
// Создание модели пользователя
let chatUser = ChatUser(identifier: "user_uuid",
name: "Иван Иванов",
data: ["email": "ivan.ivanov@example.ru"])
// Установка пользователя в СДК
chatCenterSDK.authorize(user: chatUser)
Обновление данных пользователя
Метод для обновления данных пользователя после авторизации:
func updateData(data: [String: String]?)
Обновляет данные пользователя. Обновлённые данные будут отправлены на сервер при следующем подключении к чату.
Используется, когда данные пользователя стали известны или изменились уже после вызова authorize — например, пользователь заполнил профиль, сменил email, или приложение получило дополнительные сведения асинхронно.
Параметры:
data: Словарь[String: String]?с произвольными атрибутами пользователя. Передайтеnilдля очистки данных.
Пример использования:
// 1. Создание и авторизация пользователя с базовыми данными
let chatUser = ChatUser(identifier: "user_uuid",
name: "Иван Иванов")
chatCenterSDK.authorize(user: chatUser)
// 2. Позднее — обновление данных пользователя
chatUser.updateData(data: ["email": "ivan.ivanov@example.ru",
"segment": "premium",
"city": "Москва"])
- Данные будут отправлены на сервер не сразу, а при следующем подключении к чату (открытии экрана чата или восстановлении WebSocket-соединения).
- Метод можно вызывать на
let-привязкеChatUser— мутации хранятся внутри SDK по ссылке.
Предзаполнение поля ввода
Метод для установки предварительного текста в поле ввода сообщения:
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
Выполняет выход пользователя из SDK, очищая данные текущей сессии. После вызова этого метода для открытия чата потребуется повторная авторизация (через authorize).
Выбрасывает: Ошибки, если произошла проблема при логауте.
Пример использования:
do {
try chatCenterSDK?.logout()
// Пользователь успешно вышел
} catch {
print("Ошибка при выходе: \(error)")
}
Удаление пользователя
В случае необходимости локального удаления пользователя (например, пользователь выходит из авторизационной зоны на экран ввода пин‑кода) можно использовать метод:
func deauthorizeUser()
Он удаляет текущего активного пользователя и закрывает подключения к серверу. В этом случае из SDK не будет обращений к серверу до следующей авторизации. Перед повторным открытием чата необходимо авторизовать нового пользователя через метод authorize.
Пример использования:
chatCenterSDK?.deauthorizeUser()