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

Отображение чата

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

Перед открытием чата авторизуйте пользователя:

var chatUser = ChatUser(identifier: "Идентификатор", name: "ФИО")

chatCenterSDK.authorize(user: chatUser)
Дополнительные данные пользователя

Если данные известны сразу — передайте их в конструктор: ChatUser(identifier:name:data:) принимает data: [String: String]? для отображения в АРМ оператора.

Если данные становятся известны позже — обновите через chatUser.updateData(data:). Метод помечен mutating, поэтому chatUser должна быть объявлена как var. Подробнее — в разделе Управление пользователем.

Кастомная авторизация

Для интеграций с собственным механизмом авторизации authorize принимает второй параметр auth: ChatAuth (по умолчанию — ChatAuth()). Параметры обговариваются при интеграции — см. Управление пользователем.

Требования к identifier

Идентификатор должен быть уникальным, постоянным и устойчивым к подбору — избегайте использования номеров телефонов, email и других идентификаторов, позволяющих однозначно идентифицировать пользователя. Если без них не обойтись, строго применяйте RSA‑шифрование.

При возникновении вопросов обращайтесь на support@edna.ru

Предзаполнение сообщения (опционально)

Перед открытием чата можно задать текст, который будет предзаполнен в поле ввода:

chatCenterSDK.prefill(message: "Вопрос по заказу №12345")

Текст подставляется однократно при следующем вызове getChat().

Открытие чата

Получите контроллер чата методом getChat() — он throws, поэтому вызывайте в do/catch:

do {
let chatController = try chatCenterSDK.getChat()
navigationController?.pushViewController(chatController, animated: true)
} catch {
// В реальном приложении используйте свой логгер вместо print
print("Не удалось открыть чат: \(error)")
}

Альтернативный вариант через Result для отдельной обработки success/failure:

let result = Result { try chatCenterSDK.getChat() }

switch result {
case let .success(chatController):
navigationController?.pushViewController(chatController, animated: true)
case let .failure(error):
// Обработка ошибки (например, пользователь не авторизован)
print("error: \(error)")
}

Открытие по пуш-уведомлению

getChat(userInfo:) принимает payload пуш-уведомления и открывает чат с привязкой к нему:

do {
let chatController = try chatCenterSDK.getChat(userInfo: pushUserInfo)
navigationController?.pushViewController(chatController, animated: true)
} catch {
print("Не удалось открыть чат: \(error)")
}

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

Каждый вызов getChat() возвращает новый контроллер

SDK создаёт новый UIViewController при каждом вызове. Не вызывайте getChat() повторно для уже отображённого экрана — новый контроллер становится активным получателем обновлений, а старый перестаёт получать события.

Навигация наследуется от контейнера

Элементы навигации в чате используются из родительского контейнера, поэтому помещайте контроллер в собственный UINavigationController (или создайте отдельный для экрана чата).

Что дальше