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

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

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

כל כלי הדיווח המתוארים בדף הזה דורשים את Google Analytics כדי לפעול. אם Google Analytics לא מופעל בפרויקט, תוכלו להגדיר אותו בכרטיסייה integrations בהגדרות הפרויקט ב-Firebase.

חשוב לזכור שדיווח על רבים מהנתונים הסטטיסטיים בדף הזה עשוי להתעכב עד 24 שעות בגלל קיבוץ של נתוני ניתוח.

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

בכרטיסייה Reports במסוף Firebase, אפשר לראות את הנתונים הבאים לגבי הודעות שנשלחו ל-FCM SDK של פלטפורמת Android או Apple, כולל הודעות שנשלחו דרך הכלי ליצירת התראות ו-FCM APIs:

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

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

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

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

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

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

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

  • -
  • ~
  • %

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

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

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

אם התוקף של Time To Live (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 בגרסה 9.0.0 ואילך

בהמשך מוסבר איך מפעילים את ייצוא הנתונים ל-Android ול-iOS.

כדי להתחיל, מקשרים את הפרויקט ל-BigQuery:

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

    • פותחים את כלי היצירה של התראות ולוחצים על Access BigQuery (גישה ל-BigQuery) בתחתית הדף.

    • בדף Integrations במסוף Firebase, לוחצים על Link בכרטיס BigQuery.

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

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

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

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

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

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

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

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

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

הפעלת ייצוא של נתוני שליחת הודעות

במכשירי 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.extensionHelper()
      .exportDeliveryMetricsToBigQuery(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

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

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

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

Swift

// For background notifications, call the API inside the UIApplicationDelegate or NSApplicationDelegate method:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
  Messaging.extensionHelper().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

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

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

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

_PARTITIONTIME TIMESTAMP העמודה הזו מכילה חותמת זמן לתחילת היום (לפי שעון UTC) שבו הנתונים נטענו. במחיצה YYYYMMDD, העמודה הזו מכילה את הערך TIMESTAMP('YYYY-MM-DD').
event_timestamp TIMESTAMP חותמת הזמן של האירוע כפי שתועדה על ידי השרת
project_number מספר שלם מספר הפרויקט מזהה את הפרויקט ששלח את ההודעה
message_id מחרוזת מזהה ההודעה מזהה הודעה. מזהה ההודעה נוצר מ-App ID ומחותמת הזמן, ובמקרים מסוימים הוא לא ייחודי גלובלית.
instance_id מחרוזת המזהה הייחודי של האפליקציה שאליה נשלחת ההודעה (אם הוא זמין). הוא יכול להיות מזהה מכונה או מזהה התקנה של Firebase.
message_type מחרוזת סוג ההודעה. יכולה להיות הודעת התראה או הודעת נתונים. הנושא משמש לזיהוי ההודעה המקורית לשליחה של נושא או קמפיין. ההודעות הבאות הן התראות או הודעות נתונים.
sdk_platform מחרוזת הפלטפורמה של אפליקציית הנמען
app_name מחרוזת שם החבילה של אפליקציות ל-Android או מזהה החבילה של אפליקציות ל-iOS
collapse_key מחרוזת מקש ההתכווצות מזהה קבוצה של הודעות שאפשר לכווץ. כשמכשיר לא מחובר, רק ההודעה האחרונה עם מפתח התכווץ נתונה בתור להעברה בעתיד
הרשמה בעדיפות מספר שלם עדיפות ההודעה. הערכים החוקיים הם 'רגיל' ו'גבוה'. ב-iOS, הערכים האלה תואמים לעדיפויות APN‏ 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: הבקשה לשלוח הודעה נדחתה בגלל עומס יתר גדול מהמגבלה.
  • AUTHENTICATION_ERROR: הבקשה לשלוח הודעה נדחתה בגלל שגיאת אימות (צריך לבדוק את מפתח ה-API ששימש לשליחת ההודעה).
  • INVALID_TTL: הבקשה לשלוח הודעה נדחתה בגלל TTL לא תקין.
analytics_label מחרוזת באמצעות HTTP v1 API, אפשר להגדיר את תווית הניתוח בזמן שליחת ההודעה, כדי לסמן את ההודעה למטרות ניתוח נתונים.

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

בקטעים הבאים מפורטות דוגמאות לשאילתות שאפשר להריץ ב-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;