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

Справочник ошибок

SDK использует типизированные ошибки Swift для информирования о проблемах. Все ошибки делятся на две категории: ошибки работы с чатом и ошибки отправки сообщений.

Ошибки чата (ChatCenterUIError)

Выбрасываются методами getChat(), logout(), getUnreadMessagesCount() и handleNotification().

ОшибкаОписаниеПричинаРешение
.userNotAuthorizedПользователь не авторизованМетод вызван до authorize(user:) или после logout()/deauthorizeUser()Вызовите authorize(user:) перед использованием метода
.chatNotOpenedЭкран чата не открытhandleNotification(userInfo:) вызван, когда чат не отображается на экранеЭто ожидаемое поведение. Используйте getChat(userInfo:) для открытия чата с контекстом уведомления. Подробнее — в разделе Уведомления

Какие методы выбрасывают ChatCenterUIError

МетодВозможные ошибки
getChat(userInfo:).userNotAuthorized
logout().userNotAuthorized
getUnreadMessagesCount(completion:).userNotAuthorized
handleNotification(userInfo:).chatNotOpened

Пример обработки

do {
let chatController = try chatCenterSDK.getChat()
navigationController?.pushViewController(chatController, animated: true)
} catch ChatCenterUIError.userNotAuthorized {
// Пользователь не авторизован — показать экран входа
showLoginScreen()
} catch {
print("Неожиданная ошибка: \(error)")
}
do {
try chatCenterSDK.handleNotification(userInfo: userInfo)
} catch ChatCenterUIError.chatNotOpened {
// Чат не открыт — открываем с контекстом уведомления
let chatController = try chatCenterSDK.getChat(userInfo: userInfo)
navigationController?.pushViewController(chatController, animated: true)
} catch {
print("Ошибка обработки уведомления: \(error)")
}

Ошибки отправки сообщений (ChatCenterUISendMessageError)

Выбрасываются методом send(message:).

ОшибкаОписаниеПричинаРешение
.userNotAuthorizedПользователь не авторизованauthorize() не был вызванВызовите authorize(user:) перед отправкой
.webSocketNotActiveWebSocket-соединение неактивноЧат закрыт и keepSocketActive = falseСм. три варианта решения ниже
.chatNotOpenedЧат не был открытgetChat() не вызывался в текущей сессииУбедитесь, что экран чата отображается
.messageNotSentНе удалось отправить сообщениеВременная ошибка сервера или сетиПовторите попытку через несколько секунд
.messageIsEmptyТекст сообщения пустойПередана пустая строка в .text("")Проверьте текст перед отправкой
.messageTooLongТекст превышает 4000 символовСлишком длинное сообщениеОбрежьте сообщение до 4000 символов
.messageImageTooLargeИзображение превышает допустимый размерПревышен серверный лимит на размер файлаУменьшите разрешение изображения перед отправкой
.messageImageCompressionErrorОшибка сжатия изображенияНекорректный или повреждённый UIImageПроверьте корректность объекта UIImage

Пример обработки

do {
try chatCenterSDK.send(message: .text("Здравствуйте"))
} catch ChatCenterUISendMessageError.webSocketNotActive {
// WebSocket не активен — сохранить сообщение для отправки позже
pendingMessages.append(message)
} catch ChatCenterUISendMessageError.messageTooLong {
// Обрезать и повторить
let trimmed = String(text.prefix(4000))
try? chatCenterSDK.send(message: .text(trimmed))
} catch ChatCenterUISendMessageError.messageNotSent {
// Временная ошибка — повторить
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
try? chatCenterSDK.send(message: message)
}
} catch {
print("Ошибка отправки: \(error)")
}

Связь .webSocketNotActive с keepSocketActive

По умолчанию WebSocket-соединение активно только пока открыт экран чата. При программной отправке через send(message:) без открытого чата вы получите ошибку .webSocketNotActive.

Решения:

ПодходНастройкаКогда использовать
Постоянное соединениеchatConfig.keepSocketActive = trueФоновая отправка, счётчик непрочитанных
Соединение на время сессииchatConfig.keepSocketActiveDuringOperatorSession = trueУведомления в рамках активного диалога
Отправка только в чатеБез дополнительных настроекЕсли фоновая отправка не нужна

Подробнее о настройках — в разделе Настройки SDK.


Диагностика ошибок

Для отладки ошибок включите логирование при инициализации SDK:

let loggerConfig = ChatLoggerConfig(logLevel: .all)
let chatCenterSDK = ChatCenterUISDK(providerUid: "...",
chatConfig: chatConfig,
loggerConfig: loggerConfig)

Логи содержат детальную информацию о сетевых запросах, состоянии WebSocket и действиях пользователя. Подробнее — в разделе Настройки логирования.

подсказка

Версию SDK можно получить программно: ChatCenterUISDK.version. Указывайте её при обращении в поддержку.

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