‫Flutter ל-Android

יש כמה דרכים להגדיר אפליקציות לנייד כך שיפעלו עם Contact Center AI Platform (פלטפורמת CCAI), כולל באמצעות Flutter. בדף הזה מוסבר איך לשלב את Android SDK באפליקציית Android באמצעות Flutter.

לפני שמתחילים

לפני שמבצעים את ההוראות בדף הזה, צריך קודם לפעול לפי ההוראות שבקטע שילוב באמצעות Flutter.

שילוב ה-SDK באפליקציה ל-Android

כדי לשלב את ה-SDK באפליקציה ל-Android, פועלים לפי השלבים הבאים:

  1. בקובץ android/build.gradle בספריית הדוגמה של Flutter, מעדכנים את 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

כדי לשלב התראות פוש באופן מקורי, פועלים לפי השלבים הבאים. חשוב לוודא שהעתקתם והדבקתם את ספריית Firebase בפרויקט Android, כמו שמוסבר במאמר שילוב ה-SDK באפליקציה ל-Android.

כדי להגדיר התראות פוש ב-Android, מבצעים את השלבים הבאים:

  1. מוסיפים תלות ב-Firebase להתראות פוש בקובץ build.gradle ברמת האפליקציה, כמו בדוגמת הקוד הבאה:

    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. מוסיפים פלאגין google-services ברמת השורש של הפרויקט ב-build.gradle, כמו בדוגמת הקוד הבאה:

    plugins {
      id 'com.google.gms.google-services' version '4.3.8' apply false
    }
    
  4. מוסיפים פלאגין google-services ברמת האפליקציה של הפרויקט ב-build.gradle, כמו בדוגמת הקוד הבאה:

    plugins {
      id "com.android.application"
      id "kotlin-android"
      id "dev.flutter.flutter-gradle-plugin"
      id 'com.google.gms.google-services'  // google-services plugin
    }
    
  5. יוצרים את MyFirebaseMessagingService שמטמיע את FirebaseMessagingService, כמו בדוגמת הקוד הבאה:

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