Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

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

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

סוגי הודעות

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

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

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

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

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

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

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

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

הודעות הודעה

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

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

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

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

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

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

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

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

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

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

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

שכבת התחבורה של Android (ראה ארכיטקטורת 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 מנהל המערכת של Firebase ופרוטוקול HTTP FCM v1 מאפשרים לבקשות ההודעות שלך להגדיר את כל השדות הזמינים באובייקט message . זה כולל:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

צמצום שרת XMPP

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

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

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

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

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

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

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

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

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

לקבלת תעריפי שליחת הודעות, ראה המצערת 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 שלך, זמין בכרטיסיה העברת הודעות בענן בחלונית ההגדרות של מסוף Firebase. מזהה השולח משמש לזיהוי כל שולח שיכול לשלוח הודעות לאפליקציית הלקוח.
אסימון גישה אסימון OAuth 2.0 קצר מועד המאשר בקשות ל- API של HTTP v1. אסימון זה משויך לחשבון שירות השייך לפרויקט Firebase שלך. ליצירה וסיבוב של אסימוני גישה, בצע את השלבים המתוארים באישור בקשות שליחה .
מפתח שרת (לפרוטוקולים מדור קודם)

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

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