במסמך הזה מופיע מסמך עזר בנושא תחביר 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, הן תואמות לעדיפויות 5 ו-10 של ה-APN. כברירת מחדל, הודעות התראה נשלחות בעדיפות גבוהה והודעות נתונים נשלחות בעדיפות רגילה. כשמשתמשים בעדיפות רגילה, מתבצעת אופטימיזציה של צריכת הסוללה באפליקציית הלקוח, ויש להשתמש בה אלא אם נדרשת העברה מיידית. להודעות עם עדיפות רגילה, האפליקציה עשויה לקבל את ההודעה בעיכוב לא מוגדר. כששולחים הודעה בעדיפות גבוהה, היא נשלחת באופן מיידי והאפליקציה יכולה להציג התראה. |
|
content_available |
אופציונלי, בוליאני | בפלטפורמות של Apple, משתמשים בשדה הזה כדי לייצג את |
|
mutable_content |
אופציונלי, בוליאני מסוג JSON | בפלטפורמות של Apple, משתמשים בשדה הזה כדי לייצג את |
|
time_to_live |
אופציונלי, מספר | הפרמטר הזה מציין למשך כמה זמן (בשניות) ההודעה צריכה להישמר באחסון של FCM אם המכשיר במצב אופליין. משך החיים המקסימלי שנתמך הוא 4 שבועות, וערך ברירת המחדל הוא 4 שבועות. מידע נוסף זמין במאמר הגדרת משך החיים של הודעה. |
|
dry_run |
אופציונלי, בוליאני | כשהערך של הפרמטר הזה מוגדר כ- ערך ברירת המחדל הוא |
|
מטען ייעודי (payload) | |||
data |
אופציונלי, אובייקט | הפרמטר הזה מציין את צמדי המפתח-ערך של מטען הייעודי של ההודעה. לדוגמה, עם בפלטפורמות של Apple, אם ההודעה נמסרת באמצעות נקודות APN, היא מייצגת את שדות הנתונים בהתאמה אישית. אם
הוא מסופק על ידי FCM,
הוא מיוצג כמילון של ערכי מפתח ב- ב-Android, התוצאה תהיה תוספת Intent בשם המפתח לא יכול להיות מילה שמוגדרת לשימוש מיוחד ('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 . |
קודי תגובה לשגיאות בהודעות במורד הזרם
בטבלה הבאה מפורטים קודי התגובה של השגיאה בהודעות downstream.
שגיאה | קוד XMPP | הפעולה המומלצת |
---|---|---|
טוקן הרישום חסר | INVALID_JSON |
בודקים שהבקשה מכילה אסימון רישום (בשדה registration_id בהודעת טקסט פשוט, או בשדה to או registration_ids ב-JSON). |
רישום לא תקין של APNs | INVALID_JSON |
לגבי רישומים ב-iOS, צריך לוודא שבקשת הרישום מהלקוח מכילה אסימון APN ומזהה אפליקציה תקינים. |
אסימון רישום לא חוקי | BAD_REGISTRATION |
בודקים את הפורמט של אסימון הרישום ששולחים לשרת. חשוב לוודא שהוא תואם לאסימון הרישום שאפליקציית הלקוח מקבלת מהרישום ב-FCM. אין לקצר את השם או להוסיף לו תווים. |
מכשיר לא רשום | DEVICE_UNREGISTERED |
אסימון רישום קיים עשוי להפסיק להיות בתוקף בכמה תרחישים, כולל:
|
שולח לא תואם | 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 |
השרת לא הצליח לעבד את הבקשה בזמן. לנסות שוב את אותה בקשה, אבל עליך:
הערה: שולחים שגורמים לבעיות עלולים להיכלל ברשימת ההחרגות. |
שגיאת שרת פנימית | INTERNAL_SERVER_
|
השרת נתקל בשגיאה במהלך הניסיון לעבד את הבקשה. אפשר לנסות שוב את אותה בקשה בהתאם לדרישות שמפורטות בקטע 'זמן קצוב לתפוגה' (ראו שורה למעלה). |
חרגת מהשיעור המרבי של שליחת הודעות מהמכשיר | DEVICE_MESSAGE_RATE |
קצב ההודעות למכשיר מסוים גבוה מדי. כדאי לצמצם את מספר ההודעות שנשלחות למכשיר הזה, ולא לנסות שוב לשלוח הודעות למכשיר הזה באופן מיידי. |
חריגה מקצב שליחת ההודעות בנושאים | TOPICS_MESSAGE_RATE |
שיעור ההודעות שנשלחות למנויים בנושא מסוים גבוה מדי. כדאי לצמצם את מספר ההודעות שנשלחות בנושא הזה, ולא לנסות לשלוח שוב מיד. |
זמן להשלמת תהליך (connection draining) | CONNECTION_DRAINING |
לא ניתן היה לעבד את ההודעה כי החיבור מנוצל במלואו. הסיבה לכך היא שלפעמים FCM צריך לסגור חיבור כדי לבצע איזון עומסים. לנסות לשלוח את ההודעה שוב דרך חיבור XMPP אחר. |
פרטי כניסה לא תקינים ל-APNs | INVALID_APNS_CREDENTIAL |
לא ניתן היה לשלוח הודעה שמטרגטת למכשיר iOS כי מפתח האימות של ה-APN הנדרש לא הועלה או שהתוקף שלו פג. בודקים את התקינות של פרטי הכניסה לפיתוח ולייצור. |
האימות נכשל | 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. כשהערך מוגדר ל- |
control_type |
אופציונלי, מחרוזת | הפרמטר הזה מציין את סוג הודעת הבקרה שנשלחת מ-FCM. כרגע יש תמיכה רק ב- |