ב-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:
בחר אחת מהאפשרויות הבאות:
פותחים את כלי היצירה של התראות ולוחצים על Access BigQuery (גישה ל-BigQuery) בתחתית הדף.
מתוך שילובים במסוף Firebase, לוחצים על קישור ב-BigQuery. של Google.
בדף הזה מוצגות אפשרויות הייצוא של FCM לכל האפליקציות שפועלות עם FCM בפרויקט.
פועלים לפי ההוראות במסך כדי להפעיל את BigQuery.
מידע נוסף זמין במאמר קישור בין Firebase ל-BigQuery. אפשר לקבל מידע נוסף.
כשמפעילים את הייצוא של BigQuery עבור Cloud Messaging:
מערכת Firebase מייצאת את הנתונים שלך אל BigQuery. לתשומת ליבכם: יכול להיות שיחלפו עד 48 שעות עד שההפצה הראשונית של הנתונים לייצוא תושלם.
- אתם יכולים לתזמן באופן ידני מילוי חוסרים בנתונים עד 30 הימים האחרונים.
אחרי יצירת מערך הנתונים, המיקום אי אפשר לשנות את ההגדרה, אבל אפשר להעתיק את מערך הנתונים למיקום אחר. או להעביר (ליצור מחדש) את מערך הנתונים במיקום אחר באופן ידני. למידה מידע נוסף זמין במאמר שינוי המיקום של מערך הנתונים.
מערכת 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 | מספר שלם | המזהה הכולל מזהה קבוצה של הודעות קשורות, כמו שליחה ספציפית לנושא |
אירוע | מחרוזת | סוג האירוע.
הערכים האפשריים הם:
|
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;