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

Настройка

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

Конфигурация

В Application.onCreate(), или в другом удобном для вас месте необходимо инициализировать библиотеку. Для этого создайте объект ChatCenterUI(applicationContext) (можно также вторым параметром передать logger: ChatLoggerConfig, если вы хотите включить внутреннее логирования), после чего вызовите через этот объект метод:

 fun init(providerUid: String, appMarker: String, config: ChatConfig)

Подробнее о его параметрах смотрите в разделе с описанием методов SDK в пакете edna.chatcenter.ui.visual.core. Пожалуйста, убедитесь, что обращений к библиотеке нет до ее инициализации. Вместе с инициализацией можно передать параметры для светлой и темной темы. Данные параметры опциональны. В SDK уже заданы параметры по-умолчанию для светлой темы, если вы не определите свои. В случае, если не определена темная тема, внутри SDK всегда будет использоваться светлая тема.

Пример инициализации:

 // Задаем конфигурацию для внутреннего логирования в SDK. Необязательный параметр
val loggerConfig = ChatLoggerConfig(
applicationContext,
logFileSize = 50
)

// Задаем конфигурацию сервера
val server = serversProvider.readServersFromFile().first()
val transportConfig = ChatTransportConfig(
server.serverBaseUrl,
server.threadsGateUrl,
server.datastoreUrl,
hashMapOf(), // задайте datastore headers, если необходимо
apiVersion = apiVersion
)

// Задаем SSL pinning, если необходимо
val certificates = server.trustedSSLCertificates.map { ChatSSLCertificate(it) }.toTypedArray()
val networkConfig = ChatNetworkConfig(
HTTPConfig(),
WSConfig(),
SSLPinningConfig(certificates, server.allowUntrustedSSLCertificate)
)

// Основная конфигурация чата
val chatConfig = ChatConfig(
transportConfig,
networkConfig,
searchEnabled = true,
linkPreviewEnabled = true,
voiceRecordingEnabled = true,
chatSubtitleEnabled = true,
autoScrollToLatest = true
).apply {
userInputEnabled = server.isInputEnabled
}

// Создает объект класса SDK, передаем темы оформления, если необходимо,
// после чего необходимо вызвать метод "init(...)"
chatCenterUI = ChatCenterUI(applicationContext, loggerConfig).apply {
theme = chatLightTheme
darkTheme = chatDarkTheme
init(server.threadsGateProviderUid, server.appMarker, chatConfig)
}
  • appMarker - идентификатор приложения. edna Android поддерживает подключение нескольких приложений к одному серверу (подробнее см Настройка поведения и внешнего вида). Для этого нужно настроить идентификатор на сервере и в приложениях. В качестве appMarker может быть любая уникальная строка. appMarker должен быть одинаковым у соответствующих Android и iOS приложений.
подсказка

Подробнее форматы параметров и файлов вы можете посмотреть в коде тестового проекта. При возникновении вопросов обращайтесь на support@edna.ru

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

Перед работой с чатом нужно инициализировать пользователя: fun authorize(client: ChatUser, auth: ChatAuth?)

Пример:

```kotlin
chatCenterUI.authorize(
ChatUser(user.userId, data = user.userData.jsonStringToMap()),
ChatAuth(
user.authorizationHeader,
user.xAuthSchemaHeader,
signature = user.signature
)
)
```

Кроме того, доступен метод с принудительной регистрацией до входа в чат: fun forceAuthorize(client: ChatUser, auth: ChatAuth?)

В этом случае sdk отправит при вызове данного метода запрос на регистрацию девайса и, если чат еще не отображен на экране, закроет сокет. Также в этом случае ваш бот (если он у вас настроен) не будет вам в первый раз слать сообщение в ответ. Таким образом, вы можете сделать скрытую регистрацию пользователя до входа в чат._

Первый параметр, ChatUser, представляет собой реализацию следующего класса:

```kotlin
data class ChatUser(
/**
* Идентификатор пользователя. Обязательное поле
*/
val identifier: String,
/**
* Имя пользователя
*/
val name: String? = null,
/**
* Данные пользователя для отображения у оператора
*/
val data: Map<String, String>? = null
)
```

Второй параметр, ChatAuth:

```kotlin
data class ChatAuth(
/**
* Токен авторизации
*/
val token: String?,
/**
* Схема авторизации
*/
val scheme: String?,
/**
* Метод авторизации
*/
val method: ChatAuthType = ChatAuthType.HEADERS,
/**
* Подпись
*/
val signature: String?,
/**
* Шифрование client id
*/
val isEncrypted: Boolean = false
)
```
  • isEncrypted - данный параметр должен быть true, если identifier передается в зашифрованном виде.
предупреждение

Обязательный параметр только identifier. Он должен быть уникальным, и всегда относится к одному и тому же пользователю. Избегайте использования в качестве идентификатора номера телефона, адреса электронной почты и прочих идентификаторов привязанных к данным пользователя.

Логаут пользователя

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

Отображение чата

Отобразить чат можно двумя способами:

  • В активности - startActivity(new Intent(this, ChatActivity.class))
  • Во фрагменте
    • Создать ChatFragment.newInstance() и показать в нужном вам контейнере
    • Передавать нажатия кнопки "назад" и проверять нужно ли закрыть чат:
override fun onBackPressed() {
val needsCloseChat: Boolean = chatFragment.onBackPressed()
if (needsCloseChat) {
//hide chatfragment
}
}
подсказка

SDK представляет собой фрагмент чата - вы можете самостоятельно настроить отступы контейнера. В Android 15 стал обязательным подход "edge-to-edge", описанный здесь: https://developer.android.com/develop/ui/views/layout/edge-to-edge Если вам не нужен особый размер отступов, и фрагмент чата будет занимать весь экран, вы можете в ChatFlow включить настройку fullScreenMode, которая добавит отступы для системных панелей