הגדרת אורך החיים של הודעה

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

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

ב-Android ובאינטרנט, אפשר לציין את משך החיים המקסימלי של הודעה. הערך צריך להיות משך זמן בין 0 ל-2,419,200 שניות (28 ימים), והוא מייצג את התקופה המקסימלית שבה FCM מאחסן את ההודעה ומנסה למסור אותה. כברירת מחדל, בקשות שלא מכילות את השדה הזה תקפות לתקופה של עד ארבעה שבועות.

ב-iOS, אפשר להגדיר את הכותרת apns-expiration באובייקט ApnsConfig. פרטים נוספים זמינים במאמר של Apple בנושא שליחת בקשות להודעות ל-APNs.

הנה כמה שימושים אפשריים בתכונה הזו:

  • שיחות נכנסות בווידאו צ'אט
  • אירועים שההזמנה אליהם פגה
  • אירועים ביומן

יתרון נוסף של הגדרת משך החיים של הודעה הוא ש-FCM לא מחיל על הודעות עם ערך של אורך חיים (TTL) של 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 ומקבל בחזרה מזהה הודעה, זה לא אומר שההודעה כבר נמסרה למכשיר. במקום זאת, המשמעות היא שהיא אושרה למשלוח. המועד שבו ההודעה תועבר תלוי בהרבה גורמים.

אם המכשיר מחובר אבל במצב שינה, הודעה עם עדיפות נמוכה מאוחסנת על ידי FCM עד שהמכשיר יוצא ממצב שינה. אם הערך של collapse_key מוגדר, ויש הודעה קיימת עם אותו collapse key ועם אותו registration token שממתינה למסירה, ההודעה הישנה נמחקת וההודעה החדשה תופסת את מקומה. עם זאת, אם ה-collapse key לא מוגדר, גם ההודעה החדשה וגם ההודעה הישנה מאוחסנות למסירה עתידית.

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

במכשירי Android, אם המכשיר לא התחבר אל FCM במשך יותר מחודש, FCM עדיין מקבל את ההודעה אבל משליך אותה מיד. אם המכשיר מתחבר תוך ארבעה שבועות מהודעת הנתונים האחרונה ששלחתם אליו, אפליקציית הלקוח מקבלת את הקריאה החוזרת onDeletedMessages().

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