פרוטוקול XMPP של העברת הודעות בענן ב-Firebase

במסמך הזה מופיע מסמך עזר בנושא תחביר XMPP שמשמש להעברת הודעות בין שרת האפליקציה, אפליקציות הלקוח ו-Firebase Cloud Messaging‏ (FCM). שרת האפליקציה צריך להתחבר לנקודות הקצה הבאות:

// Production
fcm-xmpp.googleapis.com:5235

// Testing
fcm-xmpp.googleapis.com:5236

הפרמטרים והאפשרויות הזמינים נכללים בקטגוריות הבאות:

תחביר ההודעות במורד הזרם

בקטע הזה מופיע התחביר לשליחת הודעות במורד הזרם.

הודעות XMPP במורד הזרם (JSON)

בטבלה הבאה מפורטים היעדים, האפשרויות והמטען הייעודי להודעות XMPP בפורמט JSON.

טבלה 1 יעדים, אפשרויות ועומס שימושי להודעות XMPP במורד הזרם (JSON).

פרמטר שימוש תיאור
Target
to אופציונלי, מחרוזת

הפרמטר הזה מציין את הנמען של הודעה.

הערך יכול להיות טוקן רישום של מכשיר, מפתח התראות של קבוצת מכשירים או נושא יחיד (עם הקידומת /topics/). כדי לשלוח לכמה נושאים, משתמשים בפרמטר condition.

condition אופציונלי, מחרוזת

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

תנאי נתמך: נושא, בפורמט '‎'yourTopic' in topics'‎. הערך הזה לא תלוי אותיות רישיות.

אופרטורים נתמכים: &&, ||. אפשר להשתמש בשני אופרטורים לכל היותר בכל הודעה בנושא.

אפשרויות
message_id חובה, מחרוזת

הפרמטר הזה מזהה באופן ייחודי הודעה בחיבור XMPP.

collapse_key אופציונלי, מחרוזת

הפרמטר הזה מזהה קבוצת הודעות (למשל, עם collapse_key: "Updates Available") שאפשר לכווץ, כך שרק ההודעה האחרונה תישלח כשהשליחה תתחדש. המטרה היא למנוע שליחת יותר מדי הודעות זהות כשהמכשיר חוזר לאינטרנט או יוצא ממצב שינה.

אין ערובה לסדר שבו ההודעות נשלחות.

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

priority אופציונלי, מחרוזת

מגדיר את עדיפות ההודעה. הערכים החוקיים הם 'רגיל' ו'גבוה'. בפלטפורמות של Apple, הן תואמות לעדיפויות 5 ו-10 של ה-APN.

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

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

content_available אופציונלי, בוליאני

בפלטפורמות של Apple, משתמשים בשדה הזה כדי לייצג את content-available בעומס העבודה של APNs. כששולחים התראה או הודעה והערך מוגדר ל-true, אפליקציית לקוח לא פעילה מופעלת וההודעה נשלחת דרך APNs כהודעה שקטה ולא דרך FCM. חשוב לזכור שלא בטוח שההתראות השקטות ב-APN יישלחו, והן עשויות להשתנות בהתאם לגורמים כמו הפעלת מצב צריכת אנרגיה נמוכה על ידי המשתמש, סגירה בכוח של האפליקציה וכו'. ב-Android, הודעות נתונים מעוררות את האפליקציה כברירת מחדל. בשלב הזה, אין תמיכה ב-Chrome.

mutable_content אופציונלי, בוליאני מסוג JSON

בפלטפורמות של Apple, משתמשים בשדה הזה כדי לייצג את mutable-content בתוכן הייעודי לטעינה (payload) של APNs. כששולחים התראה והערך הזה מוגדר ל-true, אפשר לשנות את תוכן ההתראה לפני שהיא מוצגת באמצעות תוסף לאפליקציית Notification Service. המערכת תתעלם מהפרמטר הזה ב-Android ובאינטרנט.

time_to_live אופציונלי, מספר

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

dry_run אופציונלי, בוליאני

כשהערך של הפרמטר הזה מוגדר כ-true, המפתחים יכולים לבדוק בקשה בלי לשלוח הודעה בפועל.

ערך ברירת המחדל הוא false.

מטען ייעודי (payload)
data אופציונלי, אובייקט

