Перейти до основного вмісту
ДокументаціяAndroid
Версія 0.2.0Android API 26 або новіша

Інтегруйте DobroDesk Android SDK

Установіть опублікований Android bundle, зареєструйте локальний Maven-репозиторій і відкривайте нативний віджет з Activity.

На цій сторінці

Ваш Android застосунок відкриває віджет DobroDesk із захищеним станом акаунта та явними повторами дій.

Установіть Android release bundle

Завантажте https://github.com/comstud-io/dobrodesk-mobile-sdk/releases/download/v0.2.0/dobrodesk-mobile-sdk-0.2.0-bundle.tar.gz і розпакуйте в стабільну директорію, яку не додавайте до вихідного коду застосунку або публічного завантаження. Архів містить локальний Maven-репозиторій у native/maven. Зареєструйте цю директорію у файлі налаштувань хоста, щоб проєкти Gradle з FAIL_ON_PROJECT_REPOS залишалися коректними. Цей реліз Mobile SDK 0.2.0 додає inline-нативні поверхні та виправлення обгорток. Також він містить виправлення Android для захищеного сховища. Публічний API та контракт нативного UI залишаються сумісними.

Підтримується Android API 26 і новіші версії. Базові артефакти не завантажуються з Maven Central. Voice і push мають окремі координати та не повинні додаватися, якщо хост не готовий самостійно керувати відповідними дозволами й провайдерами.

Для нативного Android-прикладу використовуйте перевірений набір прямого Android-хоста: Android Gradle Plugin 8.13.2, Kotlin Gradle Plugin 2.2.0, Gradle 8.14.3 і Java 17 разом із compileSdk 36 та minSdk 26. В іншому актуальному Android-проєкті зберігайте версії, згенеровані його Android- або framework-релізом, якщо вони сумісні з SDK.

Налаштування Gradle та модуль застосунку
import org.gradle.api.initialization.resolve.RepositoriesMode

dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
    maven { url = uri("<extracted-bundle>/native/maven") }
  }
}

// android/app/build.gradle.kts
android {
  compileSdk = 36
  defaultConfig { minSdk = 26 }
  compileOptions {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
  }
}

Оголосіть три базові Android-артефакти

Розпакований локальний репозиторій містить координати рушія, UI-контролера та UI AAR. Оголосіть усі три в модулі застосунку. Обгортка не додає репозиторій на рівні проєкту й непомітно не включає додаткові voice та push модулі.

Залежності модуля застосунку
dependencies {
  implementation("com.dobrodesk:dobrodesk-sdk:0.2.0")
  implementation("com.dobrodesk:dobrodesk-ui-controller:0.2.0")
  implementation("com.dobrodesk:dobrodesk-ui:0.2.0")
}

Відкрийте віджет із foreground Activity

Наведені далі функції хоста викликають endpoint токена вашого бекенда та повертають стабільний ID поточного клієнта й короткоживучий identity JWT. SDK відкриває віджет лише коли Activity перебуває на передньому плані.

MainActivity.kt
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.lifecycle.lifecycleScope
import com.dobrodesk.sdk.DobroDeskConfiguration
import com.dobrodesk.sdk.ui.DobroDeskAndroidClientFactory
import com.dobrodesk.sdk.ui.DobroDeskWidgetBridgePresenter
import java.time.Duration
import kotlinx.coroutines.launch

class MainActivity : ComponentActivity() {
  private var presenter: DobroDeskWidgetBridgePresenter? = null
  private val client by lazy {
    DobroDeskAndroidClientFactory.create(
      context = this,
      configuration = DobroDeskConfiguration(
        apiOrigin = "https://dobrodesk.com",
        integrationId = "wgt_0123456789abcdef0123456789abcdef",
        accountScope = currentCustomerId(),
        credentialProvider = { loadDobroDeskToken() },
        pollInterval = Duration.ofSeconds(1),
      ),
    )
  }

  override fun onCreate(state: Bundle?) {
    super.onCreate(state)
    lifecycleScope.launch {
      presenter = DobroDeskWidgetBridgePresenter.present(
        activity = this@MainActivity,
        client = client,
        options = mapOf("locale" to "en"),
        onClosed = { presenter = null },
      )
    }
  }

  override fun onDestroy() {
    presenter?.detach()
    presenter = null
    super.onDestroy()
  }
}

Вбудуйте віджет або використайте власний тригер

Передайте suspend helper foreground Activity і вже підключений до window FrameLayout. Helper створить потрібні опції JsonObject, додасть handle.view через Dispatchers.Main.immediate і закриє handle, якщо host від'єднається до або після монтування.

