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

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

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

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

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

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

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

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

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