Настройки SDK
Конструктор
init(transportConfig: ChatTransportConfig, networkConfig: ChatNetworkConfig = .init())
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
transportConfig | ChatTransportConfig | Да | Настройки подключения (URL, версия API). См. Подключение |
networkConfig | ChatNetworkConfig | Нет (default .init()) | Сетевые настройки. По умолчанию: REST/WS connection 30 с, upload 120 с, без SSL-пиннинга. См. Сетевые настройки |
let chatConfig = ChatConfig(transportConfig: chatTransportConfig)
ChatConfig копируется при передаче в SDKChatConfig — struct, поэтому ChatCenterUISDK(chatConfig:) сохраняет копию. Мутации локальной переменной после инициализации SDK не действуют — задавайте все значения до передачи в конструктор.
Активные параметры
Параметры, не зависящие от серверного конфига:
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
userInputEnabled | Bool | true | Доступность поля ввода для пользователя |
shouldUseRemoteConfig | Bool | true | При true серверные значения переопределяют локальные deprecated-настройки ниже |
unreadMessageCountDelay | Int (сек) | 0 | Интервал REST-polling счётчика непрочитанных. При 0 — без polling'а |
Устаревшие параметры (server-driven)
При shouldUseRemoteConfig = true (по умолчанию) серверный channelConfig переопределяет их локальные значения — для эффекта локальных значений установите shouldUseRemoteConfig = false.
Атрибут @available(deprecated) стоит в doc-комментарии, не в коде, — Xcode не показывает strikethrough или Fix-It. Ищите использование по списку ниже.
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
searchEnabled | Bool | true | Поиск по истории сообщений |
voiceRecordingEnabled | Bool | false | Запись и отправка голосовых сообщений |
scrollToLatest | Bool | true | Автопрокрутка к новым сообщениям и при возврате на экран чата с загруженной историей |
linkPreviewEnabled | Bool | false | Генерация превью ссылок (OpenGraph) |
showAttachButton | Bool | true | Отображение кнопки добавления файлов |
surveyCompletionDelay | Int (мс) | 0 | Задержка перед отправкой результатов опроса. Несмотря на имя без Ms, единицы — миллисекунды |
historyLoadingCount | Int | 30 | Количество элементов, загружаемых в запросе истории |
keepSocketActive | Bool | false | Держать WebSocket активным после ухода с экрана чата |
keepSocketActiveDuringOperatorSession | Bool | false | Держать WebSocket активным до закрытия диалога оператором |
keepSocketActive на батареюАктивный WebSocket увеличивает фоновый расход батареи и трафика — включайте только если приложению нужен real-time счётчик непрочитанных.
Примеры
Минимальная (рекомендуется для старта)
let chatConfig = ChatConfig(transportConfig: chatTransportConfig)
С постоянным счётчиком непрочитанных
var chatConfig = ChatConfig(transportConfig: chatTransportConfig)
chatConfig.shouldUseRemoteConfig = false
chatConfig.keepSocketActive = true
chatConfig.unreadMessageCountDelay = 30 // резервный polling, секунды
let sdk = ChatCenterUISDK(providerUid: ..., chatConfig: chatConfig)
Жизненный цикл WebSocket-соединения
WebSocket открывается при первом getChat() (на viewDidAppear экрана чата), не при authorize(). keepSocketActive управляет закрытием, не открытием. Полная схема — в разделе Внедрение в жизненный цикл.
registerAtFirstStartПри registerAtFirstStart = true (управляется на стороне сервера) SDK открывает WebSocket в режиме pre-registration сразу после authorize(), если в локальном хранилище нет сохранённого deviceAddress, и закрывает его до первого getChat() — кроме случая keepSocketActive = true.
Поведение в зависимости от настроек
| Состояние приложения | keepSocketActive = false (по умолчанию) | keepSocketActive = true | keepSocketActiveDuringOperatorSession = true |
|---|---|---|---|
| Чат открыт | WebSocket активен | WebSocket активен | WebSocket активен |
| Чат закрыт, пользователь авторизован | WebSocket закрыт | WebSocket активен | WebSocket активен (до закрытия диалога оператором) |
Чат закрыт, диалог завершён оператором (закрытие — при следующем closeChat()) | WebSocket закрыт | WebSocket активен | WebSocket закрыт |
| Приложение в фоне | WebSocket закрыт | WebSocket закрыт | WebSocket закрыт |
После logout() / deauthorizeUser() | WebSocket закрыт | WebSocket закрыт | WebSocket закрыт |
Уход в фон (UIApplication.didEnterBackgroundNotification) сейчас всегда закрывает WebSocket — keepSocketActive на этот переход не влияет. При возврате в foreground вызывайте getUnreadMessagesCount(completion:), чтобы обновить счётчик непрочитанных.
Связанные разделы
- Справочник ошибок — выбор между
keepSocketActiveиkeepSocketActiveDuringOperatorSession - Делегат SDK —
didChangeUnreadMessages, сетевые ошибки - Внедрение в жизненный цикл — полная схема и поточность