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

ChatNetworkConfig

ChatNetworkConfig объединяет сетевые настройки SDK и используется в поле networkConfig класса ChatConfig.

к сведению

Адреса серверов backend задаются отдельно в transport_config. Бизнес-настройки чата (вложения, поле ввода, push) — в chat_config.

Параметры

ПолеТипОбязательныйОписание
httpConfigHTTPConfigНет (default)Настройки HTTP-клиента: таймауты соединения, скачивания и выгрузки файлов
wsConfigWSConfigНет (default)Настройки WebSocket-подключения: таймаут соединения, таймаут чтения/записи фреймов, ping-интервал
sslPinningSSLPinningConfigНет (default)Сертификаты для pinning и флаг отключения проверки сертификата

Все таймауты в HTTPConfig и WSConfig — в секундах.

Значения по умолчанию

КлассПараметрПо умолч.Описание
HTTPConfigconnectionTimeout30 секТаймаут установки HTTP-соединения
HTTPConfigdownloadTimeout30 секТаймаут скачивания файлов
HTTPConfiguploadTimeout30 секТаймаут выгрузки файлов
WSConfigconnectionTimeout30 секТаймаут установки WebSocket-соединения
WSConfigsendTimeout30 секТаймаут чтения/записи WebSocket-фреймов
WSConfigpingInterval30 секИнтервал keepalive ping/pong
WSConfigisReconnectEnabledfalseАвтоматическое переподключение к WebSocket при разрыве соединения
WSConfigmaxReconnectAttempts10Максимальное число попыток переподключения после разрыва соединения. Значения меньше 1 приводятся к 1

Автоматическое переподключение к WebSocket (reconnect)

При isReconnectEnabled = true SDK выполняет повторные попытки подключения к WebSocket после разрыва соединения. Используется экспоненциальный backoff: интервал между попытками удваивается с каждой итерацией (1, 2, 4, 8, 16, 32 секунды) и ограничен сверху 60 секундами. При значении maxReconnectAttempts = 10 суммарное время восстановления составит около 5 минут — после этого SDK прекращает попытки и сообщает об ошибке через ChatCenterUIListener.networkErrorReceived(error).

val networkConfig = ChatNetworkConfig(
wsConfig = WSConfig(
isReconnectEnabled = true,
maxReconnectAttempts = 10
)
)

Пока идёт переподключение, на экране чата:

  • в тулбаре отображается заголовок «Подключение...» (строка ecc_chat_title_connecting);
  • кнопки отправки сообщения и прикрепления файла заблокированы до восстановления соединения; текст в поле ввода остаётся доступным для редактирования.

Сообщения в очереди. Сообщения, отправленные пользователем во время разрыва соединения, остаются в локальной базе со статусом SENDING. После успешного восстановления соединения SDK продолжает работу в той же сессии — повторно вызывать authorize(user, auth) не требуется. Если переподключиться не удалось и попытки исчерпаны, статус сообщений переходит в FAILED, пользователь может повторить отправку из UI.

Работа в фоне. Если приложение уходит в background во время переподключения, SDK продолжает попытки в рамках стандартных ограничений Android (Doze, App Standby). Поведение в фоне дополнительно зависит от параметра ChatConfig.keepWebSocketActive — см. Известные ограничения.

Рекомендуемая конфигурация для production

Для production включайте автоматическое переподключение и оставляйте число попыток равным значению по умолчанию. Это устраняет необходимость в собственной логике повторного authorize при кратковременных сетевых сбоях.

WSConfig(
isReconnectEnabled = true,
maxReconnectAttempts = 10
)
Порядок инициализации

Параметр задаётся до вызова init(...) / initAsync(...) — изменение после инициализации не вступает в силу (см. общую заметку «Изменение настроек» ниже). Пока isReconnectEnabled = true, переход состояний чата не прерывается по таймауту — окончательным признаком отказа служит исчерпание попыток подключения и событие networkErrorReceived.

SSL Pinning

val networkConfig = ChatNetworkConfig(
httpConfig = HTTPConfig(),
wsConfig = WSConfig(),
sslPinning = SSLPinningConfig(
certificates = arrayOf(ChatSSLCertificate(R.raw.my_cert)),
allowUntrustedCertificates = false
)
)
Параметр SSLPinningConfigТипОбязательныйПо умолч.Описание
certificatesArray<ChatSSLCertificate>НетarrayOf()Сертификаты для SSL pinning
allowUntrustedCertificatesBooleanНетfalseОтключить проверку TLS-сертификата. Только для тестов
Запрещённая комбинация параметров

Одновременная передача непустого массива certificates и allowUntrustedCertificates = true запрещена: конструктор SSLPinningConfig бросит IllegalArgumentException.

Допустимые сочетания:

  • certificates = arrayOf(...) + allowUntrustedCertificates = false — production со SSL pinning;
  • certificates = arrayOf() (по умолчанию) + allowUntrustedCertificates = true — только для тестового окружения;
  • certificates = arrayOf() + allowUntrustedCertificates = false — стандартная TLS-проверка без pinning (значения по умолчанию).
Изменение настроек

Поля ChatNetworkConfig следует задавать до вызова init(...) / initAsync(...). Поведение SDK при изменении настроек после инициализации не определено.

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