Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

Firebase Cloud Messaging (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 , לפרש רק במקרי אפליקציה פועלים על הפלטפורמה שצוינה.

בלוקים ספציפיים לפלטפורמה נותנים לך גמישות להתאים אישית הודעות לפלטפורמות שונות כדי לוודא שמטפלים בהן כראוי כאשר הן מתקבלות. ה- backend של ה- 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 מספקת קבוצה מסוימת של אפשרויות משלוח להודעות שנשלחות למכשירי אנדרואיד ומאפשרת אפשרויות דומות ב- iOS ובאינטרנט. לדוגמה, התנהגות הודעה "מתקפל" נתמך על אנדרואיד דרך של FCM collapse_key , על iOS באמצעות apns-collapse-id , ועל JavaScript / אינטרנט באמצעות Topic . לפרטים, עיין בתיאורים בסעיף זה ובתיעוד הפניות בנושא.

הודעות שאינן מתקפלות וניתנות לקיפול

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

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

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

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

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

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

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

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

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

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

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

חיי חיים של הודעה

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

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

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

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

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

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

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

יציאות לפתיחה:

  • 5228
  • 5229
  • 5230
  • 443

שמות מארחים לפתיחה:

  • mtalk.google.com
  • mtalk4.google.com
  • mtalk-staging.google.com
  • mtalk-dev.google.com
  • alt1-mtalk.google.com
  • alt2-mtalk.google.com
  • alt3-mtalk.google.com
  • alt4-mtalk.google.com
  • alt5-mtalk.google.com
  • alt6-mtalk.google.com
  • alt7-mtalk.google.com
  • alt8-mtalk.google.com
  • android.clients.google.com
  • device-provisioning.googleapis.com

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

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

אישורים

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

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

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

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

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

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