הסבר על מסירת הודעות

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

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

  • Firebase דוחות מסירה של הודעות במסוף
  • מדדים מצטברים של מסירת Android SDK מ-Firebase Cloud Messaging Data API
  • ייצוא מקיף של נתונים ל-Google BigQuery

כדי לייצא נתונים אל BigQuery ואל הכרטיסייה דוחות במסוף Firebase, צריך להפעיל את Google Analytics. אפשר להפעיל את Google Analytics ב הגדרות > הכרטיסייה שילובים במסוף Firebase. כדי להשתמש בנתוני מסירה מצטברים לא צריך להפעיל את Google Analytics.

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

דוחות מסירה של הודעות

במסוף Firebase, עוברים אל DevOps & Engagement (פיתוח אפליקציות ואינטראקציה עם משתמשים) > Messaging (העברת הודעות) > הכרטיסייה Reports (דוחות) כדי לראות את הנתונים הבאים לגבי הודעות שנשלחו אל Android או אל פלטפורמת Apple FCM SDK, כולל הודעות שנשלחו באמצעות הכלי ליצירת התראות וממשקי ה-API של FCM:

  • שליחות – הודעת הנתונים או הודעת ההתראה הוכנסה לתור למסירה או הועברה בהצלחה לשירות צד שלישי כמו APNs למסירה. שימו לב: יכול להיות שיהיה עיכוב של כמה שעות בנתוני השליחות. מידע נוסף זמין במאמר בנושא משך החיים של הודעה.
  • התקבלה (זמין רק במכשירי Android) – הודעת הנתונים או הודעת ההתראה התקבלה באפליקציה. הנתונים האלה זמינים אם במכשיר Android המקבל מותקן SDK בגרסה 18.0.1 ואילך.FCM
  • חשיפות (זמין רק להודעות התראה במכשירי Android) – ההתראה על התצוגה הוצגה במכשיר בזמן שהאפליקציה פעלה ברקע.
  • פתיחות – המשתמש פתח את הודעת ההתראה. הנתון הזה מדווח רק לגבי התראות שהתקבלו כשהאפליקציה פועלת ברקע.

הנתונים האלה זמינים לכל ההודעות עם מטען ייעודי (payload) של התראה ולכל הודעות הנתונים שסומנו בתווית. מידע נוסף על תוויות זמין במאמר הוספת תוויות של Analytics להודעות.

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

  • פלטפורמה (iOS או Android)
  • אפליקציה
  • תוויות מותאמות אישית לניתוח נתונים

הוספת תוויות של ניתוח נתונים להודעות

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

תוויות של Analytics הן מחרוזות טקסט בפורמט ^[a-zA-Z0-9-_.~%]{1,50}$. התוויות יכולות לכלול אותיות קטנות וגדולות, מספרים והסמלים הבאים:

  • -
  • ~
  • %

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

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

נתוני משלוח מצטברים באמצעות FCM Data API

‫Firebase Cloud Messaging Data API מאפשר לכם לאחזר מידע שיכול לעזור לכם להבין את התוצאות של בקשות להודעות שמיועדות לאפליקציות ל-Android. ממשק ה-API מספק נתונים מצטברים מכל מכשירי Android שמופעל בהם איסוף נתונים בפרויקט. הפרטים האלה כוללים את אחוז ההודעות שנמסרו ללא עיכוב, וגם כמה הודעות עוכבו או נמחקו בשכבת התעבורה של Android. ניתוח הנתונים האלה יכול לחשוף מגמות רחבות בשליחת הודעות ולעזור לכם למצוא דרכים יעילות לשפר את הביצועים של בקשות השליחה. מידע על הזמינות של טווחי תאריכים בדוחות מופיע במאמר בנושא ציר זמן של נתונים מצטברים.

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

איך הנתונים מחולקים?