הפרמטר הזה מציין את צמדי המפתח-ערך של מטען הייעודי של ההודעה.

לדוגמה, עם data:{"score":"3x1"}:

בפלטפורמות של Apple, אם ההודעה נמסרת באמצעות נקודות APN, היא מייצגת את שדות הנתונים בהתאמה אישית. אם הוא מסופק על ידי FCM, הוא מיוצג כמילון של ערכי מפתח ב-AppDelegate application:didReceiveRemoteNotification:.

ב-Android, התוצאה תהיה תוספת Intent בשם score עם ערך המחרוזת 3x1.

המפתח לא יכול להיות מילה שמוגדרת לשימוש מיוחד ('from',‏ 'message_type' או כל מילה שמתחילה ב-'google' או ב-'gcm'). אסור להשתמש באף אחת מהמילים שמוגדרות בטבלה הזו (למשל collapse_key).

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

notification אופציונלי, אובייקט הפרמטר הזה מציין את צמד המפתח/ערך המוגדר מראש שגלוי למשתמש, שנמצא בעומס העבודה של ההתראה. פרטים נוספים זמינים במאמר בנושא תמיכה בתוכן של הודעות. מידע נוסף על אפשרויות של הודעות התראה והודעות נתונים זמין במאמר סוגי הודעות. אם צוין עומס שימושי של התראה, או שהאפשרות content_available מוגדרת כ-true להודעה למכשיר Apple, ההודעה נשלחת דרך APNs. אחרת, היא נשלחת דרך FCM.

תמיכה בתוכן של ההתראות

בטבלאות הבאות מפורטים המפתחות המוגדרים מראש שזמינים ליצירת הודעות התראה לפלטפורמות של Apple ול-Android.

טבלה 2א. Apple – מפתחות להודעות התראה

פרמטר שימוש תיאור
title אופציונלי, מחרוזת

כותרת ההתראה.

השדה הזה לא גלוי בטלפונים ובטאבלטים.

body אופציונלי, מחרוזת

הטקסט של גוף ההתראה.

sound אופציונלי, מחרוזת

הצליל שיישמע כשהמכשיר יקבל את ההתראה.

מחרוזת שמציינת קובצי אודיו בחבילה הראשית של אפליקציית הלקוח או בתיקייה Library/Sounds של מאגר הנתונים של האפליקציה. מידע נוסף זמין בספריית המפתחים של iOS.

badge אופציונלי, מחרוזת

הערך שמופיע בתג של סמל האפליקציה במסך הבית.

אם לא צוין ערך, התג לא ישתנה.

אם הערך מוגדר כ-0, התג יוסר.

click_action אופציונלי, מחרוזת

הפעולה שמשויכת ללחיצה של משתמש על ההתראה.

תואם ל-category במטען הייעודי (payload) של APNs.

subtitle אופציונלי, מחרוזת

כותרת המשנה של ההתראה.

body_loc_key אופציונלי, מחרוזת

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

תואם ל-loc-key במטען הייעודי (payload) של APNs.

למידע נוסף, ראו מידע על מפתחות של נתוני עומס (payload) והתאמה של התוכן של ההתראות מרחוק לשוק המקומי.

body_loc_args אופציונלי, מערך JSON כמחרוזת

ערכים של מחרוזות משתנות שישמשו במקום מפרידי הפורמט ב-body_loc_key כדי להתאים את הטקסט בגוף להגדרות המקומיות הנוכחיות של המשתמש.

תואם ל-loc-args במטען הייעודי (payload) של APNs.

למידע נוסף, ראו מידע על מפתחות של נתוני עומס (payload) והתאמה של התוכן של ההתראות מרחוק לשוק המקומי.

title_loc_key אופציונלי, מחרוזת

המפתח למחרוזת הכותרת במשאבי המחרוזות של האפליקציה, שמשמש ללוקליזציה של טקסט הכותרת בהתאם ללוקליזציה הנוכחית של המשתמש.

תואם ל-title-loc-key במטען הייעודי (payload) של APNs.

למידע נוסף, ראו מידע על מפתחות של נתוני עומס (payload) והתאמה של התוכן של ההתראות מרחוק לשוק המקומי.

title_loc_args אופציונלי, מערך JSON כמחרוזת

ערכים של מחרוזות משתנות שישמשו במקום מפרידי הפורמט ב-title_loc_key כדי להתאים את טקסט השם ללוקאל הנוכחי של המשתמש.

