בדרך כלל, FCM מעביר הודעות מיד אחרי שהן נשלחות. אבל זה לא תמיד אפשרי. לדוגמה, יכול להיות שהמכשיר לא זמין או ש-FCM מעכב בכוונה את ההודעות כדי למנוע מאפליקציה לצרוך יותר מדי משאבים ולהשפיע לרעה על חיי הסוללה.
במקרים כאלה, FCM שומר את ההודעה ומעביר אותה בהקדם האפשרי. ברוב המקרים זה בסדר, אבל יש אפליקציות שצריכות לשלוח התראות בלי עיכוב. לדוגמה, התראה על שיחה נכנסת או הזמנה לאירוע.
ב-Android ובאינטרנט, אתם יכולים לציין את משך החיים המקסימלי של הודעה. הערך צריך להיות משך זמן בין 0 ל-2,419,200 שניות (28 ימים), והוא תואם לפרק הזמן המקסימלי שבו FCM מאחסן את ההודעה ומנסה לשלוח אותה. כברירת מחדל, בקשות שלא מכילות את השדה הזה נמשכות לתקופה מקסימלית של ארבעה שבועות.
ב-iOS, אפשר להגדיר את הכותרת apns-expiration באובייקט ApnsConfig. לפרטים נוספים, קראו את המאמר שליחת בקשות התראה ל-APNs של אפל.
הנה כמה שימושים אפשריים לתכונה הזו:
- שיחות נכנסות בווידאו צ'אט
- אירועים של הזמנות שתוקפן עומד לפוג
- אירועים ביומן
יתרון נוסף של ציון משך החיים של הודעה הוא ש-FCM לא מחיל ויסות קצב של הודעות שניתנות לכיווץ על הודעות עם ערך של 0 שניות בשדה "משך החיים". חשוב לזכור שאם הערך של ttl הוא 0, הודעות שלא נמסרות באופן מיידי נמחקות. עם זאת, מכיוון שהודעות כאלה אף פעם לא נשמרות, זה מספק את זמן האחזור הטוב ביותר לשליחת הודעות.
דוגמה לבקשה שכוללת ttl:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
},
"apns":{
"headers":{
"apns-expiration":"1604750400"
}
},
"android":{
"ttl":"4500s"
},
"webpush":{
"headers":{
"TTL":"4500"
}
}
}
}
משך החיים של הודעה
כששרת של אפליקציה מפרסם הודעה ב-FCM ומקבל בחזרה מזהה הודעה, זה לא אומר שההודעה כבר נשלחה למכשיר. המשמעות היא שההודעה התקבלה למסירה. מועד המסירה של ההודעה תלוי בגורמים רבים.
אם המכשיר מחובר אבל נמצא במצב Doze, הודעה בעדיפות נמוכה נשמרת על ידי FCM עד שהמכשיר יוצא ממצב Doze. אם השדה collapse_key מוגדר, ויש הודעה קיימת עם אותו מפתח כיווץ ואותו אסימון רישום שממתינה למסירה, ההודעה הישנה נמחקת וההודעה החדשה מחליפה אותה. עם זאת, אם לא מוגדר מפתח כיווץ, גם ההודעה החדשה וגם ההודעה הישנה נשמרות למסירה בעתיד.
אם המכשיר לא מחובר ל-FCM, ההודעה נשמרת עד שנוצר חיבור. כשהחיבור נוצר, FCM מעביר את כל ההודעות הממתינות למכשיר. אם המכשיר לא יתחבר שוב, בסופו של דבר יפוג הזמן הקצוב לתפוגה של ההודעה והיא תימחק מהאחסון של FCM. הזמן הקצוב לתפוגה שמוגדר כברירת מחדל הוא ארבעה שבועות, אלא אם הדגל ttl מוגדר. אם האפליקציה הוסרה כש-FCM מנסה להעביר הודעה למכשיר, FCM מבטל את ההודעה באופן מיידי ומבטל את התוקף של אסימון הרישום. ניסיונות עתידיים לשלוח הודעה למכשיר הזה יגרמו לשגיאה NotRegistered.
במכשירי Android, אם המכשיר לא התחבר ל-FCM במשך יותר מחודש, FCM עדיין מקבל את ההודעה אבל מיד מוחק אותה. אם המכשיר מתחבר תוך ארבעה שבועות מהודעת הנתונים האחרונה ששלחתם אליו, אפליקציית הלקוח מקבלת את הקריאה החוזרת (callback) onDeletedMessages().
כדי לקבל תובנות נוספות לגבי מסירת ההודעות בפלטפורמות של Android או Apple, אתם יכולים להשתמש בלוח הבקרה של הדוחות ב-FCM. בלוח הבקרה מתועד מספר ההודעות שנשלחו ונפתחו במכשירי Apple ו-Android, וגם נתונים לגבי חשיפות באפליקציות ל-Android.