כדי לפתור בעיות שקשורות לשיבוש בהעברת הודעות, אפשר להשתמש בפותר הבעיות של FCM ולעיין בפוסט הזה בבלוג כדי להבין את הסיבות השונות לכך שההודעה לא מוצגת. אפשר גם להיכנס אל לוח הבקרה של סטטוס FCM כדי לזהות אם יש שיבושים בשירות שמשפיעים על FCM.
ב-FCM יש גם שלושה סוגי כלים שיעזרו לכם לקבל תובנות לגבי הערכה רחבה של הצלחת ההודעות והאסטרטגיה:
- Firebase דוחות מסירה של הודעות במסוף
- מדדים מצטברים של מסירת Android SDK מ-Firebase Cloud Messaging Data API
- ייצוא מקיף של נתונים ל-Google BigQuery
כדי להשתמש בייצוא נתונים ל-BigQuery ובכרטיסייה Reports במסוף Firebase, צריך להגדיר Google Analytics. אם Google Analytics לא מופעל בפרויקט שלכם, אתם יכולים להגדיר אותו בכרטיסייה integrations (שילובים) בהגדרות הפרויקט ב-Firebase. נתוני משלוח מצטברים לא דורשים את Google Analytics כדי לפעול.
חשוב לזכור שדיווח של נתונים סטטיסטיים רבים בדף הזה עשוי להתעכב עד 24 שעות בגלל עיבוד באצווה של נתוני ניתוח.
דוחות מסירה של הודעות
בכרטיסייה דוחות במסוף Firebase, אפשר לראות את הנתונים הבאים לגבי הודעות שנשלחו ל-SDK של FCM בפלטפורמות Android או Apple, כולל הודעות שנשלחו באמצעות הכלי ליצירת הודעות ו-FCM API:
- נשלח – הודעת הנתונים או הודעת ההתראה הוכנסה לתור למסירה או הועברה בהצלחה לשירות של צד שלישי, כמו APNs, למסירה. הערה: יכול להיות עיכוב של כמה שעות בעדכון הנתונים הסטטיסטיים של שליחת האימיילים. מידע נוסף זמין במאמר בנושא משך החיים של הודעה.
- התקבל (זמין רק במכשירי Android) – הודעת הנתונים או הודעת ההתראה התקבלו באפליקציה. הנתונים האלה זמינים אם במכשיר Android המקבל מותקן FCM SDK בגרסה 18.0.1 ואילך.
- חשיפות (זמין רק להודעות התראה במכשירי Android) – ההתראה על הצגת המודעה הוצגה במכשיר בזמן שהאפליקציה פעלה ברקע.
- פתיחה – המשתמש פתח את הודעת ההתראה. הנתונים האלה מדווחים רק על התראות שהתקבלו כשהאפליקציה פועלת ברקע.
הנתונים האלה זמינים לכל ההודעות עם מטען ייעודי (payload) של התראה ולכל הודעות הנתונים שסומנו בתווית. מידע נוסף על תוויות זמין במאמר הוספת תוויות של Analytics להודעות.
כשצופים בדוחות על הודעות, אפשר להגדיר טווח תאריכים לנתונים שמוצגים, וגם לייצא אותם לקובץ CSV. אפשר גם לסנן לפי הקריטריונים הבאים:
- פלטפורמה (iOS או Android)
- אפליקציה
- תוויות מותאמות אישית של ניתוח נתונים
הוספת תוויות ניתוח להודעות
הוספת תוויות להודעות שימושית מאוד לניתוח בהתאמה אישית, ומאפשרת לסנן את נתוני המסירה לפי תוויות או לפי קבוצות של תוויות. אפשר להוסיף תווית לכל הודעה שנשלחת באמצעות HTTP v1 API על ידי הגדרת השדה fcmOptions.analyticsLabel
באובייקט message או בשדות AndroidFcmOptions
או ApnsFcmOptions
הספציפיים לפלטפורמה.
תוויות Analytics הן מחרוזות טקסט בפורמט ^[a-zA-Z0-9-_.~%]{1,50}$
.
התוויות יכולות לכלול אותיות קטנות וגדולות, מספרים ואת הסמלים הבאים:
-
~
%
האורך המרבי הוא 50 תווים. אפשר לציין עד 100 תוויות ייחודיות ביום. הודעות שנוספו להן תוויות מעבר למגבלה הזו לא ידווחו.
בכרטיסייה Firebase console messaging 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 מספק יומנים של הודעות ספציפיות לגבי קבלת ההודעה על ידי ה-Backend של 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 נועדו לספק תובנות לגבי מגמות כלליות של מסירת הודעות. עם זאת, הם לא מספקים כיסוי מלא של כל תרחישי ההודעות. התרחישים הבאים הם תוצאות ידועות שלא משתקפות במדדים.
הודעות שפג תוקפן
אם אורך החיים (TTL) פג אחרי תאריך הסיום של היומן שצוין, ההודעה לא תיספר כ-droppedTtlExpired
בתאריך הזה.
הודעות למכשירים לא פעילים
הודעות שנשלחות למכשירים לא פעילים עשויות להופיע במערך הנתונים או לא להופיע בו, בהתאם לנתיב הנתונים שהן עוברות. זה יכול להוביל לספירה שגויה בשדות droppedDeviceInactive
ו-pending
.
הודעות למכשירים עם העדפות משתמש מסוימות
המשתמשים שהשביתו במכשירים שלהם את איסוף נתוני השימוש וניתוח הביצועים לא ייכללו בספירה שלנו, בהתאם להעדפות שלהם.
עיגול וערכי מינימום
מערכת FCM מעגלת בכוונה את המספרים ומוציאה מהספירה נתונים שבהם נפח הנתונים לא גדול מספיק.
ייצוא נתונים ל-BigQuery
אפשר לייצא את נתוני ההודעות ל-BigQuery כדי לבצע ניתוח נוסף. BigQuery מאפשר לכם לנתח את הנתונים באמצעות BigQuery SQL, לייצא אותם לספק ענן אחר או להשתמש בנתונים במודלים מותאמים אישית של ML. ייצוא ל-BigQuery כולל את כל הנתונים שזמינים לגבי הודעות, בלי קשר לסוג ההודעה או לאופן השליחה שלה – דרך ה-API או דרך הכלי ליצירת הודעות.
אם אתם שולחים הודעות למכשירים עם גרסאות מינימליות של FCM SDK, יש לכם אפשרות נוספת להפעיל את ייצוא נתוני מסירת ההודעות באפליקציה:
- Android מגרסה 20.1.0 ואילך.
- iOS מגרסה 8.6.0 ואילך
- Firebase Web SDK בגרסה 9.0.0 ואילך
בהמשך מפורטות הוראות להפעלת ייצוא נתונים ב-Android וב-iOS.
כדי להתחיל, מקשרים את הפרויקט ל-BigQuery:
בחר אחת מהאפשרויות הבאות:
פותחים את הכלי ליצירת התראות ולוחצים על גישה ל-BigQuery בתחתית הדף.
בדף Integrations (שילובים) במסוף Firebase, לוחצים על Link (קישור) בכרטיס BigQuery.
בדף הזה מוצגות FCM אפשרויות ייצוא לכל האפליקציות FCM שהופעלו בפרויקט.
פועלים לפי ההוראות במסך כדי להפעיל את BigQuery.
מידע נוסף זמין במאמר בנושא קישור Firebase ל-BigQuery.
כשמפעילים ייצוא של BigQuery ל-Cloud Messaging:
מערכת Firebase מייצאת את הנתונים אל BigQuery. הערה: יכול להיות שיחלפו עד 48 שעות עד שהנתונים יתפשטו ויהיו מוכנים לייצוא.
- אפשר לתזמן באופן ידני מילוי חוסרים בנתונים עד 30 ימים אחורה.
אי אפשר לשנות את המיקום אחרי שיוצרים מערך הנתונים, אבל אפשר להעתיק את מערך הנתונים למיקום אחר או להעביר ידנית את מערך הנתונים למיקום אחר (ליצור אותו מחדש). מידע נוסף זמין במאמר שינוי המיקום של מערך נתונים.
מערכת Firebase מגדירה סנכרונים קבועים של הנתונים מפרויקט Firebase אל BigQuery. פעולות הייצוא היומיות האלה מתחילות בשעה 4: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
אם אתם יוצרים בקשות שליחה באמצעות HTTP v1 API, הקפידו לציין mutable-content = 1
באובייקט המטען.
הפעלת ייצוא של נתוני מסירה להתראות ברקע
כדי לקבל הודעות ברקע כשהאפליקציה בחזית או ברקע, אפשר לקרוא ל-Data Export 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 | חותמת זמן | חותמת הזמן של האירוע כפי שנרשמה על ידי השרת |
project_number | מספר שלם | מספר הפרויקט מזהה את הפרויקט שממנו נשלחה ההודעה |
message_id | מחרוזת | מזהה ההודעה מזהה הודעה. מזהה ההודעה נוצר ממזהה האפליקציה ומחותמת הזמן, ולכן יכול להיות שבמקרים מסוימים הוא לא יהיה ייחודי גלובלית. |
instance_id | מחרוזת | המזהה הייחודי של האפליקציה שאליה נשלחת ההודעה (אם זמין). יכול להיות שזה מזהה מופע או מזהה התקנה Firebase. |
message_type | מחרוזת | סוג ההודעה. יכולה להיות הודעת התראה או הודעת נתונים. הנושא משמש לזיהוי ההודעה המקורית בנושא או בשליחת קמפיין; ההודעות הבאות הן התראה או הודעת נתונים. |
sdk_platform | מחרוזת | הפלטפורמה של אפליקציית הנמען |
app_name | מחרוזת | שם החבילה באפליקציות ל-Android או מזהה החבילה באפליקציות ל-iOS |
collapse_key | מחרוזת | מפתח הכיווץ מזהה קבוצה של הודעות שאפשר לכווץ. כשמכשיר לא מחובר, רק ההודעה האחרונה עם מפתח צמצום נתון מתווספת לתור למסירה בסופו של דבר |
הרשמה בעדיפות | מספר שלם | העדיפות של ההודעה. הערכים התקינים הם normal ו-high. ב-iOS, הם תואמים לעדיפויות 5 ו-10 ב-APNs |
ttl | מספר שלם | הפרמטר הזה מציין למשך כמה זמן (בשניות) ההודעה צריכה להישמר באחסון של FCM אם המכשיר במצב אופליין. |
נושא | מחרוזת | שם הנושא שאליו נשלחה ההודעה (אם רלוונטי) |
bulk_id | מספר שלם | המזהה של ההודעה בכמות גדולה מזהה קבוצה של הודעות קשורות, כמו הודעה מסוימת שנשלחה לנושא |
אירוע | מחרוזת | סוג האירוע.
הערכים האפשריים הם:
|
analytics_label | מחרוזת | באמצעות HTTP v1 API, אפשר להגדיר את התווית של Analytics כששולחים את ההודעה, כדי לסמן את ההודעה למטרות ניתוח נתונים |
מה אפשר לעשות עם הנתונים המיוצאים?
בקטעים הבאים מופיעות דוגמאות לשאילתות שאפשר להריץ ב-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;