תואם ל-title-loc-args במטען הייעודי (payload) של APNs.

למידע נוסף, ראו מידע נוסף על מפתחות מטען ייעודי (payload) ו התאמה לשוק המקומי של תוכן ההתראות המרוחקות.

טבלה 2ב. Android – מפתחות להודעות התראה

פרמטר שימוש תיאור
title אופציונלי, מחרוזת

כותרת ההתראה.

body אופציונלי, מחרוזת

הטקסט של גוף ההתראה.

android_channel_id אופציונלי, מחרוזת

מזהה הערוץ של ההתראה (חדש ב-Android O).

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

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

icon אופציונלי, מחרוזת

הסמל של ההתראה.

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

sound אופציונלי, מחרוזת

הצליל שיישמע כשהמכשיר יקבל את ההתראה.

הפורמט הזה תומך ב-"default" או בשם הקובץ של משאב צליל בחבילה באפליקציה. קובצי אודיו חייבים להיכלל ב-/res/raw/.

tag אופציונלי, מחרוזת

מזהה שמשמש להחלפת התראות קיימות בחלונית ההזזה של ההתראות.

אם לא צוין, כל בקשה יוצרת התראה חדשה.

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

color אופציונלי, מחרוזת

צבע הסמל של ההתראה, בפורמט #rrggbb.

click_action אופציונלי, מחרוזת

הפעולה שמשויכת ללחיצה של משתמש על ההתראה.

אם צוין, פעילות עם מסנן כוונה תואם תושק כשהמשתמש ילחץ על ההתראה.

body_loc_key אופציונלי, מחרוזת

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

מידע נוסף זמין במאמר משאבי מחרוזות.

body_loc_args אופציונלי, מערך JSON כמחרוזת

ערכים של מחרוזות משתנות שישמשו במקום מפרידי הפורמט ב-body_loc_key כדי להתאים את הטקסט בגוף להגדרות המקומיות הנוכחיות של המשתמש.

למידע נוסף, ראו עיצוב פורמטים.

title_loc_key אופציונלי, מחרוזת

המפתח למחרוזת הכותרת במשאבי המחרוזות של האפליקציה, שמשמש ללוקליזציה של טקסט הכותרת בהתאם ללוקליזציה הנוכחית של המשתמש.

למידע נוסף, ראו משאבי מחרוזות.

title_loc_args אופציונלי, מערך JSON כמחרוזת

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

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

טבלה 2ג אינטרנט (JavaScript) – מפתחות להודעות התראות

פרמטר שימוש תיאור
title אופציונלי, מחרוזת

כותרת ההתראה.

body אופציונלי, מחרוזת

הטקסט של גוף ההתראה.

icon אופציונלי, מחרוזת

כתובת ה-URL שתשמש לסמל ההתראה.

click_action אופציונלי, מחרוזת

הפעולה שמשויכת לקליק של משתמש על ההתראה.

חובה להשתמש ב-HTTPS בכל ערכי כתובות ה-URL.

פרשנות של תגובה להודעת XMPP במורד הזרם

בטבלה הבאה מפורטים השדות שמופיעים בתשובה להודעת XMPP במורד הזרם.

טבלה 3 גוף התגובה של XMPP להודעה במורד הזרם.

פרמטר שימוש תיאור
from חובה, מחרוזת

הפרמטר הזה מציין מי שלח את התשובה.

הערך הוא אסימון הרישום של אפליקציית הלקוח.

message_id חובה, מחרוזת הפרמטר הזה מזהה באופן ייחודי הודעה בחיבור XMPP. הערך הוא מחרוזת שמזהה באופן ייחודי את ההודעה המשויכת.
message_type שדה חובה, מחרוזת

הפרמטר הזה מציין הודעת ack או nack מ-FCM לשרת האפליקציה.

אם הערך מוגדר כ-nack, שרת האפליקציה צריך לבדוק את error ו-error_description כדי לקבל את פרטי התקלה.

error אופציונלי, מחרוזת הפרמטר הזה מציין שגיאה שקשורה להודעה במורד הזרם. הוא מוגדר כשהערך של message_type הוא nack. פרטים נוספים מופיעים בטבלה 4.
error_description אופציונלי, מחרוזת הפרמטר הזה מספק מידע תיאורי על השגיאה. הוא מוגדר כשהערך של message_type הוא nack.