נתוני המסירה מחולקים לפי אפליקציה, תאריך ותווית Analytics. קריאה ל-API תחזיר נתונים לכל שילוב של תאריך, אפליקציה ותווית ניתוח. לדוגמה, אובייקט JSON יחיד androidDeliveryData ייראה כך:

 {
  "appId": "1:23456789:android:a93a5mb1234efe56",
  "date": {
    "year": 2021,
    "month": 1,
    "day": 1
  },
  "analyticsLabel": "foo",
  "data": {
    "countMessagesAccepted": "314159",
    "messageOutcomePercents": {
      "delivered": 71,
      "pending": 15
    },
   "deliveryPerformancePercents": {
      "deliveredNoDelay": 45,
      "delayedDeviceOffline": 11
    }
  }

איך לפרש את המדדים

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

ספירת ההודעות שאושרו

הספירה היחידה שנכללת במערך הנתונים היא ספירת ההודעות שאושרו על ידי FCM למסירה למכשירי Android. כל האחוזים מחושבים לפי הערך הזה כמכנה. חשוב לזכור שהספירה הזו לא כוללת הודעות שמיועדות למשתמשים שהשביתו במכשירים שלהם את איסוף המידע על דפוסי השימוש וניתוח הביצועים.

אחוז התוצאות של ההודעות

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

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

אחוזים של ביצועי מסירה

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

אחוזים של תובנות לגבי הודעות

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

מה ההבדל בין הנתונים האלה לבין הנתונים שמיוצאים ל-BigQuery?

הייצוא ל-BigQuery מספק יומנים של הודעות ספציפיות לגבי קבלת ההודעות על ידי ה-Backend של FCM ומסירת ההודעות ב-SDK במכשיר (שלבים 2 ו-4 בארכיטקטורה של FCM). הנתונים האלה שימושיים כדי לוודא שהודעות ספציפיות התקבלו ונמסרו. בקטע הבא מוסבר על ייצוא נתונים ב-BigQuery.

לעומת זאת, Firebase Cloud Messaging Data API מספק פרטים מצטברים על מה שקורה באופן ספציפי בשכבת התעבורה של Android (או בשלב 3 של ארכיטקטורת FCM). הנתונים האלה מספקים תובנות ספציפיות לגבי המסירה של הודעות מהעורפים של FCM אל Android SDK. האפשרות הזו שימושית במיוחד כדי להציג מגמות לגבי הסיבות לעיכוב או להשמטה של הודעות במהלך ההעברה.

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

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

מגבלות של ה-API

ציר זמן של נתונים מצטברים

ה-API יחזיר נתונים היסטוריים של 7 ימים, אבל הנתונים שיוחזרו על ידי ה-API הזה יתעכבו עד 5 ימים. לדוגמה, ב-20 בינואר, הנתונים של 9 בינואר עד 15 בינואר יהיו זמינים, אבל לא הנתונים של 16 בינואר ואילך. בנוסף, הנתונים מסופקים כמיטב היכולת. במקרה של הפסקת זמינות של נתונים, מערכת FCM תפעל כדי לתקן את הבעיה, אבל לא תמלא את הנתונים החסרים אחרי שהבעיה תיפתר. במקרים של הפסקות שירות נרחבות, יכול להיות שהנתונים לא יהיו זמינים למשך שבוע או יותר.

כיסוי נתונים

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

הודעות שפג תוקפן

אם אורך החיים (TTL) פג אחרי תאריך הסיום של היומן שצוין, ההודעה לא תיספר כ-droppedTtlExpired בתאריך הזה.

הודעות למכשירים לא פעילים

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

הודעות למכשירים עם העדפות משתמש מסוימות

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

עיגול וערכי מינימום

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

ייצוא נתונים ל-BigQuery

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

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

  • ‫Android מגרסה 20.1.0 ואילך.
  • ‫iOS מגרסה 8.6.0 ואילך
  • ‫Firebase Web SDK מגרסה 12.14.0 ואילך

כדי להתחיל, מקשרים את הפרויקט אל BigQuery באמצעות מסוף Firebase:

  1. בחר אחת מהאפשרויות הבאות:

    • עוברים אל DevOps & Engagement (פיתוח אפליקציות ואינטראקציה עם משתמשים) > Messaging (הודעות) > the Notifications composer (כלי ליצירת התראות), ואז לוחצים על Access BigQuery (גישה ל-BigQuery) בחלק התחתון של הדף.

    • עוברים אל הגדרות > הכרטיסייה שילובים. לאחר מכן, בBigQuery, לוחצים על קישור.

      בדף הזה מוצגות FCM אפשרויות ייצוא לכל האפליקציות FCM שמופעל בהן הייצוא בפרויקט.

  2. פועלים לפי ההוראות במסך כדי להפעיל את BigQuery.

מידע נוסף זמין במאמר בנושא קישור Firebase ל-BigQuery.

כשמפעילים ייצוא של BigQuery ל-Cloud Messaging:

  • ‫Firebase מייצא את הנתונים ל-BigQuery. שימו לב: יכול להיות שיעברו עד 48 שעות עד שהנתונים יתעדכנו בייצוא.

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

  • ‫Firebase מגדיר סנכרונים קבועים של הנתונים מפרויקט Firebase אל BigQuery. פעולות הייצוא היומיות האלה מתחילות בשעה 4:00 לפי שעון החוף הפסיפי, ובדרך כלל מסתיימות תוך 24 שעות.

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

כדי להשבית את הייצוא של BigQuery, צריך לבטל את הקישור של הפרויקט במסוף Firebase.

הפעלת ייצוא של נתוני מסירת הודעות

‫iOS+

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

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

הפעלת ייצוא של נתוני מסירה להתראות

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

צריך לבצע את הקריאה הבאה לכל התראה שמתקבלת:

Swift

// For alert notifications, call the API inside the service extension:
class NotificationService: UNNotificationServiceExtension {
  override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
    Messaging.serviceExtension().exportDeliveryMetrics(withMessageInfo:request.content.userInfo)
  }
}

