אודות הודעות FCM

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

סוגי הודעות

באמצעות FCM תוכל לשלוח שני סוגים של הודעות ללקוחות:

  • הודעות התראה, לעיתים נחשבות כ"הודעות תצוגה ". אלה מטופלים על ידי FCM SDK באופן אוטומטי.
  • הודעות נתונים, המטופלות על ידי אפליקציית הלקוח.

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

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

    ראה כמה דוגמאות של הודעות התצוגה ואת מטענים שלח בקשה.

  2. השתמש מלחין ההודעות : הזן את טקסט ההודעה, הכותרת, וכו ', ולשלוח. הוסף מטען נתונים אופציונלי על ידי אספקת נתונים מותאמים אישית.
הודעת נתונים אפליקציית הלקוח אחראית על עיבוד הודעות נתונים. להודעות נתונים יש רק זוגות ערך מפתח מותאמים אישית ללא שמות מקשים שמורים (ראה להלן). בסביבה מהימנה כגון פונקציות ענן או שרת האפליקציה שלך, להשתמש SDK של הניהול או פרוטוקולי שרת FCM : הגדר את data מפתח בלבד.

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

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

הודעות הודעה

לבדיקה או מעורבות מחדש שיווק משתמש, אתה יכול לשלוח הודעות הודעות באמצעות קונסולת Firebase . Firebase המסוף מספק כלים אנליטיים בדיקות A / B כדי לעזור לך לחדד ולשפר מסרים שיווקיים.

להודעות דיווח לשלוח תוכניתי באמצעות SDK של מנהל המערכת או פרוטוקולי FCM, להגדיר את notification מפתח עם סט מוגדר מראש הכרחי של אפשרויות מפתח-ערך עבור החלק הגלוי למשתמש הודעת ההתראה. לדוגמה, הנה הודעת התראה בפורמט JSON באפליקציית צ'אט. המשתמש יכול לצפות לראות הודעה עם הכותרת "פורטוגל מול דנמרק" והטקסט "התאמה נהדרת!" במכשיר:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

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

עיין בתיעוד ההפניה לרשימה המלאה של המפתחות המוגדרים מראש הזמינים לבניית הודעות התראה:

הודעות נתונים

הגדר את המפתח המתאים עם צמדי ערך המפתח המותאמים אישית שלך כדי לשלוח מטען נתונים לאפליקציית הלקוח.

לדוגמא, הנה הודעה מעוצבת-JSON באותה האפליקציה IM כאמור, שבו המידע גלום הנפוץ data מפתח אפליקציית לקוח צפוי לפרש את התוכן:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}

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

הצפנה להודעות נתונים

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

הודעות התראה עם מטען נתונים אופציונלי

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

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

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

הנה הודעה בפורמט JSON המכיל הן את notification המפתח ואת data מפתח:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}

התאמה אישית של הודעה בפלטפורמות שונות

ה- SDK Admin Firebase ופרוטוקול FCM v1 HTTP הוא מאפשרים בקשות ההודעה שלך להגדיר את כול שדות זמינים message האובייקט. זה כולל:

  • סט של שדות נפוץ להתפרש על ידי כול מופעי האפליקציה אשר מקבלים את המסר.
  • סטים ספציפי פלטפורמה של שדות, כגון AndroidConfig ו WebpushConfig , לפרש רק במקרי אפליקציה פועלים על הפלטפורמה שצוינה.

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

מתי להשתמש בשדות נפוצים

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

  • מיקוד מקרים האפליקציה בכל הפלטפורמות - iOS, Android, אינטרנט
  • שליחת הודעות לנושאים

כל מופעי האפליקציה, ללא קשר לפלטפורמה, יכולים לפרש את השדות הנפוצים הבאים:

מתי להשתמש בשדות ספציפיים לפלטפורמה

השתמש בשדות ספציפיים לפלטפורמה כאשר ברצונך:

  • שלח שדות רק לפלטפורמות מסוימות
  • שלח שדות פלטפורמה ספציפיים בנוסף לשדות הנפוצים

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

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

דוגמה: הודעת הודעה עם אפשרויות משלוח ספציפיות לפלטפורמה

