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

Инициализация SDK

Класс ChatCenterUI — это точка входа в SDK. Создайте один экземпляр в Application.onCreate() и используйте его на протяжении всего жизненного цикла приложения.

Конструктор

ChatCenterUI(appContext: Context, logger: ChatLoggerConfig? = null)
ПараметрТипОбязательныйПо умолч.Описание
appContextContextДаapplicationContext вашего приложения
loggerChatLoggerConfig?НетnullКонфигурация логгера. Подробнее — Логгер
предупреждение

Передавайте именно applicationContext, а не Activity-context — иначе конструктор бросит IllegalArgumentException. Это страхует от потенциальных утечек памяти.

Свойства

  • val version: String — текущая версия SDK (read-only). Полезно для логирования и отчётов об ошибках.

  • var theme: ChatTheme? — светлая тема чата. Установите до вызова init(...). У ChatTheme три взаимоисключающих конструктора — выберите один уровень кастомизации:

    // Уровень 1 — цвета, изображения, типографика через токены:
    chatCenterUI.theme = ChatTheme(context, colors = myColors, images = myImages, typography = myTypography)
    // Уровень 2 — переопределение готовых UI-компонентов:
    chatCenterUI.theme = ChatTheme(chatComponents)
    // Уровень 3 — потоки экранов целиком (максимальная гибкость):
    chatCenterUI.theme = ChatTheme(chatFlows)

    У конструктора уровня 1 есть ещё параметр texts: ChatTexts (между images и typography), но он deprecated — переопределяйте строки через strings.xml вашего приложения.

  • var darkTheme: ChatTheme? — тёмная тема. Если не задана, SDK всегда использует светлую:

    chatCenterUI.darkTheme = ChatTheme(darkComponents)

    Подробнее о различиях между формами и о составе ChatColors / ChatComponents / ChatFlowsДизайн-система → Темы.

Синхронная инициализация: init()

fun init(providerUid: String, config: ChatConfig)
fun init(providerUid: String, appMarker: String, config: ChatConfig)
ПараметрТипОбязательныйОписание
providerUidStringДаИдентификатор приложения, выданный edna. В админке edna Chat Center отображается как ID провайдера на вкладке «Установка» Android-канала — см. Подключение мобильного чата Android
appMarkerStringТолько во 2-й перегрузкеМаркер приложения в рамках одной платформы
configChatConfigДаПараметры подключения и поведения. См. ChatConfig

appMarker нужен, когда под одним providerUid работает несколько Android-приложений (например, prod и staging) — он позволяет серверу edna различать их при маршрутизации сообщений и в аналитике. Если приложение одно, используйте перегрузку init(providerUid, config) без appMarker. Конкретное значение appMarker согласуется с edna при интеграции.

init() — до любых других вызовов SDK

init(...) должен быть вызван до authorize(...), handlePushMessage(...) / handleFCMMessage(...) — любой такой вызов до завершения init() приведёт к IllegalStateException.

Методы getChatFragment() / getChatActivity() исключения не бросают — они возвращают null, если соответствующий экран ещё не открыт (и в том числе до init()).

Вызывайте init(...) один раз — обычно в Application.onCreate(). Повторный вызов как публичный контракт не поддерживается.

Асинхронная инициализация: initAsync()

fun initAsync(
providerUid: String,
config: ChatConfig,
coroutineContext: CoroutineContext = Dispatchers.Main,
onInitComplete: () -> Unit = {}
)

fun initAsync(
providerUid: String,
appMarker: String,
config: ChatConfig,
coroutineContext: CoroutineContext = Dispatchers.Main,
onInitComplete: () -> Unit = {}
)

Используйте, когда конфигурация загружается с сервера или инициализация не должна блокировать основной поток.

ПараметрТипОбязательныйПо умолч.Описание
providerUidStringДаИдентификатор приложения, выданный edna
appMarkerStringТолько во 2-й перегрузкеМаркер приложения в рамках одной платформы
configChatConfigДаПараметры подключения и поведения. См. ChatConfig
coroutineContextCoroutineContextНетDispatchers.MainКонтекст, в котором выполняется инициализация. Используйте Dispatchers.Default / Dispatchers.IO для фона
onInitComplete() -> UnitНет{}Callback после завершения инициализации (см. caution ниже про UI thread)
chatCenterUI.initAsync(
providerUid = "YOUR_PROVIDER_UID",
config = chatConfig
) {
// SDK инициализирован — можно вызывать authorize()
chatCenterUI.authorize(chatUser, chatAuth)
}
onInitComplete и UI thread

Callback onInitComplete выполняется на том же coroutineContext, что был передан в initAsync(...). Если вы передаёте Dispatchers.Default или Dispatchers.IO, любое обращение к UI (показ фрагмента, навигация, диалоги) внутри callback нужно оборачивать в withContext(Dispatchers.Main) { ... }. При значении по умолчанию (Dispatchers.Main) дополнительных обёрток не требуется.

Async init + push-обработка

При использовании initAsync() обработку push-уведомлений в FirebaseMessagingService.onMessageReceived() необходимо отложить до вызова callback onInitComplete. Вызов handlePushMessage() или handleFCMMessage() до завершения init может привести к потере сообщения.

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