הבנת העברת הודעות

FCM מספקת שלוש קבוצות של כלים שיעזרו לך לקבל תובנות לגבי העברת הודעות:

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

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

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

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

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

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

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

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

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

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

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

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

  • -
  • ~
  • %

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

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

ניתוח משפך הודעות

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

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

כדי לראות את ניתוח משפך ההודעות:

  1. במלחין ההודעות, בחר בכרטיסייה הודעות .
  2. לחץ על הודעה שהושלמה או בתהליך ברשימת ההודעות. מוצגת תצוגה מורחבת הכוללת ניתוח משפך.

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

נתוני מסירה מצטברים דרך FCM Data API

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

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

איך הנתונים מפורקים?

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

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

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

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

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

אחוזי ביצועי משלוח

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

Message Insight אחוזים

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

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

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

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

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

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

מגבלות ה-API

עיכוב נתונים

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

כיסוי נתונים

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

הודעות מכווצות

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

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

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

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

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

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

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

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

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

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

  • אנדרואיד 20.1.0 ומעלה.
  • iOS 8.6.0 ומעלה
  • Firebase Web SDK 9.0.0 ומעלה

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

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

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

    • פתח את יוצר ההתראות ולאחר מכן לחץ על גישה אל BigQuery בתחתית הדף.

    • בדף השילובים במסוף Firebase , לחץ על קישור בכרטיס BigQuery .

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

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

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

לאחר שתקשר את הפרויקט שלך ל-BigQuery:

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

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

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

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

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

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

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

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

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

מָהִיר

// 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 של ייצוא הנתונים בתוך מטפל הודעות הנתונים של האפליקציה הראשית UIApplicationDelegate application:didReceiveRemoteNotification:fetchCompletionHandler: . יש לבצע שיחה זו עבור כל הודעה שמתקבלת:

מָהִיר

// For background notifications, call the API inside the UIApplicationDelegate 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 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 חוּט מזהה ההודעה מזהה הודעה. נוצר ממזהה האפליקציה וחותמת הזמן, מזהה ההודעה עשוי, במקרים מסוימים, לא להיות ייחודי גלובלי.
instance_id חוּט מזהה המופע של האפליקציה שאליה ההודעה נשלחת (כאשר זמין)
סוג הודעה חוּט סוג ההודעה. יכולה להיות הודעת הודעה או הודעת נתונים. נושא משמש לזיהוי ההודעה המקורית עבור נושא או קמפיין שליחה; ההודעות הבאות הן הודעה או הודעת נתונים.
sdk_platform חוּט הפלטפורמה של אפליקציית הנמען
שם האפליקציה חוּט שם החבילה עבור אפליקציות אנדרואיד או מזהה החבילה עבור אפליקציות 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 לא חוקי.
תווית_אנליטיקה חוּט עם ה-API של HTTP v1 , ניתן להגדיר את תווית הניתוח בעת שליחת ההודעה, על מנת לסמן את ההודעה למטרות ניתוח

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

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