בקשת השליחה של v1 הבאה שולחת כותרת ותוכן נפוצה לכל הפלטפורמות, אך גם שולחת כמה עקיפות ספציפיות לפלטפורמה. באופן ספציפי, הבקשה:

  • מגדיר זמן לחיות ארוך עבור פלטפורמות אנדרואיד ורשת, תוך הגדרת עדיפות הודעות APNs (iOS) להגדרה נמוכה
  • קובע את המפתחות המתאימים להגדרת תוצאה של ברז המשתמשים על ההודעה על אנדרואיד ו- iOS - click_action , ו category , בהתאמה.
{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
     "android":{
       "ttl":"86400s",
       "notification"{
         "click_action":"OPEN_ACTIVITY_1"
       }
     },
     "apns": {
       "headers": {
         "apns-priority": "5",
       },
       "payload": {
         "aps": {
           "category": "NEW_MESSAGE_CATEGORY"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }

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

אפשרויות משלוח

FCM מספק קבוצה ספציפית של אפשרויות מסירה להודעות שנשלחות למכשירי Android, ומאפשר אפשרויות דומות ב- iOS ובאינטרנט. לדוגמה, התנהגות הודעה "מתקפל" נתמך על אנדרואיד דרך של FCM collapse_key , על iOS באמצעות apns-collapse-id , ועל JavaScript / אינטרנט באמצעות Topic . לפרטים, ראה תיאורים בסעיף זה ותיעוד הפניה קשור.

הודעות לא מתקפלות ומתקפלות

מסר שאינו מתקפל מציין שכל הודעה בודדת מועבר למכשיר. הודעה שאינה מתקפלת מספקת תוכן שימושי כלשהו, ​​בניגוד להודעה מתקפלת כמו "פינג" נטול תוכן לאפליקציה הסלולרית כדי ליצור קשר עם השרת כדי להביא נתונים.

כמה מקרי שימוש אופייניים של הודעות שאינן מתקפלות הם הודעות צ'אט או הודעות קריטיות. לדוגמא, באפליקציית צ'אט תרצה להעביר כל הודעה מכיוון שלכל הודעה יש תוכן שונה.

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

הודעה מתקפלת הוא מסר כי עשוי להיות מוחלף על ידי הודעה חדשה אם זה טרם נמסר המכשיר.

מקרי שימוש נפוצים של הודעות מתקפלות הם הודעות המשמשות לאפליקציה לנייד לסנכרן נתונים מהשרת. דוגמה לכך תהיה אפליקציית ספורט המעדכנת משתמשים עם הציון האחרון. רק המסר האחרון רלוונטי.

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

הודעות נושא ללא מטען מתקפלות כברירת מחדל.

באילו עליי להשתמש?

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

השתמש בתרחיש איך לשלוח
לא מתקפל כל מסר חשוב לאפליקציית הלקוח וצריך להעביר אותו. למעט הודעות התראה, כל ההודעות אינן ניתנות לכיווץ כברירת מחדל.
מִתקַפֵּל כאשר יש הודעה חדשה יותר שהופכת הודעה ישנה יותר וקשורה ללא רלוונטית לאפליקציית הלקוח, FCM מחליף את ההודעה הישנה יותר. לדוגמא: הודעות המשמשות ליזום סנכרון נתונים מהשרת, או הודעות התראה מיושנות. הגדר את הפרמטר המתאים בבקשת ההודעה שלך:
  • collapseKey על אנדרואיד
  • apns-collapse-id על iOS
  • Topic על האינטרנט
  • collapse_key בפרוטוקולים מורשת (כל הפלטפורמות)

הגדרת העדיפות של הודעה

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

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

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

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

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

הנה דוגמה להודעת עדיפות רגילה שנשלחה באמצעות פרוטוקול FCM HTTP v1 כדי להודיע ​​למנוי מגזין כי ניתן להוריד תוכן חדש:

{
  "message":{
    "topic":"subscriber-updates",
    "notification":{
      "body" : "This week's edition is now available.",
      "title" : "NewsMagazine.com",
    },
    "data" : {
      "volume" : "3.21.15",
      "contents" : "http://www.news-magazine.com/world-week/21659772"
    },
    "android":{
      "priority":"normal"
    },
    "apns":{
      "headers":{
        "apns-priority":"5"
      }
    },
    "webpush": {
      "headers": {
        "Urgency": "high"
      }
    }
  }
}

לפרטים ספציפיים יותר לפלטפורמה על הגדרת עדיפות להודעות:

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

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

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

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

להלן מספר שימושים אפשריים לתכונה זו:

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

יתרון נוסף של ציון אורך חיי ההודעה הוא ש- FCM לעולם לא מצמצם הודעות עם ערך זמן לחיות של 0 שניות. במילים אחרות, FCM מבטיח את המאמץ הטוב ביותר להודעות שיש למסור "עכשיו או לעולם לא". זכור כי time_to_live ערך של 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 נותן לך את היכולת לתת לכל אחד מהתורמים הללו לשלוח הודעות משלו.

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

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

לבסוף, שתף את אסימון ההרשמה עם השולחים המתאימים, והם יוכלו לשלוח הודעות לאפליקציית הלקוח באמצעות מפתחות האימות שלהם.

שים לב כי יש מגבלה של 100 שולחים מרובים.

חיים של הודעה

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

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

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

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

כדי לקבל יותר תובנה לגבי מסירת הודעה:

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

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

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

מצערת וקנה מידה

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

חנק מסרים מתקפל

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

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

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

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

חנק שרת XMPP

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

עבור כל פרויקט, FCM מאפשר 2500 חיבורים במקביל.

קצב הודעות מקסימלי למכשיר יחיד

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

מגבלת הודעות במעלה הזרם

אנו מגבילים הודעות upstream ב 1,500,000 / דקה לכל פרוייקט כדי למנוע עומס יתר השרתים יעד במעלה הזרם.

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

מגבלת הודעות נושא

שיעור ההוספה / הסרה של מנוי הנושא מוגבל ל -3,000 QPS לפרויקט.

עבור שיעורי שליחת הודעה, לראות ויסות Fanout .

מצערת מניפה

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

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

שיעור האוהדים המושג בפועל מושפע ממספר הפרויקטים שמבקשים אוהדים בו זמנית. שיעור מעריצים של 10,000 QPS לפרויקט בודד אינו נדיר, אך מספר זה אינו ערובה והוא תוצאה של העומס הכולל על המערכת. חשוב לציין כי יכולת האוורור הזמינה מחולקת בין פרויקטים ולא על פי בקשות האוהדים. לכן, אם בפרויקט שלך יש שני אוהדים בעיצומה, כל אוהד יראה רק מחצית משיעור האוהדים הזמין. הדרך המומלצת למקסם את מהירות ההתרחקות שלך היא שיהיה רק ​​חיבוב פעיל אחד בכל פעם.

יציאות FCM וחומת האש שלך

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

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

יציאות לפתיחה להודעות נכנסות:

  • 5228
  • 5229
  • 5230
  • 443

יציאות לאפשר חיבורים יוצאים:

אחת מהן (עדיפה אפשרות 1):

  1. ללא הגבלות IP
  2. כל כתובות ה- IP עבור תחומי ברירת המחדל.

    כדי לאחזר רשימה עַדכָּנִי מהכתובות האלה, עקוב אחר ההוראות המתוארות כתובות IP עבור תחומים ברירת המחדל .

תרגום כתובות רשת ו / או חומות אש לפיקוח מנות:

אם הרשת שלך מיישמת תרגום כתובות רשת (NAT) או בדיקת מנות סטטיפוליות (SPI), הטמיע פסק זמן של 30 דקות ומעלה לחיבורים שלנו דרך יציאות 5228-5230. זה מאפשר לנו לספק קישוריות אמינה תוך הפחתת צריכת הסוללה של המכשירים הניידים של המשתמשים שלך.

אישורים

תלוי אילו תכונות FCM אתה מיישם, ייתכן שתצטרך את האישורים הבאים מפרויקט Firebase שלך:

מזהה פרויקט מזהה ייחודי עבור פרויקט Firebase שלך, המשמש בבקשות לנקודת הקצה HTTP של FCM v1. ערך זה זמין הגדרות קונסולת Firebase בחלונית.
אסימון הרשמה

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

מספר זהות השולח ערך מספרים ייחודי שנוצר כאשר אתה יוצר פרויקט Firebase שלך, זמין Cloud Messaging הלשונית של חלונית הגדרות קונסולת Firebase. מזהה השולח משמש לזיהוי כל שולח שיכול לשלוח הודעות לאפליקציית הלקוח.
אסימון גישה אסימון OAuth 2.0 קצר מועד המאשר בקשות ל- API של HTTP v1. אסימון זה משויך לחשבון שירות השייך לפרויקט Firebase שלך. כדי ליצור וסיבוב של קודי גישה, בצע את השלבים מתוארים בקשות שלחו Authorize .
מפתח שרת (לפרוטוקולים מדור קודם)

מפתח שרת המאשר לשרת האפליקציות שלך גישה לשירותי Google, כולל שליחת הודעות באמצעות פרוטוקולי העבר של Firebase Cloud Messaging. אתה מקבל את מפתח השרת בעת יצירת פרויקט Firebase שלך. אתה יכול לצפות בפסטיבל Cloud Messaging הלשונית של חלונית הגדרות Firebase קונסולה.

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