Отображение чата
Авторизация пользователя
Перед открытием чата авторизуйте пользователя:
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 (или создайте отдельный для экрана чата).
Что дальше
- Уведомления — настройка пуш-уведомлений
- Управление пользователем — обновление данных, кастомная авторизация, логаут
- Дизайн-система — кастомизация внешнего вида чата
- Справочник ошибок — обработка ошибок
getChat()