Objective-C

// For alert notifications, call the API inside the service extension:
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request
                   withContentHandler:(void (^)(UNNotificationContent *_Nonnull))contentHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:request.content.userInfo];
}
@end

אם אתם יוצרים בקשות שליחה באמצעות HTTP v1 API, הקפידו לציין `mutable-content = 1` באובייקט המטען הייעודי.

הפעלת ייצוא של נתוני מסירה להתראות ברקע

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

Swift

// For background notifications, call the API inside the
// UIApplicationDelegate or NSApplicationDelegate method:
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
  Messaging.serviceExtension().exportDeliveryMetricsToBigQuery(withMessageInfo:userInfo)
}

Objective-C

// For background notifications, call the API inside the
// UIApplicationDelegate or NSApplicationDelegate method:
@implementation AppDelegate
- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:userInfo];
}
@end

Android

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

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

הפעלת ייצוא של נתוני מסירה למופעים של אפליקציות

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

FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true);

הפעלת ייצוא של נתוני מסירה לאפליקציה

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

<application>
  <meta-data android:name="delivery_metrics_exported_to_big_query_enabled"
      android:value="true" />
</application>

אינטרנט

FCM SDK for Web בגרסה 12.14.0 ואילך מאפשר ייצוא של נתוני מסירה. ייצוא הנתונים מושבת כברירת מחדל ברמת האפליקציה. הפעלה של התכונה באופן פרוגרמטי ברמת מופע האפליקציה מאפשרת לכם לבקש ממשתמשי הקצה הרשאה לנתח את נתוני מסירת ההודעות שלהם (מומלץ). אם מגדירים את שניהם, הערך ברמת מופע האפליקציה מבטל את הערך ברמת האפליקציה. כשמשתמש קצה נותן הסכמה לאיסוף נתונים או דוחה אותו, האפליקציה צריכה להגדיר את הדגל הניסיוני enable או disable לכל מופע של האפליקציה, כמו שמוצג כאן:

