הגדרת אפליקציית לקוח של העברת הודעות בענן ב-Firebase ב-Flutter

כדי להגדיר לקוח FCM ב-Flutter, פועלים לפי השלבים הבאים.

הגדרות ודרישות ספציפיות לפלטפורמה

חלק מהשלבים הנדרשים תלויים בפלטפורמה שאליה אתם מטרגטים.

iOS+

הפעלת יכולות של אפליקציות ב-Xcode

כדי שהאפליקציה תתחיל לקבל הודעות, צריך להפעיל התראות דחיפה ומצבי רקע בפרויקט Xcode.

  1. פותחים את סביבת העבודה של פרויקט Xcode (ios/Runner.xcworkspace).
  2. מפעילים את ההתראות.
  3. מפעילים את המצב 'ביצוע ברקע' של אחזור ברקע ושל התראות מרחוק.

העלאת מפתח האימות של APNs

לפני שמשתמשים ב-FCM, צריך להעלות את האישור של APNs ל-Firebase. אם עדיין אין לכם אישור APNs, תוכלו ליצור אותו במרכז החברים של Apple Developer.

  1. בפרויקט במסוף Firebase, לוחצים על סמל גלגל השיניים, בוחרים באפשרות Project Settings (הגדרות הפרויקט) ואז בוחרים בכרטיסייה Cloud Messaging (Cloud Messaging).
  2. לוחצים על הלחצן Upload Certificate (העלאת אישור) לאישור הפיתוח, לאישור הייצור או לשניהם. צריך להזין לפחות תמונה אחת.
  3. לכל אישור, בוחרים את הקובץ עם הסיומת ‎ .p12 ומזינים את הסיסמה, אם יש כזו. מוודאים שמזהה החבילה של האישור תואם למזהה החבילה של האפליקציה. בוחרים באפשרות Save (שמירה).

שינוי פונקציונליות של שיטה

כדי להשתמש בפלאגין של FCM ל-Flutter במכשירי Apple, אסור להשבית את ההחלפה של שיטות (method swizzling). צריך לבצע החלפה של קוד (swizzling), כי בלי זה תכונות מרכזיות של Firebase, כמו טיפול באסימונים של FCM, לא יפעלו כמו שצריך.

Android

Google Play Services

כדי להשתמש בלקוחות FCM, נדרשים מכשירים עם Android בגרסה 4.4 ואילך, שבהם מותקנת גם אפליקציית Google Play Services, או אמולטור שפועל עם Android בגרסה 4.4 עם ממשקי Google API. חשוב לזכור שאתם לא מוגבלים לפריסה של אפליקציות ל-Android דרך חנות Google Play.

אפליקציות שמסתמכות על Play Services SDK צריכות תמיד לבדוק במכשיר אם יש קובץ APK תואם של Google Play Services לפני שהן ניגשות לתכונות של Google Play Services. מומלץ לעשות זאת בשני מקומות: ב-method‏ onCreate() של הפעילות הראשית וב-method‏ onResume() שלה. הבדיקה ב-onCreate() מבטיחה שלא ניתן להשתמש באפליקציה בלי בדיקה מוצלחת. הבדיקה ב-onResume() מבטיחה שאם המשתמש יחזור לאפליקציה שפועלת באמצעים אחרים, למשל באמצעות לחצן החזרה, הבדיקה עדיין תתבצע.

אם במכשיר לא מותקנת גרסה תואמת של Google Play Services, האפליקציה יכולה להפעיל את GoogleApiAvailability.makeGooglePlayServicesAvailable() כדי לאפשר למשתמשים להוריד את Google Play Services מ-Play Store.

אינטרנט

הגדרת פרטי כניסה לאינטרנט באמצעות FCM

בממשק האינטרנט של FCM נעשה שימוש בפרטי כניסה לאינטרנט שנקראים מפתחות VAPID (Voluntary Application Server Identification), כדי לאשר שליחת בקשות לשירותי דחיפה באינטרנט נתמכים. כדי להירשם לקבלת התראות דחיפה באפליקציה, צריך לשייך זוג מפתחות לפרויקט Firebase. אפשר ליצור זוג מפתחות חדש או לייבא את זוג המפתחות הקיים דרך מסוף Firebase.

יצירת זוג מפתחות חדש
  1. פותחים את הכרטיסייה Cloud Messaging בחלונית Settings במסוף Firebase, וגוללים לקטע Web configuration.

  2. בכרטיסייה Web Push certificates, לוחצים על Generate Key Pair. במסוף תוצג הודעה על כך שזוג המפתחות נוצר, וגם המחרוזת של המפתח הציבורי והתאריך שבו הוא נוסף.

ייבוא של צמד מפתחות קיים