קודי תגובה לשגיאות בהודעות במורד הזרם

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

טבלה 4 קודי תגובות של שגיאות להודעות בהמשך הדרך.

שגיאה קוד XMPP הפעולה המומלצת
טוקן הרישום חסר INVALID_JSON בודקים שהבקשה מכילה אסימון רישום (בשדה registration_id בהודעת טקסט פשוט, או בשדה to או registration_ids ב-JSON).
רישום לא תקין של APNs INVALID_JSON לגבי רישומים ב-iOS, צריך לוודא שבקשת הרישום מהלקוח מכילה אסימון APN ומזהה אפליקציה תקינים.
אסימון רישום לא חוקי BAD_REGISTRATION בודקים את הפורמט של אסימון הרישום ששולחים לשרת. חשוב לוודא שהוא תואם לאסימון הרישום שאפליקציית הלקוח מקבלת מהרישום ב-FCM. אין לקצר את השם או להוסיף לו תווים.
מכשיר לא רשום DEVICE_UNREGISTERED אסימון רישום קיים עשוי להפסיק להיות בתוקף בכמה תרחישים, כולל:
  • אם אפליקציית הלקוח מבטלת את הרישום ב-FCM.
  • אם אפליקציית הלקוח לא רשומה באופן אוטומטי, מה שיכול לקרות אם המשתמש מסיר את האפליקציה. לדוגמה, ב-iOS, אם נקודות ה-APN דיווחו על אסימון ה-APN כלא תקין.
  • אם התוקף של אסימון הרישום יפוג (לדוגמה, Google עשויה להחליט לרענן את אסימוני הרישום, או שהתוקף של אסימון ה-APNs פג עבור מכשירים).
  • אם אפליקציית הלקוח מתעדכנת, אבל הגרסה החדשה לא מוגדרת לקבל הודעות.
בכל המקרים האלה, צריך להסיר את טוקן הרישום הזה משרת האפליקציה ולהפסיק להשתמש בו כדי לשלוח הודעות.
שולח לא תואם SENDER_ID_MISMATCH אסימון רישום מקושר לקבוצה מסוימת של שולחים. כשאפליקציית לקוח נרשמת ל-FCM, היא צריכה לציין אילו שולחים מורשים לשלוח הודעות. כששולחים הודעות לאפליקציית הלקוח, צריך להשתמש באחד ממזהי השולחים האלה. אם תעברו לשולח אחר, אסימוני הרישום הקיימים לא יעבדו.
קובץ JSON לא תקין INVALID_JSON בודקים שההודעה בפורמט JSON תקינה ושהיא מכילה שדות תקינים (למשל, מוודאים שסוג הנתונים הנכון מועבר).
ההודעה גדולה מדי INVALID_JSON בודקים שהגודל הכולל של נתוני המטען הייעודי (Payload) שכלולים בהודעה לא חורג מהמגבלות של FCM: 4,096 בייטים לרוב ההודעות, או 2,048 בייטים במקרה של הודעות לנושאים. כולל גם את המפתחות וגם את הערכים.
מפתח נתונים לא חוקי INVALID_JSON צריך לוודא שנתוני המטען הייעודי (Payload) לא מכילים מפתח (כמו from, gcm או כל ערך עם קידומת google) שנמצא בשימוש פנימי על ידי FCM. הערה: יש מילים מסוימות (כמו collapse_key) שנמצאות בשימוש גם ב-FCM, אבל הן מותרות בתוכן המועמס. במקרה כזה, הערך של התוכן המועמס מבוטל על ידי הערך של FCM.
אורך החיים לא חוקי INVALID_JSON בודקים שהערך ב-time_to_live הוא מספר שלם שמייצג משך זמן בשניות בין 0 ל-2,419,200 (4 שבועות).
הודעת ACK לא תקינה BAD_ACK לפני שמנסים שוב, צריך לבדוק שהפורמט של ההודעה ack תקין. פרטים נוספים זמינים בטבלה 6.
זמן קצוב לתפוגה SERVICE_UNAVAILABLE

השרת לא הצליח לעבד את הבקשה בזמן. לנסות שוב את אותה בקשה, אבל עליך:

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

