שליחת הודעת בדיקה לאפליקציה שפועלת ברקע

כדי להתחיל להשתמש ב-FCM, כדאי ליצור את התרחיש הפשוט ביותר לשימוש: שליחת הודעת בדיקה מ מלחין ההתראות למכשיר פיתוח כשהאפליקציה פועלת ברקע במכשיר. בדף הזה מפורטים כל השלבים לביצוע הפעולה הזו, מההגדרה ועד האימות. יכול להיות שיהיו בו שלבים שכבר ביצעתם אם הגדרתם אפליקציית Flutter ל-FCM.

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

  1. מתקינים ומפעילים את Firebase SDKs for Flutter, אם עוד לא עשיתם זאת.

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

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

    flutter run
    

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

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

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

final fcmToken = await FirebaseMessaging.instance.getToken();

שליחת הודעת בדיקה

  1. מתקינים את האפליקציה ומפעילים אותה במכשיר היעד. במכשירי Apple, תצטרכו לאשר את הבקשה לקבלת התראות מרחוק.

  2. מוודאים שהאפליקציה פועלת ברקע במכשיר.

  3. במסוף Firebase, פותחים את הדף Messaging.

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

    1. בוחרים באפשרות התראות של Firebase ואז באפשרות יצירה.
  5. אחרת, בכרטיסייה קמפיינים, בוחרים באפשרות קמפיין חדש ואז באפשרות Notifications.

  6. מזינים את הטקסט של ההודעה. כל שאר השדות הם אופציונליים.

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

  8. בשדה Add an FCM registration token, מזינים את אסימון ההרשמה שקיבלתם בקטע הקודם במדריך הזה.

  9. בוחרים באפשרות בדיקה.

אחרי שבוחרים באפשרות Test, המכשיר של הלקוח המטורגט (עם האפליקציה ברקע) אמור לקבל את ההתראה.

כדי לקבל תובנות לגבי העברת ההודעות לאפליקציה, אפשר לעיין במרכז הבקרה של דוחות FCM, שבו מתועד מספר ההודעות שנשלחו ונפתחו במכשירי Apple ו-Android, וגם נתונים של 'חשיפות' (התראות שמוצגות למשתמשים) באפליקציות ל-Android.

טיפול באינטראקציה

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

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

החבילה firebase-messaging מספקת שתי דרכים לטפל באינטראקציה זו:

  1. getInitialMessage(): אם האפליקציה נפתחת במצב סיום, השיטה הזו מחזירה Future שמכיל RemoteMessage. לאחר השימוש, ה-RemoteMessage יוסר.
  2. onMessageOpenedApp: Stream שמפרסם RemoteMessage כשהאפליקציה נפתחת ממצב רקע.

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

class Application extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _Application();
}

class _Application extends State<Application> {
  // In this example, suppose that all messages contain a data field with the key 'type'.
  Future<void> setupInteractedMessage() async {
    // Get any messages which caused the application to open from
    // a terminated state.
    RemoteMessage? initialMessage =
        await FirebaseMessaging.instance.getInitialMessage();

    // If the message also contains a data property with a "type" of "chat",
    // navigate to a chat screen
    if (initialMessage != null) {
      _handleMessage(initialMessage);
    }

    // Also handle any interaction when the app is in the background via a
    // Stream listener
    FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
  }

  void _handleMessage(RemoteMessage message) {
    if (message.data['type'] == 'chat') {
      Navigator.pushNamed(context, '/chat',
        arguments: ChatArguments(message),
      );
    }
  }

  @override
  void initState() {
    super.initState();

    // Run code required to handle interacted messages in an async function
    // as initState() must not be async
    setupInteractedMessage();
  }

  @override
  Widget build(BuildContext context) {
    return Text("...");
  }
}

אופן הטיפול באינטראקציה תלוי בהגדרת האפליקציה. בדוגמה שלמעלה מוצגת דוגמה בסיסית לשימוש ב-StatefulWidget.

השלבים הבאים

שליחת הודעות לאפליקציות שבחזית

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

מעבר להתראות

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

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