במסמך הזה מופיע מסמך עזר בנושא תחביר XMPP שמשמש להעברת הודעות בין שרת האפליקציה, אפליקציות הלקוח ו-Firebase Cloud Messaging (FCM). שרת האפליקציה צריך להתחבר לנקודות הקצה הבאות:
// Production fcm-xmpp.googleapis.com:5235 // Testing fcm-xmpp.googleapis.com:5236
הפרמטרים והאפשרויות הזמינים נכללים בקטגוריות הבאות:
- תחביר ההודעות במורד הזרם
- קודי תגובה לשגיאות בהודעות במורד הזרם
- תחביר של הודעות ב-upstream
- הודעות בקרה של FCM
תחביר ההודעות במורד הזרם
בקטע הזה מופיע התחביר לשליחת הודעות במורד הזרם.
הודעות XMPP במורד הזרם (JSON)
בטבלה הבאה מפורטים היעדים, האפשרויות והמטען הייעודי להודעות XMPP בפורמט JSON.
פרמטר | שימוש | תיאור | |
---|---|---|---|
Target | |||
to |
אופציונלי, מחרוזת |
הפרמטר הזה מציין את הנמען של הודעה.
הערך יכול להיות טוקן רישום של מכשיר, מפתח התראות של קבוצת מכשירים או נושא יחיד (עם הקידומת |
|
condition |
אופציונלי, מחרוזת | הפרמטר הזה מציין ביטוי לוגי של תנאים שקובע את היעד של ההודעה. תנאי נתמך: נושא, בפורמט ''yourTopic' in topics'. הערך הזה לא תלוי אותיות רישיות. האופרטורים הנתמכים: |
|
אפשרויות | |||
message_id |
חובה, מחרוזת | הפרמטר הזה מזהה באופן ייחודי הודעה בחיבור XMPP. |
|
collapse_key |
אופציונלי, מחרוזת | הפרמטר הזה מזהה קבוצת הודעות (למשל, עם אין ערובה לסדר שבו ההודעות נשלחות. הערה: בכל רגע נתון מותר להשתמש ב-4 מקשי כיווץ שונים לכל היותר. המשמעות היא ש-FCM יכול לאחסן בו-זמנית 4 הודעות שונות לכל אפליקציית לקוח. אם חורגים מהמספר הזה, אין ערובה לאילו 4 מפתחות התכווץ FCM ישמור. |
|
priority |
אופציונלי, מחרוזת | הגדרת העדיפות של ההודעה. הערכים החוקיים הם 'רגיל' ו'גבוה'. בפלטפורמות של Apple, הערכים האלה תואמים לעדיפויות APN 5 ו-10. כברירת מחדל, הודעות התראה נשלחות בעדיפות גבוהה והודעות נתונים נשלחות בעדיפות רגילה. כשמשתמשים בעדיפות רגילה, מתבצעת אופטימיזציה של צריכת הסוללה באפליקציית הלקוח, ויש להשתמש בה אלא אם נדרשת העברה מיידית. הודעות בעדיפות רגילה עשויות להגיע לאפליקציה עם עיכוב לא ידוע. כששולחים הודעה בעדיפות גבוהה, היא נשלחת באופן מיידי והאפליקציה יכולה להציג התראה. |
|
content_available |
אופציונלי, בוליאני | בפלטפורמות של Apple, משתמשים בשדה הזה כדי לייצג את |
|
mutable_content |
אופציונלי, בוליאני מסוג JSON | בפלטפורמות של Apple, משתמשים בשדה הזה כדי לייצג את |
|
time_to_live |
אופציונלי, מספר | הפרמטר הזה מציין את משך הזמן (בשניות) שבו ההודעה תישמר באחסון של FCM אם המכשיר במצב אופליין. משך החיים המקסימלי שנתמך הוא 4 שבועות, וערך ברירת המחדל הוא 4 שבועות. מידע נוסף זמין במאמר הגדרת משך החיים של הודעה. |
|
dry_run |
אופציונלי, בוליאני | כשהערך של הפרמטר הזה מוגדר כ- ערך ברירת המחדל הוא |
|
מטען ייעודי (payload) | |||
data |
אופציונלי, אובייקט | הפרמטר הזה מציין את צמדי המפתח-ערך של המטען הייעודי של ההודעה. לדוגמה, עם בפלטפורמות של Apple, אם ההודעה נשלחת על ידי APNs, היא מייצגת את שדות הנתונים המותאמים אישית. אם הוא מועבר על ידי FCM, הוא מיוצג כמילון של מפתחות וערכים ב- ב-Android, הפעולה הזו יוצרת פרמטר נוסף של כוונה בשם המפתח לא יכול להיות מילה שמוגדרת לשימוש מיוחד ('from', 'message_type' או כל מילה שמתחילה ב-'google' או ב-'gcm'). אסור להשתמש באף אחת מהמילים שמוגדרות בטבלה הזו (כמו מומלץ להשתמש בערכים מסוג מחרוזת. צריך להמיר ערכים באובייקטים או בסוגים אחרים של נתונים שאינם מחרוזות (למשל, מספרים שלמים או ערכים בוליאניים) למחרוזת. |
|
notification |
אופציונלי, אובייקט | הפרמטר הזה מציין את צמד המפתח/ערך שהוגדרו מראש וגלויים למשתמש, של עומס העבודה של ההתראה. פרטים נוספים זמינים במאמר בנושא תמיכה במטען הייעודי של ההתראות. למידע נוסף על אפשרויות של הודעות התראה והודעות נתונים, ראו
סוגי הודעות. אם צוין עומס שימושי של התראה, או שהאפשרות content_available מוגדרת כ-true להודעה למכשיר Apple, ההודעה נשלחת דרך APNs. אחרת, היא נשלחת דרך FCM.
|
תמיכה בתוכן של ההתראות
בטבלאות הבאות מפורטים המפתחות המוגדרים מראש שזמינים ליצירת הודעות התראה לפלטפורמות של Apple ול-Android.
פרמטר | שימוש | תיאור |
---|---|---|
title |
אופציונלי, מחרוזת |
כותרת ההתראה. השדה הזה לא גלוי בטלפונים ובטאבלטים. |
body |
אופציונלי, מחרוזת |
גוף הטקסט של ההתראה. |
sound |
אופציונלי, מחרוזת |
הצליל שיישמע כשהמכשיר יקבל את ההתראה.
מחרוזת שמציינת קובצי אודיו בחבילה הראשית של אפליקציית הלקוח או בתיקייה |
badge |
אופציונלי, מחרוזת |
הערך שמופיע בתג של סמל האפליקציה במסך הבית. אם לא צוין ערך, התג לא ישתנה.
אם הערך מוגדר כ- |
click_action |
אופציונלי, מחרוזת |
הפעולה שמשויכת לקליק של משתמש על ההתראה.
תואם ל- |
subtitle |
אופציונלי, מחרוזת |
כותרת המשנה של ההתראה. |
body_loc_key |
אופציונלי, מחרוזת |
המפתח למחרוזת הגוף במשאבי המחרוזות של האפליקציה, שמשמש להתאמה של טקסט הגוף ללוקליזציה הנוכחית של המשתמש.
תואם ל- למידע נוסף, ראו מידע על מפתחות של נתוני עומס (payload) ו התאמה של התוכן של ההתראות מרחוק לשוק המקומי. |
body_loc_args |
אופציונלי, מערך JSON כמחרוזת |
ערכים של מחרוזות משתנות שישמשו במקום מפרידי הפורמט ב-
תואם ל- למידע נוסף, ראו מידע על מפתחות של נתוני עומס (payload) ו התאמה של התוכן של ההתראות מרחוק לשוק המקומי. |
title_loc_key |
אופציונלי, מחרוזת |
המפתח למחרוזת הכותרת במשאבי המחרוזות של האפליקציה, שמשמש ללוקליזציה של טקסט הכותרת בהתאם ללוקליזציה הנוכחית של המשתמש.
תואם ל- למידע נוסף, ראו מידע על מפתחות של נתוני עומס (payload) ו התאמה של התוכן של ההתראות מרחוק לשוק המקומי. |
title_loc_args |
אופציונלי, מערך JSON כמחרוזת |
ערכים של מחרוזות משתנות שישמשו במקום מפרידי הפורמט ב-
תואם ל- למידע נוסף, ראו מידע על מפתחות של נתוני עומס (payload) ו התאמה של התוכן של ההתראות מרחוק לשוק המקומי. |
פרמטר | שימוש | תיאור |
---|---|---|
title |
אופציונלי, מחרוזת |
כותרת ההתראה. |
body |
אופציונלי, מחרוזת |
גוף הטקסט של ההתראה. |
android_channel_id |
אופציונלי, מחרוזת |
מזהה הערוץ של ההתראה (חדש ב-Android O). האפליקציה צריכה ליצור ערוץ עם מזהה הערוץ הזה לפני שתקבל התראה עם מזהה הערוץ הזה. אם לא שולחים את מזהה הערוץ הזה בבקשה, או אם מזהה הערוץ שצוין עדיין לא נוצר על ידי האפליקציה, FCM משתמש במזהה הערוץ שצוין במניפסט של האפליקציה. |
icon |
אופציונלי, מחרוזת |
הסמל של ההתראה.
מגדיר את סמל ההתראה כ- |
sound |
אופציונלי, מחרוזת |
הצליל שיישמע כשהמכשיר יקבל את ההתראה.
תומך ב- |
tag |
אופציונלי, מחרוזת |
מזהה שמשמש להחלפת התראות קיימות בחלונית ההזזה של ההתראות. אם לא צוין, כל בקשה יוצרת התראה חדשה. אם מצוין תג כזה והתראה עם אותו תג כבר מוצגת, ההתראה החדשה תחליף את ההתראה הקיימת בתיבת ההתראות. |
color |
אופציונלי, מחרוזת |
צבע הסמל של ההתראה, בפורמט |
click_action |
אופציונלי, מחרוזת |
הפעולה שמשויכת לקליק של משתמש על ההתראה. אם צוין, פעילות עם מסנן כוונה תואם תושק כשהמשתמש ילחץ על ההתראה. |
body_loc_key |
אופציונלי, מחרוזת |
המפתח למחרוזת הגוף במשאבי המחרוזות של האפליקציה, שמשמש להתאמה של טקסט הגוף ללוקליזציה הנוכחית של המשתמש. למידע נוסף, ראו משאבי מחרוזות. |
body_loc_args |
אופציונלי, מערך JSON כמחרוזת |
ערכים של מחרוזות משתנות שישמשו במקום מפרידי הפורמט ב- למידע נוסף, ראו עיצוב פורמטים. |
title_loc_key |
אופציונלי, מחרוזת |
המפתח למחרוזת הכותרת במשאבי המחרוזות של האפליקציה, שמשמש ללוקליזציה של טקסט הכותרת בהתאם ללוקליזציה הנוכחית של המשתמש. למידע נוסף, ראו משאבי מחרוזות. |
title_loc_args |
אופציונלי, מערך JSON כמחרוזת |
ערכים של מחרוזות משתנות שישמשו במקום מפרידי הפורמט ב- למידע נוסף, ראו עיצוב פורמטים. |
פרמטר | שימוש | תיאור |
---|---|---|
title |
אופציונלי, מחרוזת |
כותרת ההתראה. |
body |
אופציונלי, מחרוזת |
גוף הטקסט של ההתראה. |
icon |
אופציונלי, מחרוזת |
כתובת ה-URL שתשמש לסמל ההתראה. |
click_action |
אופציונלי, מחרוזת |
הפעולה שמשויכת לקליק של משתמש על ההתראה. חובה להשתמש ב-HTTPS בכל ערכי כתובות ה-URL. |
פרשנות של תגובה להודעת XMPP במורד הזרם
בטבלה הבאה מפורטים השדות שמופיעים בתשובה להודעת XMPP במורד הזרם.
פרמטר | שימוש | תיאור |
---|---|---|
from |
חובה, מחרוזת | הפרמטר הזה מציין מי שלח את התשובה הזו. הערך הוא אסימון הרישום של אפליקציית הלקוח. |
message_id |
חובה, מחרוזת | הפרמטר הזה מזהה באופן ייחודי הודעה בחיבור XMPP. הערך הוא מחרוזת שמזהה באופן ייחודי את ההודעה המשויכת. |
message_type |
חובה, מחרוזת | הפרמטר הזה מציין הודעה מסוג אם הערך מוגדר כ- |
error |
אופציונלי, מחרוזת | הפרמטר הזה מציין שגיאה שקשורה להודעה במורד הזרם. הוא מוגדר כשהערך של message_type הוא nack . פרטים נוספים מופיעים בטבלה 4. |
error_description |
אופציונלי, מחרוזת | הפרמטר הזה מספק מידע תיאורי על השגיאה. הוא מוגדר כשהערך של message_type הוא nack . |
קודי תגובה לשגיאות בהודעות במורד הזרם
בטבלה הבאה מפורטים קודי התגובה של השגיאות להודעות במורד הזרם.
שגיאה | קוד XMPP | הפעולה המומלצת |
---|---|---|
טוקן הרישום חסר | INVALID_JSON |
בודקים שהבקשה מכילה אסימון רישום (בשדה registration_id בהודעת טקסט פשוט, או בשדה to או registration_ids ב-JSON). |
רישום לא תקין של APNs | INVALID_JSON |
ברישומים ל-iOS, צריך לוודא שבקשת הרישום מהלקוח מכילה אסימון APNs ומזהה אפליקציה תקפים. |
Invalid Registration Token | BAD_REGISTRATION |
בודקים את הפורמט של אסימון הרישום ששולחים לשרת. חשוב לוודא שהוא תואם לאסימון הרישום שאפליקציית הלקוח מקבלת מהרישום ב-FCM. אין לקצר את השם או להוסיף לו תווים. |
מכשיר לא רשום | DEVICE_UNREGISTERED |
אסימון רישום קיים עשוי להפסיק להיות בתוקף בכמה תרחישים, כולל:
|
שולח לא תואם | 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 |
השרת לא הצליח לעבד את הבקשה בזמן. לנסות שוב את אותה בקשה, אבל צריך:
הערה: שולחים שגורמים לבעיות עלולים להיכלל ברשימת ההחרגות. |
שגיאת שרת פנימית | INTERNAL_SERVER_
|
השרת נתקל בשגיאה במהלך הניסיון לעבד את הבקשה. אפשר לנסות שוב את אותה בקשה בהתאם לדרישות שמפורטות בקטע 'זמן קצוב לתפוגה' (ראו שורה למעלה). |
חרגת מהשיעור המרבי של שליחת הודעות מהמכשיר | DEVICE_MESSAGE_RATE |
שיעור ההודעות שנשלחות למכשיר מסוים גבוה מדי. כדאי לצמצם את מספר ההודעות שנשלחות למכשיר הזה, ולא לנסות שוב לשלוח הודעות למכשיר הזה באופן מיידי. |
חריגה מקצב שליחת ההודעות בנושאים | TOPICS_MESSAGE_RATE |
שיעור ההודעות שנשלחות למנויים בנושא מסוים גבוה מדי. כדאי לצמצם את מספר ההודעות שנשלחות בנושא הזה, ולא לנסות לשלוח שוב מיד. |
זמן להשלמת תהליך (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 בתגובה לבקשות הודעות ממעלה הזרם מאפליקציות לקוח.
פרמטר | שימוש | תיאור |
---|---|---|
from |
חובה, מחרוזת | הפרמטר הזה מציין מי שלח את ההודעה. הערך הוא אסימון הרישום של אפליקציית הלקוח. |
category |
חובה, מחרוזת | הפרמטר הזה מציין את שם חבילת האפליקציה של אפליקציית הלקוח ששלחה את ההודעה. |
message_id |
חובה, מחרוזת | הפרמטר הזה מציין את המזהה הייחודי של ההודעה. |
data |
אופציונלי, מחרוזת | הפרמטר הזה מציין את צמדי המפתח-ערך של המטען הייעודי של ההודעה. |
שליחת הודעת ACK
בטבלה הבאה מתוארת תגובת ה-ACK ששרת האפליקציה אמור לשלוח אל FCM בתגובה להודעה מ-upstream ששרת האפליקציה קיבל.
פרמטר | שימוש | תיאור |
---|---|---|
to |
חובה, מחרוזת | הפרמטר הזה מציין את הנמען של הודעת התשובה. הערך צריך להיות טוקן רישום של אפליקציית הלקוח ששלחה את ההודעה ב-upstream. |
message_id |
חובה, מחרוזת | הפרמטר הזה מציין לאיזו הודעה התשובה מיועדת. הערך חייב להיות הערך של message_id מההודעה המתאימה ב-upstream. |
message_type |
חובה, מחרוזת | הפרמטר הזה מציין הודעת ack משרת אפליקציה ל-CCS.
בהודעות מ-upstream, הערך צריך להיות תמיד ack . |
FCM הודעות שרת (XMPP)
זוהי הודעה שנשלחה מ-FCM לשרת אפליקציה. אלה הסוגים העיקריים של ההודעות ש-FCM שולחת לשרת האפליקציה:
- בקרה: ההודעות האלה שנוצרות על ידי CCS מצביעות על כך שדרושה פעולה מצד שרת האפליקציה.
בטבלה הבאה מתוארים השדות שכלולים בהודעות ש-CCS שולח לשרת האפליקציה.
פרמטר | שימוש | תיאור |
---|---|---|
שדה משותף | ||
message_type |
חובה, מחרוזת | הפרמטר הזה מציין את סוג ההודעה: בקרה. כשהערך מוגדר ל- |
control_type |
אופציונלי, מחרוזת | הפרמטר הזה מציין את סוג הודעת הבקרה שנשלחת מ-FCM. בשלב זה יש תמיכה רק ב- |