אם יש לכם זוג מפתחות קיים שכבר משמש אתכם באפליקציית האינטרנט, תוכלו לייבא אותו ל-FCM כדי להגיע למכונות הקיימות של אפליקציית האינטרנט דרך ממשקי ה-API של FCM. כדי לייבא מפתחות, צריכה להיות לכם גישה ברמת הבעלים לפרויקט Firebase. מייבאים את המפתח הציבורי והפרטי הקיימים בפורמט מאובטח של כתובת URL בקידוד base64:

  1. פותחים את הכרטיסייה Cloud Messaging בחלונית Settings במסוף Firebase, וגוללים לקטע Web configuration.

  2. בכרטיסייה Web Push certificates, מחפשים את טקסט הקישור 'import an existing key pair' ובוחרים בו.

  3. בתיבת הדו-שיח Import a key pair, מזינים את המפתחות הציבורי והפרטי בשדות המתאימים ולוחצים על Import. במסוף מוצגים המחרוזת של המפתח הציבורי והתאריך שבו הוא נוסף.

מידע נוסף על הפורמט של המפתחות ועל האופן שבו יוצרים אותם זמין במאמר מפתחות של שרת אפליקציות.

התקנת הפלאגין של FCM

  1. מתקינים ומפעילים את הפלאגינים של Firebase ל-Flutter, אם עוד לא עשיתם זאת.

  2. כדי להתקין את הפלאגין, מריצים את הפקודה הבאה מהרמה הבסיסית (root) של פרויקט Flutter:

    flutter pub add firebase_messaging
    
  3. בסיום, יוצרים מחדש את אפליקציית Flutter:

    flutter run
    

גישה לטוקן הרישום

כדי לשלוח הודעה למכשיר ספציפי, צריך לדעת את אסימון הרישום של המכשיר. כדי להשלים את המדריך הזה, תצטרכו להזין את האסימון בשדה במסוף ההתראות. לכן, חשוב להעתיק את האסימון או לאחסן אותו באופן מאובטח אחרי שאתם מאחזרים אותו.

כדי לאחזר את אסימון הרישום הנוכחי של מכונה של אפליקציה, צריך להפעיל את הפונקציה getToken(). אם לא ניתנה הרשאה לשליחת התראות, השיטה הזו תבקש מהמשתמש הרשאות לקבלת התראות. אחרת, הוא מחזיר אסימון או דוחה את העתיד עקב שגיאה.

// You may set the permission requests to "provisional" which allows the user to choose what type
// of notifications they would like to receive once the user receives a notification.
final notificationSettings = await FirebaseMessaging.instance.requestPermission(provisional: true);

// For apple platforms, ensure the APNS token is available before making any FCM plugin API calls
final apnsToken = await FirebaseMessaging.instance.getAPNSToken();
if (apnsToken != null) {
 // APNS token is available, make FCM plugin API requests...
}

בפלטפורמות אינטרנט, מעבירים את המפתח הציבורי של VAPID אל getToken():

final fcmToken = await FirebaseMessaging.instance.getToken(vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu");

כדי לקבל התראות בכל פעם שהאסימון מתעדכן, צריך להירשם לסטרים של onTokenRefresh:

FirebaseMessaging.instance.onTokenRefresh
    .listen((fcmToken) {
      // TODO: If necessary send token to application server.

      // Note: This callback is fired at each app startup and whenever a new
      // token is generated.
    })
    .onError((err) {
      // Error getting token.
    });

מניעת אתחול אוטומטי

כשיוצרים אסימון רישום של FCM, הספרייה מעלה את המזהה ונתוני התצורה ל-Firebase. אם אתם מעדיפים למנוע יצירה אוטומטית של אסימונים, תוכלו להשבית את האיניציאליזציה האוטומטית בזמן ה-build.

iOS

ב-iOS, מוסיפים ערך מטא-נתונים ל-Info.plist:

FirebaseMessagingAutoInitEnabled = NO

Android

ב-Android, משביתים את האיסוף ב-Analytics ואת האיפוס האוטומטי של FCM (צריך להשבית את שניהם) על ידי הוספת ערכי המטא-נתונים הבאים ל-AndroidManifest.xml:

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

הפעלה מחדש של ההפעלה האוטומטית של FCM בסביבת זמן הריצה

כדי להפעיל את ההפעלה האוטומטית למכונה ספציפית של אפליקציה, צריך לבצע קריאה ל-setAutoInitEnabled():

await FirebaseMessaging.instance.setAutoInitEnabled(true);

אחרי שמגדירים את הערך הזה, הוא נשמר בכל הפעלה מחדש של האפליקציה.

השלבים הבאים

אחרי שמגדירים את אפליקציית הלקוח, אפשר להתחיל לשלוח הודעות במורד הזרם באמצעות כלי היצירה של התראות. שליחת הודעת בדיקה לאפליקציה שפועלת ברקע

כדי להוסיף לאפליקציה התנהגות מתקדמת יותר, תצטרכו לבצע הטמעה בשרת.

לאחר מכן, בלקוח האפליקציה: