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

כדי להתחיל להשתמש ב-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. לחלופין, בכרטיסייה קמפיינים, בוחרים באפשרות קמפיין חדש ואז באפשרות התראות.

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

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

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

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

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

כדי לקבל תובנות לגבי העברת ההודעות לאפליקציה, אפשר לעיין במרכז הבקרה של דוחות 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 כדי להתחיל לשלוח הודעות לאפליקציות שבחזית.

מעבר להתראות

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

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