Решение проблем
Руководство по диагностике и устранению проблем при интеграции и работе ChatCenterUI SDK.
Для всех сценариев ниже включите ChatLoggerConfig(logLevel: .all) — без него SDK не выводит ни сетевые запросы, ни WebSocket-события (logLevel: .off — значение по умолчанию). Подробнее — в разделе Настройки логирования.
Многие наблюдаемые в SDK проблемы вызваны не кодом приложения, а конфигурацией канала на сервере. Прежде чем углубляться в чеклисты ниже, сверьтесь с АРМ:
| Симптом в SDK | Что проверить в АРМ |
|---|---|
| Пуши не приходят / приходят не из всех окружений | Подключение iOS-канала → APNs, Шаблоны пуш-уведомлений |
| Чат показывает «нерабочее время» / автоответ | Режим работы канала |
| Не приходит уведомление о сборе персональных данных, согласие, опрос | Уведомления для клиента, Уведомления о сборе ПД, Опросы клиентов |
| Тред уходит не тому агенту/боту | Сегментация тредов, Маршрутизация |
| Уведомления показываются не на всех клиентах | Уведомления в веб-чате и мобильных приложениях |
Полный обзор админки — АРМ администратора.
SDK не инициализируется
Симптомы
- Приложение падает при создании
ChatCenterUISDK - SDK создаётся, но методы не работают
Чеклист
-
Фреймворк подключён корректно?
- В
General → Frameworks and LibrariesфреймворкChatCenterUI.xcframeworkдобавлен с режимом Embed & Sign - При использовании CocoaPods проект открыт через
.xcworkspace, а не.xcodeproj
- В
-
providerUidуказан верно?- Значение получено от edna при интеграции
- Нет лишних пробелов или переносов строк
-
ChatTransportConfigсодержит корректные URL?// URL должны быть полными, с протоколом
let transport = ChatTransportConfig(
rest: "https://your-host.edna.ru",
webSocket: "wss://your-host.edna.ru/socket",
dataStore: "https://your-host.edna.ru/files"
)
// Или для облачных клиентов (без https://):
let transport = ChatTransportConfig(cloudHost: "your-host.edna.ru") -
Экземпляр SDK сохранён?
ChatCenterUISDKдолжен быть сохранён как свойство — иначе ARC освободит его сразу после выхода из метода, иdelegate, наблюдатели заUIApplication-уведомлениями и WebSocket развалятся
// Неверно — SDK освобождается после выхода из метода
func setup() {
let sdk = ChatCenterUISDK(...)
}
// Верно — SDK живёт всё время работы приложения
var chatCenterSDK: ChatCenterUISDK?
func setup() {
chatCenterSDK = ChatCenterUISDK(...)
}
Чат не загружается
Симптомы
- При вызове
getChat()выбрасывается ошибка - Экран чата показывает индикатор загрузки бесконечно
- Отображается ошибка подключения
Чеклист
-
Пользователь авторизован?
// getChat() выбросит ChatCenterUIError.userNotAuthorized если забыли:
chatCenterSDK.authorize(user: ChatUser(identifier: "user_id")) -
Сервер доступен?
- Откройте REST URL в браузере — ожидаемый ответ HTTP 200 или 401/403 (требует auth); 5xx или таймаут означают недоступность сервера
- Проверьте, что устройство/симулятор имеет доступ к сети
- При использовании VPN убедитесь, что трафик маршрутизируется корректно
-
SSL-сертификат валиден?
- Для тестовых серверов с самоподписанным сертификатом:
var networkConfig = ChatNetworkConfig()
networkConfig.sslPinning.allowUntrustedSSLCertificate = true // только для тестов!
let chatConfig = ChatConfig(transportConfig: transport, networkConfig: networkConfig) - Для продакшена используйте
sslPinning.trustedCertificatesс резервными сертификатами
- Для тестовых серверов с самоподписанным сертификатом:
-
Версия API совпадает с сервером? Значение по умолчанию
.api17подходит для ChatCenter 6.x и выше. Точное значение для вашего сервера — в таблице Версии API.
Сообщения не отправляются
Симптомы
- Сообщение показывает статус
Не доставлено send(message:)выбрасывает ошибку- Сообщения пропадают
Чеклист
-
Какая ошибка? Поймайте конкретный кейс
ChatCenterUISendMessageErrorи сопоставьте его с причиной — таблица случаев и пример обработки в Справочнике ошибок. Самый частый случай при программной отправке —.webSocketNotActive(чат закрыт, WebSocket разорван). -
WebSocket-соединение активно?
- При отправке из фона: установите
chatConfig.keepSocketActive = trueиchatConfig.shouldUseRemoteConfig = false(иначе серверный конфиг переопределит локальное значение). См. предупреждение в Настройках SDK. - Проверьте наличие сети на устройстве.
- При отправке из фона: установите
-
Размер вложения не превышает лимит? Для изображений SDK проверяет размер до отправки и бросает
ChatCenterUISendMessageError.messageImageTooLargeпри превышении. Лимит по умолчанию — 30 МБ; сервер может переопределить его. Точное значение для вашего тенанта — у поддержки edna. -
send(message:)не бросает ошибку, но сообщение не дошло? Метод подтверждает только отправку в WebSocket, а не доставку серверу. REST-сбои (загрузка истории и файлов) приходят отдельно через делегатdidReceiveNetwork(error:); обрывы WebSocket в делегат не приходят (см. Делегат SDK).
Пуш-уведомления не приходят
Симптомы
- Устройство не получает пуши от ChatCenter
- Пуш приходит, но чат не открывается
Чеклист
-
Токен устройства передан через
ChatCenterUISDK.setDeviceToken(_:)? Полный пример вызова — в разделе Уведомления. -
Разрешения на уведомления запрошены через
UNUserNotificationCenter.requestAuthorization? Без этого APNs не выдаст токен. -
Пуши настроены на сервере edna? Ключ APNs (.p8) или сертификат (.p12), Bundle ID, тип окружения (sandbox/production) задаются в АРМ — см. Подключение мобильного чата iOS → Настройка пуш-уведомлений. Шаблон APNs payload (поля
aps, плейсхолдеры) — в Шаблонах пуш-уведомлений. Если у вас нет доступа к АРМ — support@edna.ru. -
Уведомление от ChatCenter, а не от вашего приложения?
if let userInfo = userInfo as? [String: Any],
ChatCenterUISDK.isChatCenterNotification(userInfo) {
// Это уведомление от ChatCenterUI SDK
} -
Обработка уведомления реализована? Оба метода объявлены как
throws(ChatCenterUIError)— обязательно используйтеtry:- Чат открыт →
try chatCenterSDK.handleNotification(userInfo: userInfo)(контекст в уже открытый чат не подставляется — см. Уведомления) - Чат закрыт →
try chatCenterSDK.getChat(userInfo: userInfo)+ показать ViewController
- Чат открыт →
Подробнее — в разделе Уведомления.
Проблемы с темой / кастомизацией
Симптомы
- Стили применяются с задержкой (с первого кадра видна дефолтная тема)
- Светлая тема работает, тёмная — нет
- Шрифт в пузырях сообщений не меняется
Чеклист
- Тема задана до
getChat()? Тема считывается при открытии чата. - Порядок присваивания
themeиdarkThemeкорректный? НазначайтеchatCenterSDK.darkThemeпослеchatCenterSDK.theme. ПрисваиваниеthemeсбрасываетdarkTheme— если выставить тёмную тему первой, светлая её затрёт. - Шрифт в пузырях — это
typography.message, а неtypography.body(см. карту токенов в типографике).
Подробный FAQ по дизайн-системе — в разделе Troubleshooting дизайн-системы.
Долгая загрузка чата
Симптомы
- В логах SDK (
logLevel: .all) время REST-запроса истории (api/client/historyилиhistoryдля серверов сnewRoutesEnabled: false) больше 1–2 секунд - Задержка воспроизводится в демо-приложении на тех же серверных данных
Чеклист
- Проверьте сетевую задержку до сервера. Включите
ChatLoggerConfig(logLevel: .all)и сравните время REST-запроса истории (api/client/historyилиhistory) с типичной задержкой до сервера. - Размер страницы истории на scroll-up. При
shouldUseRemoteConfig = falseуменьшитеchatConfig.historyLoadingCount(по умолчанию —30). ПриshouldUseRemoteConfig = trueзначение задаётся сервером — настройка через поддержку edna. - Не пересоздавайте
ChatThemeперед каждым открытием чата — храните как свойство и переиспользуйте.
Диагностика с помощью демо-приложения
- Воспроизведите проблему в демо-приложении с вашими серверными данными.
- Если проблема повторяется — причина в SDK или сервере; пришлите изолированный проект на support@edna.ru. Перед отправкой замените реальные
providerUidи серверные URL на плейсхолдеры (см. Сообщить об ошибке). - Если в демо проблемы нет — причина в настройках вашего проекта или способе интеграции.
Связанные разделы
- Справочник ошибок — все типы ошибок SDK
- Настройки логирования — включение логов
- Сообщить об ошибке — как подготовить отчёт
- Демо-приложение — изоляция проблем
- Troubleshooting дизайн-системы — проблемы с темами и стилями
- АРМ администратора — настройки канала, пушей, маршрутизации и уведомлений на стороне сервера