适用于 Android 的 Flutter

您可以通过多种方式设置移动应用以与 Contact Center AI 平台 (CCAI Platform) 搭配使用,包括使用 Flutter。本页介绍了如何使用 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:exported="true">
        <intent-filter>
          <action android:name="android.intent.action.VIEW"/>
          <category android:name="android.intent.category.DEFAULT"/>
          <category android:name="android.intent.category.BROWSABLE"/>
          <!-- TODO: Change to your custom URL scheme. Config from Portal > Developer Settings > Mobile App > Enable Send SMS to Download App > Android App > URL -->
          <data
            android:host="co.ujet.flutter_example_app"
            android:path="/smartchannel"
            android:scheme="ujet" />
        </intent-filter>
      </activity>
    
      <meta-data
            android:name="co.ujet.android.companyKey"
            android:value="@string/ujet_company_key"/>
      <meta-data
          android:name="co.ujet.android.companyName"
          android:value="@string/ujet_company_name"/>
      <meta-data
          android:name="co.ujet.android.subdomain"
          android:value="@string/ujet_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="@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_COMPANY_KEY</string>
      <string name="ujet_company_name">YOUR_COMPANY_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) following below instructions. -->
      <!-- To get subdomain, extract string content between 'https://' and first '.' of your tenant/portal URL.
          Example, If your tenant url is https://XXX.YYY.ZZZ/ then subdomain will be XXX -->
      <string 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 subdomain) -->
      <string name="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:exported="false">
        <intent-filter>
          <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </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. 创建实现 FirebaseMessagingServiceMyFirebaseMessagingService,如以下代码示例所示:

    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()
          }
      }