// userConsent holds the decision of the user to give big query export consent.
const userConsent = ...;

const messaging = getMessagingInSw(app);

experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, userConsent);

אילו נתונים מיוצאים ל-BigQuery?

שימו לב: טירגוט של טוקנים לא פעילים או של רישומים לא פעילים עלול לגרום לניפוח של חלק מהנתונים הסטטיסטיים האלה.

הסכימה של הטבלה המיוצאת היא:

_PARTITIONTIME TIMESTAMP העמודה הזו מכילה חותמת זמן של תחילת היום (ב-UTC) שבו הנתונים נטענו. במחיצה YYYYMMDD, עמודת הדמה הזו מכילה את הערך TIMESTAMP('YYYY-MM-DD').
event_timestamp TIMESTAMP חותמת הזמן של האירוע כפי שנרשמה על ידי השרת
project_number מספר שלם מספר הפרויקט מזהה את הפרויקט שממנו נשלחה ההודעה
message_id מחרוזת מזהה ההודעה מזהה הודעה. מזהה ההודעה נוצר ממזהה האפליקציה ומחותמת הזמן, ולכן יכול להיות שבמקרים מסוימים הוא לא יהיה ייחודי גלובלית.
instance_id מחרוזת המזהה הייחודי של האפליקציה שאליה נשלחה ההודעה (אם זמין). יכול להיות שזה מזהה מופע או מזהה התקנה Firebase.
message_type מחרוזת סוג ההודעה. יכולה להיות הודעת התראה או הודעת נתונים. הנושא משמש לזיהוי ההודעה המקורית בנושא או בשליחת קמפיין; ההודעות הבאות הן התראה או הודעת נתונים.
sdk_platform מחרוזת הפלטפורמה של אפליקציית הנמען
app_name מחרוזת שם החבילה באפליקציות ל-Android או מזהה החבילה באפליקציות ל-iOS
collapse_key מחרוזת מקש הכיווץ מזהה קבוצת הודעות שאפשר לכווץ. כשמכשיר לא מחובר, רק ההודעה האחרונה עם מקש כיווץ נתון מוכנסת לתור למסירה בסופו של דבר
הרשמה בעדיפות מספר שלם העדיפות של ההודעה. 5 היא עדיפות 'רגילה' ו-10 היא עדיפות 'גבוהה'.
ttl מספר שלם הפרמטר הזה מציין למשך כמה זמן (בשניות) ההודעה צריכה להישמר באחסון של FCM אם המכשיר במצב אופליין.
נושא מחרוזת שם הנושא שאליו נשלחה ההודעה (אם רלוונטי)
bulk_id מספר שלם המזהה של הודעות בכמות גדולה מזהה קבוצה של הודעות קשורות, כמו שליחה מסוימת לנושא
אירוע מחרוזת סוג האירוע. הערכים האפשריים הם:
  • MESSAGE_ACCEPTED: ההודעה התקבלה על ידי שרת FCM והבקשה תקינה.
  • MESSAGE_DELIVERED: ההודעה נמסרה ל-FCM SDK של האפליקציה במכשיר. כברירת מחדל, השדה הזה לא מועבר. כדי להפעיל את התכונה, פועלים לפי ההוראות שמופיעות במאמר setDeliveryMetricsExportToBigQuery(boolean).
  • ‫MISSING_REGISTRATIONS: הבקשה נדחתה כי חסר רישום.
  • UNAUTHORIZED_REGISTRATION: ההודעה נדחתה כי לשולח אין הרשאה לשלוח לרישום;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: הייתה שגיאה לא מוגדרת במהלך עיבוד בקשת ההודעה.
  • ‫MISMATCH_SENDER_ID: הבקשה לשליחת הודעה נדחתה בגלל חוסר התאמה בין מזהה השולח ששולח את ההודעה לבין המזהה שהוגדר לנקודת הקצה.
  • QUOTA_EXCEEDED: הבקשה לשליחת הודעה נדחתה בגלל מכסה לא מספיקה.
  • INVALID_REGISTRATION: הבקשה לשליחת הודעה נדחתה בגלל רישום לא תקין.
  • ‫INVALID_PACKAGE_NAME: הבקשה לשליחת הודעה נדחתה בגלל שם חבילה לא תקין.
  • ‫INVALID_APNS_CREDENTIAL: הבקשה לשליחת הודעה נדחתה בגלל אישור APNS לא תקין.
  • INVALID_PARAMETERS: הבקשה לשליחת הודעה נדחתה בגלל פרמטרים לא תקינים.
  • PAYLOAD_TOO_LARGE: הבקשה לשליחת הודעה נדחתה כי מטען הייעוד גדול מהמגבלה;
  • שגיאת אימות: הבקשה לשליחת הודעה נדחתה בגלל שגיאת אימות (צריך לבדוק את מפתח ה-API ששימש לשליחת ההודעה).
  • ‫INVALID_TTL: הבקשה לשליחת הודעה נדחתה בגלל TTL לא תקין.
