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
באובייקט ההודעה , או בשדות AndroidFcmOptions
או ApnsFcmOptions
הספציפיים לפלטפורמה.
תוויות Analytics הן מחרוזות טקסט בפורמט ^[a-zA-Z0-9-_.~%]{1,50}$
. תוויות יכולות לכלול אותיות קטנות וגדולות, מספרים והסמלים הבאים:
-
-
-
~
-
%
האורך המרבי הוא 50 תווים. אתה יכול לציין עד 100 תוויות ייחודיות ליום; הודעות עם תוויות שנוספו מעבר למגבלה זו אינן מדווחות.
בכרטיסייה דוחות הודעות במסוף Firebase, תוכל לחפש רשימה של כל התוויות הקיימות ולהחיל אותן בנפרד או בשילוב כדי לסנן את הנתונים הסטטיסטיים המוצגים.
נתוני מסירה מצטברים באמצעות 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 יחזיר 7 ימים של נתונים היסטוריים; עם זאת, נתונים שיוחזרו על ידי API זה יעוכבו עד 5 ימים. לדוגמה, ב-20 בינואר, הנתונים עבור 9 בינואר עד 15 בינואר יהיו זמינים, אך לא עבור 16 בינואר ואילך. בנוסף, הנתונים מסופקים בכל מאמץ. במקרה של הפסקת נתונים, 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:
בחר אחת מהאפשרויות הבאות:
פתח את יוצר ההתראות ולאחר מכן לחץ על גישה אל BigQuery בתחתית הדף.
בדף השילובים במסוף Firebase, לחץ על קישור בכרטיס BigQuery .
דף זה מציג אפשרויות ייצוא של FCM עבור כל האפליקציות התומכות ב-FCM בפרויקט.
עקוב אחר ההוראות שעל המסך כדי להפעיל את BigQuery.
עיין בקישור Firebase ל-BigQuery למידע נוסף.
כאשר אתה מפעיל את BigQuery Export עבור העברת הודעות בענן:
Firebase מייצא את הנתונים שלך ל-BigQuery. שים לב שההפצה הראשונית של נתונים לייצוא עשויה להימשך עד 48 שעות.
- אתה יכול לתזמן באופן ידני מילוי חוזר של נתונים עד 30 הימים האחרונים.
לאחר יצירת מערך הנתונים, לא ניתן לשנות את המיקום, אך ניתן להעתיק את מערך הנתונים למיקום אחר או להעביר (ליצור מחדש) באופן ידני את מערך הנתונים במיקום אחר. למידע נוסף, ראה שינוי מיקום מערך הנתונים .
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 של ייצוא הנתונים בתוך המטפל בהודעות הנתונים של האפליקציה הראשית. יש לבצע שיחה זו עבור כל הודעה שמתקבלת:
מָהִיר
// 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 | חוּט | מזהה ההודעה מזהה הודעה. נוצר ממזהה האפליקציה וחותמת הזמן, מזהה ההודעה עשוי, במקרים מסוימים, לא להיות ייחודי גלובלי. |
instance_id | חוּט | המזהה הייחודי של האפליקציה שאליה ההודעה נשלחת (כאשר זמין). זה יכול להיות מזהה מופע או מזהה התקנה של Firebase. |
סוג הודעה | חוּט | סוג ההודעה. יכולה להיות הודעת הודעה או הודעת נתונים. נושא משמש לזיהוי ההודעה המקורית עבור נושא או קמפיין שליחה; ההודעות הבאות הן הודעה או הודעת נתונים. |
sdk_platform | חוּט | הפלטפורמה של אפליקציית הנמען |
שם האפליקציה | חוּט | שם החבילה עבור אפליקציות אנדרואיד או מזהה החבילה עבור אפליקציות iOS |
collapse_key | חוּט | מפתח הכיווץ מזהה קבוצת הודעות שניתן לכווץ. כאשר מכשיר אינו מחובר, רק ההודעה האחרונה עם מפתח כיווץ נתון נמצאת בתור למסירה בסופו של דבר |
עדיפות | מספר שלם | העדיפות של ההודעה. ערכים חוקיים הם "רגיל" ו"גבוה". ב-iOS, אלה תואמים לעדיפויות APN 5 ו-10 |
ttl | מספר שלם | פרמטר זה מציין כמה זמן (בשניות) ההודעה צריכה להישמר באחסון FCM אם המכשיר לא מקוון |
נוֹשֵׂא | חוּט | שם הנושא שאליו נשלחה הודעה (כאשר רלוונטי) |
bulk_id | מספר שלם | המזהה בכמות גדולה מזהה קבוצה של הודעות קשורות, כגון שליחה מסוימת לנושא |
מִקרֶה | חוּט | סוג האירוע. ערכים אפשריים הם:
|
תווית_אנליטיקה | חוּט | עם ה- 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;