Flutter pour Android

Vous pouvez configurer des applications mobiles pour qu'elles fonctionnent avec Contact Center AI Platform (CCAI Platform) de différentes manières, y compris avec Flutter. Cette page vous explique comment intégrer le SDK Android dans une application Android à l'aide de Flutter.

Avant de commencer

Avant de suivre les instructions de cette page, vous devez d'abord suivre l' instruction de la section Intégrer à l'aide de Flutter.

Intégrer le SDK dans une application Android

Pour intégrer le SDK dans une application Android, procédez comme suit :

  1. Dans le fichier android/build.gradle du répertoire de votre exemple Flutter, remplacez minSdkVersion par 21 ou une version ultérieure.

  2. Dans le fichier android/src/main/AndroidManifest.xml, ajoutez les éléments suivants :

    <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. Dans le tag <application>, remplacez la valeur android:name par .Application, comme dans l'exemple de code suivant :

    <!--Change the value of android:name to .Application -->
    <application
      android:name=".Application"
      android:label="Demo Application"
      android:icon="@mipmap/ic_launcher">
    
  4. Mettez à jour android/build.gradle, comme dans l'exemple de code suivant :

    allprojects {
      repositories {
        google()
        mavenCentral()
        maven {
          url "https://sdk.ujet.co/android/"
        }
      }
    }
    
  5. Mettez à jour android/app/build.gradle, comme dans l'exemple de code suivant :

    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. Mettez à jour res/values/strings.xml, comme dans l'exemple de code suivant. Créez ce fichier s'il n'existe pas.

    <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. Créez un projet Firebase ou, si vous en avez déjà un, enregistrez cette application. Téléchargez le fichier google-service.json et placez-le dans votre projet dans le répertoire suivant : example/android/app/.

Enregistrer le module

Pour enregistrer le module, ouvrez MainActivity.kt et initialisez UJETModule, comme dans l'exemple de code suivant :

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

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

Configurer les notifications push Android

Procédez comme suit si vous souhaitez intégrer des notifications push de manière native. Assurez-vous d'avoir copié et collé le répertoire Firebase dans votre projet Android comme indiqué dans la section Intégrer le SDK dans une application Android.

Pour configurer les notifications push Android, procédez comme suit :

  1. Ajoutez une dépendance Firebase pour les notifications push dans le fichier build.gradle au niveau de l'application, comme dans l'exemple de code suivant :

    dependencies {
      implementation platform("com.google.firebase:firebase-bom:32.8.0")
      implementation 'com.google.firebase:firebase-messaging'
    }
    
  2. Mettez à jour AndroidManifest.xml, comme dans l'exemple de code suivant :

    <application>
      <service
        android:name=".firebase.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
          <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
      </service>
    </application>
    
  3. Ajoutez un plug-in google-services au niveau racine de votre projet dans build.gradle, comme dans l'exemple de code suivant :

    plugins {
      id 'com.google.gms.google-services' version '4.3.8' apply false
    }
    
  4. Ajoutez un plug-in google-services au niveau de l'application de votre projet dans build.gradle, comme dans l'exemple de code suivant :

    plugins {
      id "com.android.application"
      id "kotlin-android"
      id "dev.flutter.flutter-gradle-plugin"
      id 'com.google.gms.google-services'  // google-services plugin
    }
    
  5. Créez MyFirebaseMessagingService qui implémente FirebaseMessagingService, comme dans l'exemple de code suivant :

    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. Créez FirebaseTokenManager, comme dans l'exemple de code suivant :

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