Skip to main content
Version: Next

Решение проблем

Руководство по диагностике и устранению типичных проблем при интеграции и работе ChatCenterUI SDK.

tip

Для всех сценариев рекомендуется включить логирование ChatLoggerConfig(logLevel: .all) — это значительно упрощает диагностику. Подробнее — в разделе Настройки логирования.


SDK не инициализируется

Симптомы

  • Приложение падает при создании ChatCenterUISDK
  • SDK создаётся, но методы не работают

Чеклист

  1. Фреймворк подключён корректно?

    • В General → Frameworks and Libraries фреймворк ChatCenterUI.xcframework добавлен с режимом Embed & Sign
    • При использовании CocoaPods проект открыт через .xcworkspace, а не .xcodeproj
  2. providerUid указан верно?

    • Значение получено от edna при интеграции
    • Нет лишних пробелов или переносов строк
  3. 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")
  4. Экземпляр SDK сохранён?

    • ChatCenterUISDK должен быть сохранён как свойство (не локальная переменная), иначе он будет уничтожен сборщиком мусора
    // Неверно — SDK будет уничтожен после выхода из метода
    func setup() {
    let sdk = ChatCenterUISDK(...)
    }

    // Верно — SDK живёт всё время работы приложения
    var chatCenterSDK: ChatCenterUISDK?
    func setup() {
    chatCenterSDK = ChatCenterUISDK(...)
    }

Чат не загружается

Симптомы

  • При вызове getChat() выбрасывается ошибка
  • Экран чата показывает индикатор загрузки бесконечно
  • Отображается ошибка подключения

Чеклист

  1. Пользователь авторизован?

    // getChat() выбросит ChatCenterUIError.userNotAuthorized если забыли:
    chatCenterSDK.authorize(user: ChatUser(identifier: "user_id"))
  2. Сервер доступен?

    • Проверьте REST URL в браузере — должен отвечать
    • Проверьте, что устройство/симулятор имеет доступ к сети
    • При использовании VPN убедитесь, что трафик маршрутизируется корректно
  3. SSL-сертификат валиден?

    • Для тестовых серверов с самоподписанным сертификатом:
      var networkConfig = ChatNetworkConfig()
      networkConfig.sslPinning.allowUntrustedSSLCertificate = true // только для тестов!
    • Для продакшена используйте trustedCertificates с резервными сертификатами
  4. Версия API совпадает с сервером?

    • По умолчанию .api17 — подходит для ChatCenter 6.x+
    • Если сервер обновлён, может потребоваться .api18.api21
  5. Логи SDK включены?

    let loggerConfig = ChatLoggerConfig(logLevel: .all)

    Посмотрите вывод в консоли Xcode — SDK логирует все сетевые запросы и ответы.


Сообщения не отправляются

Симптомы

  • Сообщение показывает статус "Не доставлено"
  • send(message:) выбрасывает ошибку
  • Сообщения пропадают

Чеклист

  1. Какая ошибка? Обработайте все случаи:

    do {
    try chatCenterSDK.send(message: .text("Текст"))
    } catch ChatCenterUISendMessageError.webSocketNotActive {
    print("WebSocket не активен — чат закрыт?")
    } catch ChatCenterUISendMessageError.messageTooLong {
    print("Сообщение > 4000 символов")
    } catch {
    print("Другая ошибка: \(error)")
    }
  2. WebSocket-соединение активно?

    • При отправке из фона: включите chatConfig.keepSocketActive = true
    • Проверьте наличие сети на устройстве
  3. Размер вложения не превышает лимит?

    • Лимит на размер файла настраивается на сервере
    • Для изображений SDK выполняет сжатие, но слишком большие файлы могут быть отклонены

Полный справочник ошибок — в разделе Справочник ошибок.


Пуш-уведомления не приходят

Симптомы

  • Устройство не получает пуши от ChatCenter
  • Пуш приходит, но чат не открывается

Чеклист

  1. Токен устройства передан в SDK?

    func application(_ application: UIApplication,
    didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    ChatCenterUISDK.setDeviceToken(deviceToken)
    }
  2. Разрешения на уведомления запрошены?

    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, _ in
    guard granted else { return }
    DispatchQueue.main.async {
    UIApplication.shared.registerForRemoteNotifications()
    }
    }
  3. Пуши настроены на сервере edna?

    • Сертификат APNs загружен на сервер edna
    • За инструкцией обратитесь на support@edna.ru
  4. Уведомление от ChatCenter, а не от вашего приложения?

    if let userInfo = userInfo as? [String: Any],
    ChatCenterUISDK.isChatCenterNotification(userInfo) {
    // Это уведомление от ChatCenterUI SDK
    }
  5. Обработка уведомления реализована?

    • Чат открыт → handleNotification(userInfo:)
    • Чат закрыт → getChat(userInfo:) + показать ViewController

Подробнее — в разделе Уведомления.


Проблемы с темой / кастомизацией

Подробный FAQ по дизайн-системе — в разделе Troubleshooting дизайн-системы.

Быстрый чеклист

  1. Тема задана до getChat()? Тема считывается при открытии чата.
  2. Тёмная тема задана отдельно? chatCenterSDK.darkTheme = darkTheme
  3. Шрифт в пузырях — это typography.message, а не typography.body
  4. apply меняет все экраны — используйте build для точечных изменений

Проблемы с производительностью

Долгая загрузка чата

  • Проверьте historyLoadingCount — уменьшите до 20 для медленных соединений
  • Убедитесь, что сервер доступен с приемлемой задержкой

Высокое потребление памяти

  • Не пересоздавайте ChatTheme перед каждым открытием чата
  • Используйте SF Symbols вместо растровых изображений для иконок
  • На iPhone SE / iPhone 8 избегайте создания ChatTheme в цикле

Диагностика с помощью демо-приложения

Демо-приложение помогает изолировать причину проблемы:

  1. Воспроизведите проблему в демо-приложении с вашими серверными данными
  2. Если проблема повторяется — причина в SDK или сервере. Обратитесь в поддержку
  3. Если в демо проблемы нет — причина в настройках вашего проекта или способе интеграции
tip

Для сложных сценариев настройте демо-приложение для воспроизведения ошибки и пришлите проект на support@edna.ru — это ускорит диагностику.


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