Справочник ошибок
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:) перед отправкой |
.webSocketNotActive | WebSocket-соединение неактивно | Чат закрыт и 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. Указывайте её при обращении в поддержку.
Связанные разделы
- Настройки SDK — параметры
keepSocketActiveи другие - Настройки логирования — включение логов для отладки
- Сообщить об ошибке — как подготовить отчёт для поддержки
- Сообщения и счётчик непрочитанных — программная отправка и получение сообщений