Настройки SDK
Модель ChatConfig позволяет изменять настройки функционала чата и включает описанные выше модели настроек подключения и сетевых настроек.
Инициализация:
Обязательным параметром являются настройки подключения. Опционально можно передать сетевые настройки:
var chatConfig = ChatConfig(transportConfig: chatTransportConfig,
networkConfig: chatNetworkConfig) // опционально
// Настройка дополнительных параметров
chatConfig.searchEnabled = true
chatConfig.voiceRecordingEnabled = true
Параметры:
-
userInputEnabled:Bool(по умолчаниюtrue). Доступность поля ввода для пользователя (возможность писать сообщения). -
shouldUseRemoteConfig:Bool(по умолчаниюtrue). Использование удалённого конфига на сервере. При включении серверные значения переопределяют локальные настройки. -
unreadMessageCountDelay:Int(по умолчанию0). Интервал обновления счётчика непрочитанных сообщений (в секундах). При нулевом значении счётчик не обновляется автоматически.
Параметры, дублируемые серверным конфигом (при shouldUseRemoteConfig = true значения берутся с сервера):
Параметры ниже мигрируют на серверный конфиг и будут удалены в следующих версиях.
searchEnabled:Bool(по умолчаниюtrue). Включает или отключает функцию поиска по истории сообщений.voiceRecordingEnabled:Bool(по умолчаниюfalse). Включает или отключает возможность записи и отправки голосовых сообщений.scrollToLatest:Bool(по умолчаниюtrue). Включает или отключает автопрокрутку до последних сообщений при поступлении новых в открытом чате.linkPreviewEnabled:Bool(по умолчаниюfalse). Включает или отключает генерацию превью ссылок в сообщениях (OpenGraph).
Клиентские параметры WebSocket (управляют поведением на стороне клиента, НЕ дублируются сервером):
Все параметры ниже планируются к удалению в следующих версиях.
keepSocketActive:Bool(по умолчаниюfalse). Еслиtrue, WebSocket-соединение будет поддерживаться активным при выходе с экрана чата. Необходимо для работы счётчика непрочитанных сообщений и программной отправки черезsend(message:).keepSocketActiveDuringOperatorSession:Bool(по умолчаниюfalse). WebSocket-соединение будет поддерживаться активным при выходе с экрана чата, до тех пор, пока оператор не закроет диалог.
keepSocketActive и keepSocketActiveDuringOperatorSession| Параметр | Соединение поддерживается... | Подходит для |
|---|---|---|
keepSocketActive = true | Всегда, пока пользователь авторизован | Счётчик непрочитанных в реальном времени |
keepSocketActiveDuringOperatorSession = true | Только пока оператор не закрыл диалог | Уведомления в рамках активной сессии поддержки |
Для постоянного счётчика непрочитанных используйте keepSocketActive.
surveyCompletionDelay:Int(по умолчанию0). Задержка на отправку результатов опроса (за это время пользователь может менять свой выбор).historyLoadingCount:Int(по умолчанию30). Количество элементов, загружаемых в запросе истории.showAttachButton:Bool(по умолчаниюtrue). Отображение кнопки добавления файлов.
Примеры типичных конфигураций
Минимальная (рекомендуется для старта)
let chatConfig = ChatConfig(transportConfig: chatTransportConfig)
// Все параметры используются по умолчанию
С постоянным счётчиком непрочитанных
var chatConfig = ChatConfig(transportConfig: chatTransportConfig)
chatConfig.keepSocketActive = true // держать WebSocket активным
chatConfig.unreadMessageCountDelay = 30 // резервный polling, секунды
Режим "только чтение"
var chatConfig = ChatConfig(transportConfig: chatTransportConfig)
chatConfig.userInputEnabled = false // запретить ввод сообщений
Для программной отправки сообщений через send()
var chatConfig = ChatConfig(transportConfig: chatTransportConfig)
chatConfig.keepSocketActive = true // обязательно, иначе ошибка .webSocketNotActive
Жизненный цикл WebSocket-соединения
WebSocket-соединение используется SDK для обмена сообщениями в реальном времени. Понимание его жизненного цикла важно для правильной настройки параметров keepSocketActive, keepSocketActiveDuringOperatorSession и unreadMessageCountDelay.
Диаграмма состояний
Поведение в зависимости от настроек
| Состояние приложения | keepSocketActive = false (по умолчанию) | keepSocketActive = true | keepSocketActiveDuringOperatorSession = true |
|---|---|---|---|
| Чат открыт | WebSocket активен | WebSocket активен | WebSocket активен |
| Чат закрыт, пользователь авторизован | WebSocket закрыт | WebSocket активен | WebSocket активен (до закрытия диалога оператором) |
| Чат закрыт, диалог завершён оператором | WebSocket закрыт | WebSocket активен | WebSocket закрыт |
После logout() / deauthorizeUser() | WebSocket закрыт | WebSocket закрыт | WebSocket закрыт |
Взаимодействие с другими параметрами
| Параметр | Требует WebSocket | Описание |
|---|---|---|
send(message:) | Да | Без активного WebSocket выбросит .webSocketNotActive |
unreadMessageCountDelay | Нет (HTTP-polling) | Работает независимо от WebSocket, запрашивает счётчик по REST API |
ChatCenterUISDKDelegate.didChangeUnreadMessages | Да (для real-time) | При keepSocketActive = true вызывается в реальном времени; при false — только когда чат открыт |
getUnreadMessagesCount(completion:) | Нет | Разовый запрос по REST API, не зависит от WebSocket |
Рекомендации по выбору
| Сценарий | Настройка |
|---|---|
| Счётчик непрочитанных в реальном времени (бейдж) | keepSocketActive = true (опционально: unreadMessageCountDelay как резерв) |
| Уведомления только в рамках активного диалога | keepSocketActiveDuringOperatorSession = true |
| Периодический опрос счётчика без постоянного соединения | unreadMessageCountDelay = 30 |
| Минимальное потребление ресурсов | Оставить значения по умолчанию |
Постоянное WebSocket-соединение (keepSocketActive = true) увеличивает расход батареи. Используйте его только если вашему приложению действительно нужен счётчик непрочитанных в реальном времени.