analytics_label מחרוזת באמצעות HTTP v1 API, אפשר להגדיר את התווית של Analytics כששולחים את ההודעה, כדי לסמן את ההודעה למטרות ניתוח נתונים

מה אפשר לעשות עם הנתונים שיוצאו?

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

מספר ההודעות שנשלחו לפי אפליקציה

SELECT app_name, COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_id != ''
GROUP BY 1;

ספירת מקרים ייחודיים של אפליקציות שהודעות מיועדות להן

SELECT COUNT(DISTINCT instance_id)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED';

מספר ההודעות שנשלחו

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DISPLAY_NOTIFICATION';

ספירת הודעות נתונים שנשלחו

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DATA_MESSAGE';

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

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND bulk_id = your bulk id AND message_id != '';

כדי לעקוב אחרי אירועים של הודעה שנשלחה לנושא מסוים, משנים את השאילתה הזו ומחליפים את AND message_id != '' ב-AND message_id = <your message id>;.

חישוב משך הזמן של ההפצה לכלל המשתמשים בנושא או בקמפיין נתון

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

SELECT
  TIMESTAMP_DIFF(
    end_timestamp, start_timestamp, MILLISECOND
  ) AS fanout_duration_ms,
  end_timestamp,
  start_timestamp
FROM (
    SELECT MAX(event_timestamp) AS end_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS start_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
      AND message_type = 'TOPIC'
  ) initial_message;

אחוז ההודעות שנמסרו

SELECT
  messages_sent,
  messages_delivered,
  messages_delivered / messages_sent * 100 AS percent_delivered
FROM (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_sent
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_delivered
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND (event = 'MESSAGE_DELIVERED'
      AND message_id
      IN (
        SELECT message_id FROM `project ID.firebase_messaging.data`
        WHERE
          _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
          AND event = 'MESSAGE_ACCEPTED'
        GROUP BY 1
      )
  ) delivered;

מעקב אחרי כל האירועים של מזהה הודעה ומזהה מופע מסוימים

SELECT *
FROM `project ID.firebase_messaging.data`
WHERE
    _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
    AND message_id = 'your message id'
    AND instance_id = 'your instance id'
ORDER BY event_timestamp;

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

SELECT
  TIMESTAMP_DIFF(
    MAX(delivered_time), MIN(accepted_time), MILLISECOND
  ) AS latency_ms
FROM (
    SELECT event_timestamp AS accepted_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND message_id = 'your message id'
      AND instance_id = 'your instance id'
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS delivered_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD') AND
      message_id = 'your message id' AND instance_id = 'your instance id'
      AND (event = 'MESSAGE_DELIVERED'
  ) delivered;