Решение проблем
Руководство по диагностике и устранению типичных проблем при интеграции и работе ChatCenterUI SDK.
Для всех сценариев рекомендуется включить логирование ChatLoggerConfig(logLevel: .all) — это значительно упрощает диагностику. Подробнее — в разделе Настройки логирования.
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-server.edna.ru",
webSocket: "wss://your-server.edna.ru/socket",
dataStore: "https://your-server.edna.ru/files"
)
// Или для облачных клиентов (без https://):
let transport = ChatTransportConfig(cloudHost: "your-server.edna.ru") -
Экземпляр SDK сохранён?
ChatCenterUISDKдолжен быть сохранён как свойство (не локальная переменная), иначе он будет уничтожен сборщиком мусора
// Неверно — 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 в браузере — должен отвечать
- Проверьте, что устройство/симулятор имеет доступ к сети
- При использовании VPN убедитесь, что трафик маршрутизируется корректно
-
SSL-сертификат валиден?
- Для тестовых серверов с самоподписанным сертификатом:
var networkConfig = ChatNetworkConfig()
networkConfig.sslPinning.allowUntrustedSSLCertificate = true // только для тестов! - Для продакшена используйте
trustedCertificatesс резервными сертификатами
- Для тестовых серверов с самоподписанным сертификатом:
-
Версия API совпадает с сервером?
- По умолчанию
.api17— подходит для ChatCenter 6.x+ - Если сервер обновлён, может потребоваться
.api18–.api21
- По умолчанию
-
Логи SDK включены?
let loggerConfig = ChatLoggerConfig(logLevel: .all)Посмотрите вывод в консоли Xcode — SDK логирует все сетевые запросы и ответы.
Сообщения не отправляются
Симптомы
- Сообщение показывает статус "Не доставлено"
send(message:)выбрасывает ошибку- Сообщения пропадают
Чеклист
-
Какая ошибка? Обработайте все случаи:
do {
try chatCenterSDK.send(message: .text("Текст"))
} catch ChatCenterUISendMessageError.webSocketNotActive {
print("WebSocket не активен — чат закрыт?")
} catch ChatCenterUISendMessageError.messageTooLong {
print("Сообщение > 4000 символов")
} catch {
print("Другая ошибка: \(error)")
} -
WebSocket-соединение активно?
- При отправке из фона: включите
chatConfig.keepSocketActive = true - Проверьте наличие сети на устройстве
- При отправке из фона: включите
-
Размер вложения не превышает лимит?
- Лимит на размер файла настраивается на сервере
- Для изображений SDK выполняет сжатие, но слишком большие файлы могут быть отклонены
Полный справочник ошибок — в разделе Справочник ошибок.
Пуш-уведомления не приходят
Симптомы
- Устройство не получает пуши от ChatCenter
- Пуш приходит, но чат не открывается
Чеклист
-
Токен устройства передан в SDK?
func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
ChatCenterUISDK.setDeviceToken(deviceToken)
} -
Разрешения на уведомления запрошены?
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, _ in
guard granted else { return }
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
} -
Пуши настроены на сервере edna?
- Сертификат APNs загружен на сервер edna
- За инструкцией обратитесь на support@edna.ru
-
Уведомление от ChatCenter, а не от вашего приложения?
if let userInfo = userInfo as? [String: Any],
ChatCenterUISDK.isChatCenterNotification(userInfo) {
// Это уведомление от ChatCenterUI SDK
} -
Обработка уведомления реализована?
- Чат открыт →
handleNotification(userInfo:) - Чат закрыт →
getChat(userInfo:)+ показать ViewController
- Чат открыт →
Подробнее — в разделе Уведомления.
Проблемы с темой / кастомизацией
Подробный FAQ по дизайн-системе — в разделе Troubleshooting дизайн-системы.
Быстрый чеклист
- Тема задана до
getChat()? Тема считывается при открытии чата. - Тёмная тема задана отдельно?
chatCenterSDK.darkTheme = darkTheme - Шрифт в пузырях — это
typography.message, а неtypography.body applyменяет все экраны — используйтеbuildдля точечных изменений
Проблемы с производительностью
Долгая загрузка чата
- Проверьте
historyLoadingCount— уменьшите до 20 для медленных соединений - Убедитесь, что сервер доступен с приемлемой задержкой
Высокое потребление памяти
- Не пересоздавайте
ChatThemeперед каждым открытием чата - Используйте SF Symbols вместо растровых изображений для иконок
- На iPhone SE / iPhone 8 избегайте создания
ChatThemeв цикле
Диагностика с помощью демо-приложения
Демо-приложение помогает изолировать причину проблемы:
- Воспроизведите проблему в демо-приложении с вашими серверными данными
- Если проблема повторяется — причина в SDK или сервере. Обратитесь в поддержку
- Если в демо проблемы нет — причина в настройках вашего проекта или способе интеграции
Для сложных сценариев настройте демо-приложение для воспроизведения ошибки и пришлите проект на support@edna.ru — это ускорит диагностику.
Связанные разделы
- Справочник ошибок — все типы ошибок SDK
- Настройки логирования — включение логов
- Сообщить об ошибке — как подготовить отчёт
- Демо-приложение — изоляция проблем
- Troubleshooting дизайн-системы — проблемы с темами и стилями