Android 版 Flutter

您可以透過多種方式設定行動應用程式,使其與 Contact Center AI Platform (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 專案,或註冊這個應用程式 (如果您已有專案)。 下載 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()
          }
      }