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

Внедрение в жизненный цикл приложения

Описание процесса интеграции ChatCenterUI SDK, с синхронизацией жизненных циклов основного приложения (App Lifecycle) и SDK.

Общая схема взаимодействия

Диаграмма ниже демонстрирует, как события жизненного цикла приложения должны инициировать соответствующие методы SDK для типовой интеграции.


1. Запуск приложения

Инициализацию SDK рекомендуется проводить в классе Application в методе onCreate(), чтобы SDK был готов к обработке входящих push-уведомлений независимо от того, какая Activity запущена.

Создание экземпляра класса ChatCenterUI происходит максимально быстро и в процессе не выполняется никаких сетевых запросов.

Файл: App.kt

import android.app.Application
import edna.chatcenter.ui.visual.core.ChatCenterUI

class App : Application() {

lateinit var chatCenterUI: ChatCenterUI

override fun onCreate() {
super.onCreate()

// Создание экземпляра
chatCenterUI = ChatCenterUI(applicationContext, loggerConfig).apply {
// providerUid — уникальный ID приложения, выданный edna
init("providerUid", ChatConfig())
}
}
}

Объект ChatCenterUI имеет смысл хранить как Singleton (через класс Application или DI), чтобы к нему был доступ из любых слоёв приложения.


2. Авторизация пользователя

После того как ваше приложение авторизовало пользователя (например, выполнен вход в авторизованную зону), необходимо сообщить SDK данные пользователя. Это позволяет загрузить историю переписки конкретного клиента.

Файл: AuthViewModel.kt

import edna.chatcenter.ui.visual.core.ChatCenterUI
import edna.chatcenter.ui.core.models.UserInfo

fun handleSuccessfulLogin(
userId: String,
userName: String,
userEmail: String?
) {
// Получаем инстанс SDK (например, через DI или из Application)
val chatCenterUI: ChatCenterUI = /* получить экземпляр */

// Формируем объект пользователя
// uuid — неизменяемый идентификатор клиента в вашей системе
val userInfo = ChatUser(
userId,
userName,
mapOf(
"email" to (userEmail ?: "")
)
)

// Авторизация в SDK
chatCenterUI.authorize(userInfo)
}

3. Открытие чата

SDK предоставляет готовый ChatFragment, который можно встроить в Activity через FragmentManager или через Navigation Component.

Файл: MainActivity.kt

import edna.chatcenter.ui.visual.fragments.ChatFragment

fun openSupportChat() {
// Получаем инстанс SDK (например, через DI или из Application)
val chatCenterUI: ChatCenterUI = /* получить экземпляр */

val chatFragment = chatCenterUI.getChatFragment()

supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, chatFragment)
.addToBackStack(null)
.commit()

// Вариант с Navigation Component (если настроен graph):
// findNavController(R.id.nav_host_fragment)
// .navigate(R.id.action_global_chatFragment)
}

Перед открытием чата убедитесь, что пользователь уже авторизован в SDK (см. раздел «Логин пользователя»), иначе при открытии отобразится ошибка.


4. Выход пользователя

При выходе пользователя из аккаунта приложения необходимо разорвать сессию в SDK. Это удаляет локальные данные и отписывает устройство от пуш-уведомлений для этого пользователя.

Файл: ProfileViewModel.kt

import edna.chatcenter.ui.visual.core.ChatCenterUI

fun performLogout() {
val chatCenterUI: ChatCenterUI = /* получить экземпляр */

// Полная очистка сессии и данных пользователя
chatCenterUI.logout()

// Далее — навигация на экран логина приложения
navigateToLoginScreen()
}

В случае наличия в приложении авторизованной зоны (закрытой вводом пин-кода) и необходимости завершения текущией сессии при выходе из нее, можно использовать метод deauthorizeUser(), для локального удаления пользователя и прекращения сетевой активности СДК.

func performLogout() {
val chatCenterUI: ChatCenterUI = /* получить экземпляр */

// Локальное удаление пользователя и разрыв соединения
chatCenterUI.deauthorizeUser()

// Далее — навигация на экран логина приложения
navigateToLoginScreen()
}
примечание

При повторном входе в авторизованную зону пользователь должен быть установлен