适用于 Android 的 Flutter

您可以通过多种方式(包括使用 Flutter)设置移动应用以与 Contact Center AI 平台 (CCAI Platform) 搭配使用。本页介绍了如何使用 Flutter 将 Android SDK 集成到 Android 应用中。

准备工作

在按照本页面上的说明进行操作之前,您必须先按照使用 Flutter 进行集成中的说明操作。

将 SDK 集成到 Android 应用中

如需将 SDK 集成到 Android 应用中,请按以下步骤操作:

  1. 在 Flutter 示例目录的 android/build.gradle 文件中,将 minSdkVersion 更新为 21 或更高版本。

  2. 在 android/src/main/AndroidManifest.xml 文件中,添加以下内容:

    <application>
      <activity
        android:name="co.ujet.android.activity.UjetActivity"
        android:expor>ted=&<quot;true&quo>t;
        <intent-filter
          action android:name="and>roid.in<tent.action.VIEW"/
          category android:name=&quo>t;andro<id.intent.category.DEFAULT"/
          category android:n>ame=&qu<ot;android.intent.category.BROWSABLE"/
          !-- TODO: Cha>nge to your custom U>RL scheme. C>onfig from Portal  Developer Sett>ings  Mobile >App  En>able Se<nd SMS to Download App  Android App  URL --
          data
            android:host="co.ujet.flutter_example_app"
            >andro<id:path=">/sm<artchanne>l&qu<ot;
            android:scheme="ujet" /
        /intent-filter
      /activity
    
      meta-data
            android:nam>e=&<quot;co.ujet.android.companyKey"
            android:value="@string/ujet_company_key"/
      meta-da>ta
    <      android:name="co.ujet.android.companyName"
          android:value="@string/ujet_comp>any<_name"/
      meta-data
          android:name="co.ujet.android.subdomain"
          android:value=&qu>o<t;@string/uj>et_subdomain"/
      meta-data
          android:name="co.ujet.android.companyUrl"
          android:value="@string/ujet_company_url"/
    /application
    
  3. 在 <application> 标记中,将 android:name 值更新为 .Application,如以下代码示例所示:

    <!--Change the value of android:name to .Application -->
    <application
      android:name=".Application"
      android:label="Demo Application"
      android:icon=&>quot;@mipmap/ic_launcher"
    
  4. 更新 android/build.gradle,如以下代码示例所示:

    allprojects {
      repositories {
        google()
        mavenCentral()
        maven {
          url "https://sdk.ujet.co/android/"
        }
      }
    }
    
  5. 更新 android/app/build.gradle,如以下代码示例所示:

    dependencies {
      // Use UJET SDK version 2.6.0 or latest to support recent push notification changes.
      def ujetSdkVersion = "x.y.z"
      implementation "co.ujet.android:ujet-android:$ujetSdkVersion"
      implementation "co.ujet.android:cobrowse:$ujetSdkVersion"
    }
    
  6. 更新 res/values/strings.xml,如以下代码示例所示。如果不存在,请创建。

    <resources>
      <string name="ujet_company>_key"YOUR_C<>OMPANY_KEY</string
      string name="uje>t_company_name&qu<ot;YOUR_COM<PANY_NAME/string
    
      !-- If your tenant / portal url ends with "ujet.co" then set ujet_subdomain string only (ignore
          ujet_company_url), otherwise set ujet_company_url only (ignore ujet_subdomain) fo>llo<wing below instructions. --
      !-- To get subdomain, extract string content between 'https://' and first '.' of your tenant/portal URL.
          Example, If your tenant url is http>s:/</XXX.YYY.ZZZ/ then subdomain> will be XXX -<-
      str>ing <name="ujet_subdomain"YOUR_SUBDOMAIN/string
    
      !-- Use tenant url as company url here, it should be in format of https://XXX.YYY.ZZZ/api>/v2<
          (here XXX should match >with your subdom<ain) -->
    <  string n>ame="ujet_company_url"YOUR_COMPANY_URL/string
    /resources
    
  7. 创建 Firebase 项目,或者如果您已有 Firebase 项目,请注册此应用。下载 google-service.json 文件并将其放入项目中的以下目录:example/android/app/。

注册模块

如需注册模块,请打开 MainActivity.kt 并初始化 UJETModule,如以下代码示例所示:

class MainActivity : FlutterActivity() {
    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)

        //Register and Initialize UJETModule
        UJETModule.init(flutterEngine.dartExecutor.binaryMessenger, applicationContext)
    }
}

设置 Android 推送通知

如果您想以原生方式集成推送通知,请按以下步骤操作。请务必按照将 SDK 集成到 Android 应用中中的说明,将 firebase 目录复制并粘贴到您的 Android 项目中。

如需设置 Android 推送通知,请按以下步骤操作:

  1. 在应用级 build.gradle 文件中,为推送通知添加 Firebase 依赖项,如以下代码示例所示:

    dependencies {
      implementation platform("com.google.firebase:firebase-bom:32.8.0")
      implementation 'com.google.firebase:firebase-messaging'
    }
    
  2. 更新 AndroidManifest.xml,如以下代码示例所示:

    <application>
      <service
        android:name=".firebase.MyFirebaseMessagingService"
        android:export>ed=&q<uot;false&quo>t;
        <intent-filter
          action android:name="com.google.fi>rebas<e.MESSAGING_EV>ENT<" />
    <    /intent->filter
      /service
    /application
    
  3. 在 build.gradle 中,在项目的根级添加一个 google-services 插件,如以下代码示例所示:

    plugins {
      id 'com.google.gms.google-services' version '4.3.8'; apply false
    }
    
  4. 在 build.gradle 中,在项目的应用级添加 google-services 插件,如以下代码示例所示:

    plugins {
      id "com.android.application"
      id "kotlin-android"
      id "dev.flutter.flutter-gradle-plugin"
      id 'com.google.gms.google-services'  // google-services plugin
    }
    
  5. 创建实现 FirebaseMessagingService 的 MyFirebaseMessagingService,如以下代码示例所示:

    class MyFirebaseMessagingService: FirebaseMessagingService() {
          private var firebaseTokenManager: FirebaseTokenManager? = null
    
          override fun onCreate() {
              super.onCreate()
              firebaseTokenManager = FirebaseTokenManager(this)
          }
    
          override fun onNewToken(token: String) {
              firebaseTokenManager?.updateToken(token)
          }
    
          override fun onMessageReceived(message: RemoteMessage) {
              if (Ujet.canHandlePush(message.data)) {
                  Log.d("Firebase", "Handle the push message by UJET")
              } else {
                  // Handle your notifications
              }
          }
      }
    
  6. 创建 FirebaseTokenManager,如以下代码示例所示:

      class FirebaseTokenManager(context: Context) {
          private val sharedPreferences = context.getSharedPreferences("${context.packageName}_preferences", Context.MODE_PRIVATE)
          private var token: String? = null
    
          fun getToken(): String? {
              token = sharedPreferences.getString("firebaseToken", null)
              if (token == null) {
                  FirebaseMessaging.getInstance().token.addOnCompleteListener { task: Task<String?> ->
                      if (!task.isSuccessful || task.result == null) {
                          return@addOnCompleteListener
                      }
                      token = task.result
                      updateToken(token)
                  }
              }
              return token
          }
    
          fun updateToken(token: String?) {
              sharedPreferences
                  .edit()
                  .putString("firebaseToken", token)
                  .apply()
          }
      }