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

בדרך כלל, 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.