Инициализация SDK
Класс ChatCenterUI — это точка входа в SDK. Создайте один экземпляр в Application.onCreate() и используйте его на протяжении всего жизненного цикла приложения.
Конструктор
ChatCenterUI(appContext: Context, logger: ChatLoggerConfig? = null)
| Параметр | Тип | Обязательный | По умолч. | Описание |
|---|---|---|---|---|
appContext | Context | Да | — | applicationContext вашего приложения |
logger | ChatLoggerConfig? | Нет | 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)
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
providerUid | String | Да | Идентификатор приложения, выданный edna. В админке edna Chat Center отображается как ID провайдера на вкладке «Установка» Android-канала — см. Подключение мобильного чата Android |
appMarker | String | Только во 2-й перегрузке | Маркер приложения в рамках одной платформы |
config | ChatConfig | Да | Параметры подключения и поведения. См. ChatConfig |
appMarker нужен, когда под одним providerUid работает несколько Android-приложений (например, prod и staging) — он позволяет серверу edna различать их при маршрутизации сообщений и в аналитике. Если приложение одно, используйте перегрузку init(providerUid, config) без appMarker. Конкретное значение appMarker согласуется с edna при интеграции.
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 = {}
)
Используйте, когда конфигурация загружается с сервера или инициализация не должна блокировать основной поток.
| Параметр | Тип | Обязательный | По умолч. | Описание |
|---|---|---|---|---|
providerUid | String | Да | — | Идентификатор приложения, выданный edna |
appMarker | String | Только во 2-й перегрузке | — | Маркер приложения в рамках одной платформы |
config | ChatConfig | Да | — | Параметры подключения и поведения. См. ChatConfig |
coroutineContext | CoroutineContext | Нет | 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)
}
Callback onInitComplete выполняется на том же coroutineContext, что был передан в initAsync(...). Если вы передаёте Dispatchers.Default или Dispatchers.IO, любое обращение к UI (показ фрагмента, навигация, диалоги) внутри callback нужно оборачивать в withContext(Dispatchers.Main) { ... }. При значении по умолчанию (Dispatchers.Main) дополнительных обёрток не требуется.
При использовании initAsync() обработку push-уведомлений в FirebaseMessagingService.onMessageReceived() необходимо отложить до вызова callback onInitComplete. Вызов handlePushMessage() или handleFCMMessage() до завершения init может привести к потере сообщения.
Связанные разделы
- Быстрый старт — три шага до первого открытия чата.
- Жизненный цикл — где именно вызывать
initв архитектуре приложения. - Параметры ChatConfig — полный список конфигурационных полей.