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

Настройка

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

  1. В 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

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

    Пример:

    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, представляет собой реализацию следующего класса:

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

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

    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. Он должен быть уникальным, и всегда относится к одному и тому же пользователю. Избегайте использования в качестве идентификатора номера телефона, адреса электронной почты и прочих идентификаторов привязанных к данным пользователя.

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

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

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