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

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

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

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

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