ChatConfig
ChatConfig — основной контейнер конфигурации SDK. Передаётся в ChatCenterUI.init(...) или ChatCenterUI.initAsync(...) и определяет настройки сети, push, поля ввода и разрешений.
Сетевые таймауты, SSL pinning и подключение к backend настраиваются в отдельных конфигах: transport_config, network_config.
Параметры конструктора
val chatConfig = ChatConfig(
transportConfig = ChatTransportConfig(cloudHost = "https://your.edna.ru"),
networkConfig = ChatNetworkConfig()
)
Конструктор ChatConfig принимает 14 параметров — большинство опциональны.
| Параметр | Тип | Изменяемое | Обязательный | По умолч. | Описание |
|---|---|---|---|---|---|
transportConfig | ChatTransportConfig | val | Да | — | Настройки подключения к серверу. См. Transport config |
networkConfig | ChatNetworkConfig | val | Да | — | Настройки таймаутов и SSL. См. Network config |
keepWebSocketActive | Boolean | var | Нет | false | Держать WebSocket открытым после закрытия чата. Устарело — управляется сервером. |
searchEnabled | Boolean | var | Нет | false | Поиск сообщений. Устарело — управляется сервером. |
attachmentsEnabled | Boolean | val | Нет | true | Показывать кнопку добавления вложений |
linkPreviewEnabled | Boolean | var | Нет | false | Превью ссылок (OpenGraph). Устарело — управляется сервером. |
voiceRecordingEnabled | Boolean | var | Нет | false | Голосовые сообщения. Устарело — управляется сервером. |
permissionsDescriptionDialogsEnabled | Boolean | val | Нет | false | Показывать диалоги с объяснением причин запроса разрешений |
autoScrollToLatest | Boolean | val | Нет | false | Автопрокрутка к последним сообщениям. Устарело — управляется сервером. |
notificationImportance | Int | val | Нет | IMPORTANCE_DEFAULT | Приоритет уведомлений для notification channel. Применяется на Android 8.0 (API 26) и выше; на более ранних версиях значение игнорируется. См. предупреждение под таблицей |
surveyCompletionDelay | Int | val | Нет | 3 | Задержка скрытия опроса, секунды. Устарело — управляется сервером. |
inputEnabledDuringQuickReplies | Boolean | val | Нет | false | Разрешить ввод текста при отображении быстрых ответов |
pendingIntentCreator | PendingIntentCreator | var | Нет | Открытие ChatActivity | Способ сборки PendingIntent при клике на уведомление. См. пример ниже |
keepSocketActiveDuringOperatorSession | Boolean | var | Нет | false | Держать WebSocket, пока есть открытый диалог с оператором. Устарело — управляется сервером. |
Полный список устаревших параметров и их замен на серверные настройки — см. раздел Устаревшие параметры.
Android регистрирует notification channel один раз. После первого пуша канал создан, и последующие изменения notificationImportance на него не повлияют — до переустановки приложения или ручного сброса канала в настройках Android.
userInputEnabled
userInputEnabled задаётся только на готовом экземпляре ChatConfig — в конструктор оно не входит.
| Свойство | Тип | По умолч. | Описание |
|---|---|---|---|
userInputEnabled | Boolean | true | Доступность поля ввода для пользователя. Поле не объявлено @Volatile: запись из фонового потока не гарантирует видимость значения в чате. |
val chatConfig = ChatConfig(
transportConfig = transportConfig,
networkConfig = networkConfig
)
chatConfig.userInputEnabled = false // временно заблокировать поле ввода
PendingIntentCreator
По умолчанию клик по уведомлению открывает встроенную ChatActivity. Если в приложении уже есть хост-Activity, через которую открывается чат, замена pendingIntentCreator помогает избежать открытия двух экземпляров чата.
create() вызывается из NotificationWorker (WorkManager) на фоновом потоке — обращаться к UI внутри метода нельзя. Параметр appMarker приходит из push-сообщения и может быть null (в частности, для кампанийных уведомлений) или пустой строкой.
chatConfig.pendingIntentCreator = object : PendingIntentCreator {
override fun create(context: Context, appMarker: String?): PendingIntent? {
val intent = Intent(context, HostActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP
putExtra("open_chat", true)
}
var flags = PendingIntent.FLAG_CANCEL_CURRENT
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
flags = flags or PendingIntent.FLAG_IMMUTABLE
}
// requestCode должен быть уникален: одинаковое значение для разных Intent'ов
// приведёт к взаимной перезаписи PendingIntent в системе.
return PendingIntent.getActivity(context, Random().nextInt(), intent, flags)
}
}
FLAG_IMMUTABLE доступен с Android 6.0 (API 23). На Android 12 (API 31) и выше при targetSdk = 31+ PendingIntent.getActivity() требует, чтобы был указан один из флагов: FLAG_IMMUTABLE или FLAG_MUTABLE — иначе бросает IllegalArgumentException. Guard по SDK_INT >= M в примере оставлен для совместимости с minSdk < 23.
Поля, унаследованные от ChatConfigCore
Эти поля унаследованы от базового класса ChatConfigCore и доступны на экземпляре ChatConfig через наследование. Они read-only: ни передать в конструктор ChatConfig(...), ни переприсвоить нельзя.
| Свойство | Тип | По умолч. | Описание |
|---|---|---|---|
historyLoadingCount | Int | 30 | Количество сообщений, загружаемых при подгрузке истории. Устарело — управляется сервером. |
isShowClientFullNameInMessage | Boolean | true | Показывать полное имя клиента в сообщениях или «Вы» |
Устаревшие параметры (deprecated)
Параметры конструктора, помеченные @Deprecated — значения теперь приходят с сервера.
| Параметр | По умолч. | Замена | Примечание |
|---|---|---|---|
keepWebSocketActive | false | Серверная настройка | На Android 15+ (targetSdk = 35) фоновое подключение не разрешено системой, если приложение не в foreground. На более ранних версиях подвержено Doze, App Standby и ограничениям фоновой сети |
keepSocketActiveDuringOperatorSession | false | Серверная настройка | — |
searchEnabled | false | Серверная настройка | Поиск по истории |
linkPreviewEnabled | false | Серверная настройка | Превью ссылок (OpenGraph) |
voiceRecordingEnabled | false | Серверная настройка | Запись голосовых сообщений |
autoScrollToLatest | false | Серверная настройка | Автопрокрутка |
surveyCompletionDelay | 3 | Серверная настройка | Задержка скрытия опроса (секунды) |
Поле historyLoadingCount тоже помечено @Deprecated, но передать его в конструктор ChatConfig нельзя — оно остаётся на дефолте 30. См. Поля, унаследованные от ChatConfigCore.