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

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

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

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

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

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