Flutter per Android

Puoi configurare le app mobile per funzionare con Contact Center AI Platform (CCAI Platform) in diversi modi, ad esempio con Flutter. Questa pagina mostra come integrare l'SDK Android in un'app Android utilizzando Flutter.

Prima di iniziare

Prima di seguire le istruzioni riportate in questa pagina, devi seguire le istruzioni riportate in Eseguire l'integrazione utilizzando Flutter.

Integrare l'SDK in un'app per Android

Per integrare l'SDK in un'app per Android:

  1. Nel file android/build.gradle nella directory di esempio di Flutter, aggiorna minSdkVersion a 21 o versioni successive.

  2. Nel file android/src/main/AndroidManifest.xml, aggiungi quanto segue:

    <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. Nel tag <application>, aggiorna il valore android:name a .Application, come nel seguente esempio di codice:

    <!--Change the value of android:name to .Application -->
    <application
      android:name=".Application"
      android:label="Demo Application"
      android:icon="@mipmap/ic_launcher">
    
  4. Aggiorna android/build.gradle, come nell'esempio di codice seguente:

    allprojects {
      repositories {
        google()
        mavenCentral()
        maven {
          url "https://sdk.ujet.co/android/"
        }
      }
    }
    
  5. Aggiorna android/app/build.gradle, come nell'esempio di codice seguente:

    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. Aggiorna res/values/strings.xml, come nell'esempio di codice riportato di seguito. Crea questo se non esiste.

    <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. Crea un progetto Firebase o, se ne hai già uno, registra questa app. Scarica il file google-service.json e inseriscilo nel tuo progetto nella seguente directory: example/android/app/.

Registrare il modulo

Per registrare il modulo, apri MainActivity.kt e inizializza UJETModule, come nell'esempio di codice seguente:

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

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

Configurare le notifiche push di Android

Segui questi passaggi se vuoi integrare le notifiche push in modo nativo. Assicurati di aver copiato e incollato la directory firebase nel tuo progetto Android come indicato in Integrare l'SDK in un'app per Android.

Per configurare le notifiche push di Android:

  1. Aggiungi una dipendenza Firebase per le notifiche push nel file build.gradle a livello di app, come nell'esempio di codice seguente:

    dependencies {
      implementation platform("com.google.firebase:firebase-bom:32.8.0")
      implementation 'com.google.firebase:firebase-messaging'
    }
    
  2. Aggiorna AndroidManifest.xml, come nell'esempio di codice seguente:

    <application>
      <service
        android:name=".firebase.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
          <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
      </service>
    </application>
    
  3. Aggiungi un plug-in google-services a livello di root del progetto in build.gradle, come nel seguente esempio di codice:

    plugins {
      id 'com.google.gms.google-services' version '4.3.8' apply false
    }
    
  4. Aggiungi un plug-in google-services a livello di app del tuo progetto in build.gradle, come nel seguente esempio di codice:

    plugins {
      id "com.android.application"
      id "kotlin-android"
      id "dev.flutter.flutter-gradle-plugin"
      id 'com.google.gms.google-services'  // google-services plugin
    }
    
  5. Crea MyFirebaseMessagingService che implementa FirebaseMessagingService, come nel seguente esempio di codice:

    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. Crea FirebaseTokenManager, come nel seguente esempio di codice:

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