סוגי הודעות של העברת הודעות בענן ב-Firebase

באמצעות FCM, אפשר לשלוח שני סוגים של הודעות לאפליקציות הלקוח:

  • הודעות התראה, בדומה ל'הודעות מוצגות', מטופלות אוטומטית על ידי FCM SDK.
  • הודעות נתונים, שמטופלות על ידי אפליקציית הלקוח.

הודעות התראה מכילות קבוצה מוגדרת מראש של מפתחות שגלויים למשתמשים, ויכולות להכיל מטען ייעודי (Payload) של נתונים אופציונליים. לעומת זאת, הודעות נתונים מכילות רק צמדי מפתח/ערך מותאמים אישית שהוגדרו על ידי המשתמש. המטען הייעודי המקסימלי לשני סוגי ההודעות הוא 4,096 בייט, אלא אם שולחים הודעות ממסוף Firebase, שבו יש מגבלה של 1,000 תווים.

שימוש בתרחיש איך שולחים
הודעה לידיעה FCM ה-SDK מציג את ההודעה במכשירים של משתמשי הקצה בשם אפליקציית הלקוח כשהיא פועלת ברקע. אחרת, אם האפליקציה פועלת בחזית כשההתראה מתקבלת, ההתנהגות נקבעת לפי הקוד של האפליקציה.
  1. בסביבה מהימנה כמו Cloud Functions או שרת האפליקציה, משתמשים ב-Firebase Admin SDK או ב-HTTP v1 API. מגדירים את המפתח notification. יכול להיות שיש לו מטען נתונים אופציונלי. תמיד מתקפלת.

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

  2. משתמשים ב כלי ליצירת התראות: מזינים את הטקסט של ההודעה, הכותרת וכו' ושולחים. אפשר להוסיף מטען נתונים אופציונלי על ידי הזנת נתונים בהתאמה אישית.
הודעת נתונים אפליקציית הלקוח אחראית לעיבוד הודעות הנתונים. הודעות נתונים כוללות רק צמדי מפתח/ערך מותאמים אישית ללא שמות מפתחות שמורים (ראו בהמשך). בסביבה מהימנה כמו Cloud Functions או שרת האפליקציה, משתמשים ב-Firebase Admin SDK או ב-HTTP v1 API. בבקשת השליחה, מגדירים את המפתח data.

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

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

הודעות לידיעה

אפשר לשלוח הודעות התראה באמצעות מסוף Firebase, Firebase Admin SDK או FCM HTTP v1 API. מסוף Firebase מספק בדיקות A/B שמבוססות על ניתוח נתונים, כדי לעזור לכם לשפר את הודעות ההתראה.

כדי לשלוח הודעות התראה באמצעות Firebase Admin SDK או FCM HTTP v1 API, צריך להגדיר את המפתח notification עם קבוצה מוגדרת מראש של אפשרויות של זוגות מפתח/ערך של הודעת ההתראה. אפשר להשתמש בדוגמה הבאה כדי לעצב הודעת התראה באפליקציית מסרים מיידיים

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

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

אפשר לעיין במסמכי העזר של אובייקט ההתראה של FCM HTTP v1 API כדי לראות את הרשימה המלאה של מפתחות מוגדרים מראש שאפשר להשתמש בהם ליצירת הודעות התראה.

הודעות נתונים

אתם יכולים להשתמש במטען הייעודי (payload) של FCM‏ data כדי להטמיע את תוכנית ההצפנה שבחרתם. חשוב לוודא שלא משתמשים במילים שמורות בצמדים המותאמים אישית של מפתח/ערך. מילים שמורות כוללות את from,‏ message_type או כל מילה שמתחילה ב-google.,‏ gcm. או gcm.notification..

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

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}

הודעות התראה עם מטען נתונים אופציונלי

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

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

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

הנה הודעה בפורמט JSON שמכילה גם את המפתח notification וגם את המפתח data:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}