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

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

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

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

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

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

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

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

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

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

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

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

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

במקרים מסוימים, יכול להיות ששתי קבוצות הנתונים לא יהיו זהות לחלוטין בגלל:

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

מגבלות ה-API

לוחות הזמנים של הנתונים הנצברים

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

כיסוי נתונים

המדדים שסופקו על ידי 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) בתחתית הדף.

    • מתוך שילובים במסוף Firebase, לוחצים על קישור ב-BigQuery. של Google.

      בדף הזה מוצגות אפשרויות הייצוא של 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 של ייצוא הנתונים בתוך ה-handler של הודעות הנתונים באפליקציה הראשית. צריך לבצע את הקריאה הזו לכל התראה שמתקבלת:

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 חותמת זמן עמודת פסאודו זו מכילה חותמת זמן של תחילת היום (לפי שעון UTC) שבה הנתונים נטענו. עבור המחיצה YYYYMMDD, עמודת הפסאודו הזו מכיל את הערך TIMESTAMP('YYYY-MM-DD').
event_timestamp חותמת זמן חותמת הזמן של האירוע, כפי שתועד על ידי השרת
מספר_פרויקט מספר שלם מספר הפרויקט מזהה את הפרויקט ששלח את ההודעה
message_id מחרוזת מזהה ההודעה משמש לזיהוי ההודעה. מזהה ההודעה נוצר מ-App ID ומחותמת הזמן, ובמקרים מסוימים הוא לא ייחודי גלובלית.
instance_id מחרוזת המזהה הייחודי של האפליקציה שאליה נשלחת ההודעה (אם הוא זמין). הוא יכול להיות מזהה מכונה או מזהה התקנה של Firebase.
message_type מחרוזת סוג ההודעה. יכול להיות הודעת התראה או הודעת נתונים. הנושא משמש לזיהוי ההודעה המקורית לשליחה של נושא או קמפיין. ההודעות הבאות הן התראות או הודעות נתונים.
sdk_platform מחרוזת הפלטפורמה של אפליקציית הנמען
app_name מחרוזת שם החבילה של אפליקציות ל-Android או מזהה החבילה של אפליקציות ל-iOS
collapse_key מחרוזת מפתח הכיווץ מזהה קבוצה של הודעות שאפשר לכווץ. כשמכשיר לא מחובר, רק ההודעה האחרונה עם מפתח התכווץ נתונה בתור להעברה בעתיד
הרשמה בעדיפות מספר שלם עדיפות ההודעה. הערכים החוקיים הם 'רגילים' ו-"high". ב-iOS, הערכים האלה תואמים לעדיפויות APN‏ 5 ו-10
ttl מספר שלם הפרמטר הזה מציין למשך כמה זמן (בשניות) ההודעה צריכה להישמר באחסון של FCM אם המכשיר במצב אופליין
נושא מחרוזת שם הנושא שאליו נשלחה הודעה (אם רלוונטי)
count_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>;.

חישוב משך הזמן של fanout לנושא או לקמפיין מסוימים

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

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;