הערה: שולחים שגורמים לבעיות עלולים להיכלל ברשימת ההחרגות.

שגיאת שרת פנימית INTERNAL_SERVER_
ERROR
השרת נתקל בשגיאה במהלך הניסיון לעבד את הבקשה. אפשר לנסות שוב את אותה בקשה בהתאם לדרישות שמפורטות בקטע 'זמן קצוב לתפוגה' (ראו שורה למעלה).
חרגת מהשיעור המרבי של שליחת הודעות מהמכשיר DEVICE_MESSAGE_RATE
_EXCEEDED
קצב ההודעות למכשיר מסוים גבוה מדי. כדאי לצמצם את מספר ההודעות שנשלחות למכשיר הזה, ולא לנסות שוב לשלוח הודעות למכשיר הזה באופן מיידי.
חריגה מקצב שליחת ההודעות בנושאים TOPICS_MESSAGE_RATE
_EXCEEDED
שיעור ההודעות שנשלחות למנויים בנושא מסוים גבוה מדי. כדאי לצמצם את מספר ההודעות שנשלחות בנושא הזה, ולא לנסות לשלוח שוב מיד.
זמן להשלמת תהליך (connection draining) CONNECTION_DRAINING לא ניתן היה לעבד את ההודעה כי החיבור מנוצל במלואו. הסיבה לכך היא שלפעמים FCM צריך לסגור חיבור כדי לבצע איזון עומסים. לנסות לשלוח את ההודעה שוב דרך חיבור XMPP אחר.
פרטי כניסה לא תקינים ל-APNs INVALID_APNS_CREDENTIAL לא ניתן היה לשלוח הודעה שמטרגטת למכשיר iOS כי מפתח האימות של ה-APN הנדרש לא הועלה או שהתוקף שלו פג. בודקים את התקינות של פרטי הכניסה לפיתוח ולייצור.
האימות נכשל AUTHENTICATION_FAILED האימות של שירותי ה-push החיצוניים נכשל. בודקים אם אתם משתמשים באישורי ה-Web Push הנכונים.

תחביר ההודעות ב-upstream

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

פרשנות של הודעת XMPP ב-upstream

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

טבלה 5 הודעות XMPP במעלה הזרם.

פרמטר שימוש תיאור
from חובה, מחרוזת

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

הערך הוא אסימון הרישום של אפליקציית הלקוח.

category חובה, מחרוזת הפרמטר הזה מציין את שם חבילת האפליקציה של אפליקציית הלקוח ששלחה את ההודעה.
message_id שדה חובה, מחרוזת הפרמטר הזה מציין את המזהה הייחודי של ההודעה.
data אופציונלי, מחרוזת הפרמטר הזה מציין את צמדי המפתח-ערך של מטען הייעודי של ההודעה.

שליחת הודעת ACK

בטבלה הבאה מתוארת תגובת ה-ACK ששרת האפליקציה אמור לשלוח אל FCM בתגובה להודעה מ-upstream ששרת האפליקציה קיבל.

טבלה 6 תגובה להודעה של XMPP ב-upstream.

פרמטר שימוש תיאור
to שדה חובה, מחרוזת

הפרמטר הזה מציין את הנמען של הודעת התשובה.

הערך חייב להיות אסימון רישום של אפליקציית הלקוח ששלחה את הודעת ה-upstream.

message_id שדה חובה, מחרוזת הפרמטר הזה מציין לאיזו הודעה התשובה מיועדת. הערך חייב להיות הערך של message_id מההודעה המתאימה ב-upstream.
message_type חובה, מחרוזת הפרמטר הזה מציין הודעת ack משרת אפליקציה ל-CCS. בהודעות מ-upstream, הערך צריך להיות תמיד ack.

FCM הודעות שרת (XMPP)

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

  • בקרה: ההודעות האלה שנוצרות על ידי CCS מצביעות על כך שדרושה פעולה משרת האפליקציה.

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

טבלה 7 הודעות בקרה של FCM (XMPP).

פרמטר שימוש תיאור
שדה משותף
message_type חובה, מחרוזת

הפרמטר הזה מציין את הסוג של ההודעה: control.

כשהערך מוגדר ל-control, ההודעה כוללת את הערך control_type כדי לציין את סוג הודעת הבקרה.

control_type אופציונלי, מחרוזת

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

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