פרוטוקול 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, הערכים האלה תואמים לעדיפויות APN‏ 5 ו-10.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ב-Android, הפעולה הזו יוצרת פרמטר נוסף של כוונה בשם 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.

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

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

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

שגיאה קוד XMPP הפעולה המומלצת
טוקן הרישום חסר INVALID_JSON בודקים שהבקשה מכילה אסימון רישום (בשדה registration_id בהודעת טקסט פשוט, או בשדה to או registration_ids ב-JSON).
רישום לא תקין של APNs INVALID_JSON ברישומים ל-iOS, צריך לוודא שבקשת הרישום מהלקוח מכילה אסימון APNs ומזהה אפליקציה תקפים.
Invalid Registration Token BAD_REGISTRATION בודקים את הפורמט של אסימון הרישום ששולחים לשרת. חשוב לוודא שהוא תואם לאסימון הרישום שאפליקציית הלקוח מקבלת מהרישום ב-FCM. אין לקצר את השם או להוסיף לו תווים.
מכשיר לא רשום DEVICE_UNREGISTERED אסימון רישום קיים עשוי להפסיק להיות בתוקף בכמה תרחישים, כולל:
  • אם אפליקציית הלקוח מבטלת את הרישום ב-FCM.
  • אם אפליקציית הלקוח לא רשומה באופן אוטומטי, מה שיכול לקרות אם המשתמש מסיר את האפליקציה. לדוגמה, ב-iOS, אם APNs דיווח על כך שהטוקן של APNs לא תקין.
  • אם פג התוקף של אסימון הרישום (לדוגמה, Google עשויה להחליט לרענן את אסימוני הרישום, או שפג התוקף של אסימון APNs במכשירים).
  • אם אפליקציית הלקוח מתעדכנת, אבל הגרסה החדשה לא מוגדרת לקבל הודעות.
בכל המקרים האלה, צריך להסיר את טוקן הרישום הזה משרת האפליקציה ולהפסיק להשתמש בו כדי לשלוח הודעות.
שולח לא תואם SENDER_ID_MISMATCH אסימון רישום מקושר לקבוצה מסוימת של שולחים. כשאפליקציית לקוח נרשמת ל-FCM, היא צריכה לציין אילו שולחים מורשים לשלוח הודעות. צריך להשתמש באחד ממזהי השולח האלה כששולחים הודעות לאפליקציית הלקוח. אם עוברים לשולח אחר, אסימוני ההרשמה הקיימים לא יפעלו.
JSON לא תקין INVALID_JSON בודקים שההודעה בפורמט JSON תקינה ושהיא מכילה שדות חוקיים (למשל, מוודאים שסוג הנתונים הנכון מועבר).
ההודעה גדולה מדי INVALID_JSON חשוב לוודא שהגודל הכולל של נתוני עומס העבודה (payload) שכלולים בהודעה לא חורג מהמגבלות של FCM: 4096 בייטים ברוב ההודעות או 2048 בייטים במקרה של הודעות לנושאים. כולל גם את המפתחות וגם את הערכים.
מפתח נתונים לא תקין INVALID_JSON בודקים שנתוני עומס העבודה לא מכילים מפתח (כמו 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 כי מפתח האימות הנדרש של APNs לא הועלה או שפג התוקף שלו. בודקים את התקינות של פרטי הכניסה לפיתוח ולייצור.
Authentication Failed 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 במקור.

פרמטר שימוש תיאור
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_type כדי לציין את סוג הודעת הבקרה.

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

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

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