Власна Button може відкрити модальний presenter або викликати setVisible для inline handle. Зберігайте той самий client під час повторної навігації.

API вбудованого відображення входять до опублікованих артефактів Mobile SDK 0.2.0. Використовуйте inline-поверхню, коли розміщення контролює хост, а модальне відкриття, коли хосту потрібен повноекранний сценарій.

Вбудована презентація Kotlin
import android.app.Activity
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import com.dobrodesk.sdk.DobroDeskClient
import com.dobrodesk.sdk.ui.DobroDeskWidgetBridgePresenter
import com.dobrodesk.sdk.ui.DobroDeskWidgetEmbeddedHandle
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.put

suspend fun mountSupportPanel(
  activity: Activity,
  client: DobroDeskClient,
  supportContainer: FrameLayout,
): DobroDeskWidgetEmbeddedHandle? {
  check(supportContainer.isAttachedToWindow) {
    "Attach the support container before mounting the widget"
  }
  var embeddedHandle: DobroDeskWidgetEmbeddedHandle? = null
  val detachListener = object : View.OnAttachStateChangeListener {
    override fun onViewAttachedToWindow(view: View) = Unit
    override fun onViewDetachedFromWindow(view: View) {
      embeddedHandle?.close()
    }
  }
  val handle = DobroDeskWidgetBridgePresenter.createEmbedded(
    activity = activity,
    client = client,
    options = buildJsonObject {
      put("locale", "en")
      put("view", "home")
    },
    onClosed = {
      supportContainer.removeOnAttachStateChangeListener(detachListener)
      embeddedHandle = null
    },
  )
  embeddedHandle = handle
  var attached = false
  withContext(Dispatchers.Main.immediate) {
    if (supportContainer.isAttachedToWindow && !activity.isFinishing && !activity.isDestroyed) {
      supportContainer.addView(
        handle.view,
        ViewGroup.LayoutParams(
          ViewGroup.LayoutParams.MATCH_PARENT,
          ViewGroup.LayoutParams.MATCH_PARENT,
        ),
      )
      supportContainer.addOnAttachStateChangeListener(detachListener)
      handle.setVisible(true)
      attached = true
    }
  }
  if (!attached) {
    handle.close()
    return null
  }
  return handle
}

Опрацюйте життєвий цикл Android та ідентичність

credentialProvider — це suspend-функція хоста, яка повертає короткоживучий customer identity JWT. Нативний код захищає довговічну outbox через Android Keystore і прив'язує її до accountScope. Не зберігайте support API token у налаштуваннях застосунку.

Викликайте presenter.close(), коли екран хоста знищується, а client.resetSession(), коли клієнт відкидає розмову. Прямий Android-клієнт не має logout: скиньте його, відкиньте й створіть новий client перед зміною accountScope. Якщо явний override не передано, віджет дотримується системного reduced motion.

Керуйте завантаженням, від'єднанням і доступністю

Нативний віджет показує завантаження повідомлень, очікування помічника та повтори. Використовуйте події client для стану екрана й тримайте view змонтованим під час очікування надсилання.

setVisible(false) приховує поверхню без скидання сесії, а setVisible(true) повертає її після повторного підключення. close зберігає чернетку та outbox. Рух узгоджується із системними налаштуваннями, host відповідає за insets і клавіатуру.

  1. Зберігайте один DobroDeskWidgetEmbeddedHandle на client і блокуйте повторне створення відкритого inline handle.
  2. Викликайте setVisible(false) під час тимчасового від'єднання та setVisible(true) після повторного підключення.
  3. Викликайте close лише після завершення поверхні, а reset або logout — для навмисної зміни акаунта чи розмови.

Перевірте Android-флоу

  1. Відкрийте віджет із foreground Activity і перевірте, що повторне натискання не створює presenter поверх уже відкритого.
  2. Надішліть повідомлення зі стабільним idempotency key, відправте застосунок у фон і відкрийте його знову. Після відновлення мережі перевірте, що повідомлення повторюється з тим самим ключем.
  3. Використовуйте resetSession для свідомого відкидання. Скиньте й відкиньте прямий client перед перемиканням акаунта, створіть новий client і перевірте, що наступний акаунт починає з порожньої розмови.

Перегляд нативних SDK

Подивіться, як один і той самий сценарій підтримки виглядає з нативними елементами iOS та Android.

Екран чату нативного Android SDK DobroDesk з локалізованими повідомленнями клієнта й асистента, нативним полем введення та нижньою навігацією
Android SDK: локалізована розмова з підтримкою, нативне поле введення та нижня навігація.