FCM bietet drei Tools, mit denen Sie Informationen zur Nachrichtenübermittlung erhalten:
- Firebase Berichte zur Nachrichtenzustellung in der Konsole
- Aggregierte Übermittlungsmesswerte des Android SDK aus der Firebase Cloud Messaging Data API
- Umfassender Datenexport nach Google BigQuery
Für die auf dieser Seite beschriebenen Berichtstools ist Google Analytics erforderlich. Wenn Google Analytics für Ihr Projekt nicht aktiviert ist, können Sie es in den Firebase-Projekteinstellungen auf dem Tab Integrationen einrichten.
Beachten Sie, dass die Berichte zu vielen der Statistiken auf dieser Seite aufgrund der Batchverarbeitung von Analysedaten bis zu 24 Stunden verzögert sein können.
Berichte zur Nachrichtenübermittlung
Auf dem Tab Berichte in der Firebase-Konsole können Sie die folgenden Daten für Nachrichten aufrufen, die an FCM-SDKs der Android- oder Apple-Plattform gesendet wurden, einschließlich derjenigen, die über den Benachrichtigungs-Composer und die FCM APIs gesendet wurden:
- Sends: Die Daten- oder Benachrichtigungsnachricht wurde zur Zustellung in die Warteschlange gestellt oder zur Zustellung an einen Drittanbieterdienst wie APNs übergeben. Weitere Informationen finden Sie unter Lebensdauer einer Nachricht.
- Empfangen (nur auf Android-Geräten verfügbar): Die Daten- oder Benachrichtigungsnachricht wurde von der App empfangen. Diese Daten sind verfügbar, wenn auf dem empfangenden Android-Gerät das FCM SDK 18.0.1 oder höher installiert ist.
- Impressionen (nur für Benachrichtigungsnachrichten auf Android-Geräten verfügbar): Die Benachrichtigung wurde auf dem Gerät angezeigt, während die App im Hintergrund ausgeführt wurde.
- Öffnet – Der Nutzer hat die Benachrichtigung geöffnet. Nur für Benachrichtigungen erfasst, die empfangen werden, während die App im Hintergrund läuft.
Diese Daten sind für alle Nachrichten mit einer Benachrichtigungsnutzlast und für alle Datennachrichten mit Label verfügbar. Weitere Informationen zu Labels finden Sie unter Analyselabels zu Nachrichten hinzufügen.
Wenn Sie sich Bericht zu Nachrichten ansehen, können Sie einen Zeitraum für die angezeigten Daten festlegen und sie in eine CSV-Datei exportieren. Sie können auch nach folgenden Kriterien filtern:
- Plattform (iOS oder Android)
- App
- Benutzerdefinierte Analyselabels
Nachrichten Analyselabels hinzufügen
Das Beschriften von E-Mails ist sehr nützlich für benutzerdefinierte Analysen, da Sie Zustellungsstatistiken nach Labels oder Labelsets filtern können. Sie können jeder Nachricht, die über die HTTP v1 API gesendet wird, ein Label hinzufügen. Dazu müssen Sie das Feld fcmOptions.analyticsLabel
im message-Objekt oder in den plattformspezifischen Feldern AndroidFcmOptions
oder ApnsFcmOptions
festlegen.
Analytics-Labels sind Textstrings im Format ^[a-zA-Z0-9-_.~%]{1,50}$
.
Labels können Klein- und Großbuchstaben, Zahlen und die folgenden Symbole enthalten:
-
~
%
Darf maximal 50 Zeichen lang sein. Sie können bis zu 100 einzelne Labels pro Tag angeben. Nachrichten mit Labels, die über dieses Limit hinausgehen, werden nicht erfasst.
Auf dem Tab Firebase Berichte können Sie in einer Liste aller vorhandenen Labels suchen und sie einzeln oder in Kombination anwenden, um die angezeigten Statistiken zu filtern.
Aggregierte Übermittlungsdaten über die FCM Data API
Mit der Firebase Cloud Messaging Data API können Sie Informationen abrufen, mit denen Sie die Ergebnisse von Nachrichtenanfragen nachvollziehen können, die auf Android-Apps ausgerichtet sind. Die API stellt aggregierte Daten für alle Android-Geräte in einem Projekt bereit, auf denen die Datenerhebung aktiviert ist. Dazu gehören Details zum Prozentsatz der ohne Verzögerung zugestellten Nachrichten sowie dazu, wie viele Nachrichten innerhalb der Android-Transportschicht verzögert oder verworfen wurden. Die Auswertung dieser Daten kann allgemeine Trends bei der Nachrichtenübermittlung aufzeigen und Ihnen helfen, effektive Möglichkeiten zur Verbesserung der Leistung Ihrer Sendeanfragen zu finden. Informationen zur Verfügbarkeit von Zeiträumen in Berichten finden Sie unter Zeitleisten für aggregierte Daten.
Die API stellt alle für eine bestimmte Anwendung verfügbaren Daten bereit. Weitere Informationen finden Sie in der API-Referenzdokumentation.
Wie werden die Daten aufgeschlüsselt?
Die Übermittlungsdaten sind nach Anwendung, Datum und Analyselabel aufgeschlüsselt.
Ein API-Aufruf gibt Daten für jede Kombination aus Datum, Anwendung und Analyselabel zurück. Ein einzelnes androidDeliveryData
-JSON-Objekt könnte beispielsweise so aussehen:
{
"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
}
}
Messwerte auswerten
In den Zustellungsdaten sehen Sie den Prozentsatz der Nachrichten, die zu den einzelnen Messwerten passen. Es ist möglich, dass eine einzelne Nachricht mehreren Messwerten zugeordnet werden kann. Aufgrund von Einschränkungen bei der Datenerhebung und der Detailgenauigkeit, mit der die Messwerte aggregiert wurden, sind einige Nachrichtenergebnisse in den Messwerten gar nicht enthalten. Die Summe der Prozentsätze unten ergibt daher nicht 100%.
Akzeptierte Nachrichten zählen
Im Datensatz ist nur die Anzahl der Nachrichten enthalten, die von FCM zur Zustellung an Android-Geräte akzeptiert wurden. Dieser Wert wird als Nenner für alle Prozentsätze verwendet. Diese Anzahl umfasst keine Nachrichten, die auf Nutzer ausgerichtet sind, die die Erhebung von Nutzungs- und Diagnosedaten auf ihren Geräten deaktiviert haben.
Prozentsätze für Nachrichtenergebnisse
Die Felder im MessageOutcomePercents
-Objekt enthalten Informationen zu den Ergebnissen von Nachrichtenanfragen. Die Kategorien schließen sich gegenseitig aus. Sie können damit Fragen wie „Werden meine Nachrichten zugestellt?“ und „Warum werden Nachrichten nicht zugestellt?“ beantworten.
Ein hoher Wert für das Feld droppedTooManyPendingMessages
kann beispielsweise darauf hinweisen, dass App-Instanzen eine große Menge an nicht minimierbaren Nachrichten erhalten, die das Limit von 100 ausstehenden Nachrichten von FCM übersteigt.
Achten Sie darauf, dass Ihre App Aufrufe von onDeletedMessages
verarbeitet, und senden Sie gegebenenfalls minimierte Nachrichten. Hohe Prozentsätze für droppedDeviceInactive
können ebenfalls ein Signal sein, Registrierungstokens auf Ihrem Server zu aktualisieren, veraltete Tokens zu entfernen und die Themenabos aufzuheben. Best Practices in diesem Bereich finden Sie unter FCM-Registrierungstokens verwalten.
Prozentsatz der Auslieferungsleistung
Die Felder im Objekt DeliveryPerformancePercents
enthalten Informationen zu Nachrichten, die erfolgreich zugestellt wurden. Sie können damit Fragen wie „Wurden meine Nachrichten verzögert?“ und „Warum werden Nachrichten verzögert?“ beantworten. Ein hoher Wert für delayedMessageThrottled
würde beispielsweise deutlich darauf hinweisen, dass Sie die maximalen Limits pro Gerät überschreiten und die Rate, mit der Sie Nachrichten senden, anpassen sollten.
Prozentsätze der Statistiken zu Nachrichten
Dieses Objekt enthält zusätzliche Informationen zu allen gesendeten Nachrichten. Im Feld priorityLowered
wird der Prozentsatz der akzeptierten Nachrichten angegeben, deren Priorität von HIGH
auf NORMAL
gesenkt wurde. Wenn dieser Wert hoch ist, senden Sie weniger Nachrichten mit hoher Priorität oder sorgen Sie dafür, dass immer eine Benachrichtigung angezeigt wird, wenn eine Nachricht mit hoher Priorität gesendet wird. Weitere Informationen zur Nachrichtenpriorität
Wie unterscheiden sich diese Daten von Daten, die nach BigQuery exportiert wurden?
Der BigQuery-Export enthält einzelne Nachrichtenprotokolle zur Nachrichtenannahme durch das FCM-Backend und zur Nachrichtenübermittlung im SDK auf dem Gerät (Schritte 2 und 4 der FCM-Architektur). Anhand dieser Daten können Sie prüfen, ob einzelne Nachrichten angenommen und zugestellt wurden. Weitere Informationen zum BigQuery-Datenexport finden Sie im nächsten Abschnitt.
Die Firebase Cloud Messaging Data API bietet dagegen aggregierte Details dazu, was genau in der Android-Transportschicht passiert (Schritt 3 der FCM-Architektur). Diese Daten geben insbesondere Aufschluss über die Zustellung von Nachrichten von FCM-Backends an das Android SDK. Sie ist besonders nützlich, um Trends zu sehen, warum Nachrichten bei diesem Transport verzögert oder verworfen wurden.
In einigen Fällen stimmen die beiden Datensätze möglicherweise nicht genau überein. Das kann folgende Gründe haben:
- Die aggregierten Messwerte basieren nur auf einem Teil aller Nachrichten.
- Die zusammengefassten Messwerte werden gerundet.
- Messwerte unter einem Datenschutzgrenzwert werden nicht angezeigt
- Ein Teil der Nachrichtenergebnisse fehlt aufgrund von Optimierungen bei der Verwaltung des hohen Traffic-Volumens.
Einschränkungen der API
Zeitachsen für aggregierte Daten
Die API gibt Verlaufsdaten für sieben Tage zurück. Die Daten, die von dieser API zurückgegeben werden, können jedoch um bis zu fünf Tage verzögert sein. Am 20. Januar sind beispielsweise die Daten vom 9. bis zum 15. Januar verfügbar, aber nicht vom 16. Januar oder später. Außerdem werden die Daten nach dem Best-Effort-Prinzip bereitgestellt. Bei einem Datenausfall wird FCM versuchen, das Problem zu beheben, und die Daten nicht nachholen, nachdem das Problem behoben wurde. Bei größeren Ausfällen sind die Daten möglicherweise eine Woche oder länger nicht verfügbar.
Datenabdeckung
Die von der Firebase Cloud Messaging Data API bereitgestellten Messwerte sollen einen Überblick über allgemeine Trends bei der Nachrichtenübermittlung geben. Sie decken jedoch nicht alle Nachrichtenszenarien zu 100% ab. Die folgenden Szenarien sind bekannte Ergebnisse, die nicht in den Messwerten berücksichtigt werden.
Abgelaufene Nachrichten
Wenn die Gültigkeitsdauer (TTL) nach dem Ende des angegebenen Protokolldatums abläuft, wird die Nachricht an diesem Datum nicht als droppedTtlExpired
gezählt.
Nachrichten an inaktive Geräte
Nachrichten, die an inaktive Geräte gesendet werden, werden je nach Datenpfad möglicherweise nicht im Datenpool aufgeführt. Das kann zu einer falschen Zählung in den Feldern droppedDeviceInactive
und pending
führen.
Nachrichten an Geräte mit bestimmten Nutzereinstellungen
Die Nachrichten von Nutzern, die die Erhebung von Nutzungs- und Diagnosedaten auf ihren Geräten deaktiviert haben, werden gemäß ihren Einstellungen nicht gezählt.
Abrundung und Mindestwerte
Bei der datengetriebenen Anzeigenbereitstellung werden Zählungen, bei denen die Volumen nicht groß genug sind, bewusst gerundet und ausgeschlossen.
BigQuery-Datenexport
Sie können Ihre Nachrichtendaten zur weiteren Analyse in BigQuery exportieren. In BigQuery können Sie die Daten mit BigQuery SQL analysieren, sie zu einem anderen Cloud-Anbieter exportieren oder für Ihre benutzerdefinierten ML-Modelle verwenden. Ein Export nach BigQuery enthält alle verfügbaren Daten für Nachrichten, unabhängig vom Nachrichtentyp oder davon, ob die Nachricht über die API oder den Benachrichtigungs-Editor gesendet wird.
Bei Nachrichten, die an Geräte mit den folgenden Mindestversionen des FCM SDK gesendet werden, haben Sie die zusätzliche Möglichkeit, den Export von Daten zur Nachrichtenübermittlung für Ihre App zu aktivieren:
- Android 20.1.0 oder höher
- iOS 8.6.0 oder höher
- Firebase Web SDK 9.0.0 oder höher
Unten finden Sie Details zum Aktivieren des Datenexports für Android und iOS.
Verknüpfen Sie zuerst Ihr Projekt mit BigQuery:
Wählen Sie eine der folgenden Optionen aus:
Öffnen Sie den Benachrichtigungs-Editor und klicken Sie unten auf der Seite auf Auf BigQuery zugreifen.
Klicken Sie in der Firebase Console auf der Seite Integrationen auf der Karte BigQuery auf Verknüpfen.
Auf dieser Seite werden FCM-Exportoptionen für alle FCM-kompatiblen Apps im Projekt angezeigt.
Folgen Sie der Anleitung auf dem Bildschirm, um BigQuery zu aktivieren.
Weitere Informationen finden Sie unter Firebase mit BigQuery verknüpfen.
Wenn Sie den Export von BigQuery für Cloud Messaging aktivieren, gilt Folgendes:
Firebase exportiert Ihre Daten nach BigQuery. Die Erstübertragung der Daten für den Export kann bis zu 48 Stunden dauern.
Nachdem das Dataset erstellt wurde, kann der Speicherort nicht mehr geändert werden. Sie können das Dataset aber an einen anderen Speicherort kopieren oder es manuell verschieben, d. h. an einem anderen Speicherort neu erstellen. Weitere Informationen finden Sie unter Speicherort des Datasets ändern.
Firebase richtet regelmäßige Synchronisierungen Ihrer Daten aus Ihrem Firebase-Projekt mit BigQuery ein. Diese täglichen Exportvorgänge beginnen um 4:00 Uhr Pacific Time und sind in der Regel innerhalb von 24 Stunden abgeschlossen.
Standardmäßig werden alle Apps in Ihrem Projekt mit BigQuery verknüpft. Alle Apps, die Sie dem Projekt später hinzufügen, werden ebenfalls automatisch mit BigQuery verknüpft. Sie können festlegen, welche Apps Daten senden.
Wenn Sie den BigQuery-Export deaktivieren möchten, heben Sie die Verknüpfung Ihres Projekts in der Firebase-Konsole auf.
Export von Daten zur Nachrichtenübermittlung aktivieren
Auf iOS-Geräten mit dem FCM SDK 8.6.0 oder höher kann der Export von Daten zur Nachrichtenübermittlung für die App aktiviert werden. FCM unterstützt den Datenexport sowohl für Benachrichtigungen als auch für Benachrichtigungen im Hintergrund. Bevor Sie diese Optionen aktivieren können, müssen Sie zuerst die FCM-BigQuery-Verknüpfung für Ihr Projekt erstellen, wie unter BigQuery-Datenexport beschrieben.
Export von Übermittlungsdaten für Benachrichtigungen aktivieren
Da nur Benachrichtigungen App-Erweiterungen für Benachrichtigungsdienste auslösen können, müssen Sie Ihrer App eine Erweiterung für Benachrichtigungsdienste hinzufügen und diese API in einer Diensterweiterung aufrufen, um das Tracking von angezeigten Nachrichten zu aktivieren. Weitere Informationen finden Sie in der Apple-Dokumentation unter Inhalte in neu gesendeten Benachrichtigungen ändern.
Der folgende Aufruf muss für jede empfangene Benachrichtigung erfolgen:
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
Wenn Sie Sendeanfragen mit der HTTP v1 API erstellen, müssen Sie mutable-content = 1
im Nutzlastobjekt angeben.
Export von Übermittlungsdaten für Benachrichtigungen im Hintergrund aktivieren
Für Hintergrundnachrichten, die empfangen werden, wenn sich die App im Vordergrund oder Hintergrund befindet, können Sie die Data Export API im Data Message Handler der Haupt-App aufrufen. Dieser Aufruf muss für jede empfangene Benachrichtigung erfolgen:
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
Welche Daten werden nach BigQuery exportiert?
Beachten Sie, dass einige dieser Statistiken durch das Targeting auf veraltete Tokens oder inaktive Registrierungen verfälscht werden können.
Das Schema der exportierten Tabelle ist:
_PARTITIONTIME | TIMESTAMP | Diese Pseudospalte enthält einen Zeitstempel für den Beginn des Tages (in UTC), an dem die Daten geladen wurden. Für die Partition YYYYMMDD enthält diese Pseudospalte den Wert TIMESTAMP('YYYY-MM-DD'). |
event_timestamp | TIMESTAMP | Vom Server aufgezeichneter Zeitstempel des Ereignisses |
project_number | INTEGER | Die Projektnummer identifiziert das Projekt, von dem die Nachricht gesendet wurde. |
message_id | STRING | Die Nachrichten-ID identifiziert eine Nachricht. Die Nachrichten-ID wird aus der App-ID und dem Zeitstempel generiert und ist in einigen Fällen möglicherweise nicht global eindeutig. |
instance_id | STRING | Die eindeutige ID der App, an die die Nachricht gesendet wird (falls verfügbar). Es kann sich um eine Instanz-ID oder eine Firebase-Installations-ID handeln. |
message_type | STRING | Der Typ der Nachricht. Kann eine Benachrichtigungs- oder Datennachricht sein. „Topic“ wird verwendet, um die ursprüngliche Nachricht für ein Thema oder eine gesendeten Kampagne zu identifizieren. Die nachfolgenden Nachrichten sind entweder Benachrichtigungen oder Datennachrichten. |
sdk_platform | STRING | Die Plattform der Empfänger-App |
app_name | STRING | Paketname für Android-Apps oder Bundle-ID für iOS-Apps |
collapse_key | STRING | Der Minimierungsschlüssel identifiziert eine Gruppe von Nachrichten, die minimiert werden kann. Wenn ein Gerät nicht verbunden ist, wird nur die letzte Nachricht mit einem bestimmten Minimierungsschlüssel für die spätere Zustellung in die Warteschlange gestellt. |
Priorität | INTEGER | Die Priorität der Nachricht. Gültige Werte sind „normal“ und „hoch“. Unter iOS entsprechen diese den APN-Prioritäten 5 und 10. |
ttl | INTEGER | Dieser Parameter gibt an, wie lange (in Sekunden) die Nachricht im FCM-Speicher aufbewahrt werden soll, wenn das Gerät offline ist. |
Thema | STRING | Der Name des Themas, an das eine Nachricht gesendet wurde (falls zutreffend) |
bulk_id | INTEGER | Die Bulk-ID identifiziert eine Gruppe ähnlicher Nachrichten, z. B. eine bestimmte Nachricht, die an ein Thema gesendet wurde. |
event | STRING | Der Typ des Ereignisses.
Mögliche Werte sind:
|
analytics_label | STRING | Mit der HTTP v1 API kann das Analyselabel beim Senden der Nachricht festgelegt werden, um die Nachricht zu Analysezwecken zu kennzeichnen. |
Was kann ich mit den exportierten Daten tun?
In den folgenden Abschnitten finden Sie Beispiele für Abfragen, die Sie in BigQuery für Ihre exportierten FCM-Daten ausführen können.
Gesendete Nachrichten nach App zählen
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;
Anzahl der einzelnen App-Instanzen zählen, auf die Nachrichten ausgerichtet sind
SELECT COUNT(DISTINCT instance_id) FROM `project ID.firebase_messaging.data` WHERE _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD') AND event = 'MESSAGE_ACCEPTED';
Gesendete Benachrichtigungsnachrichten zählen
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';
Gesendeten Datennachrichten zählen
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';
Gesendete Nachrichten an ein Thema oder eine Kampagne zählen
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 != '';
Wenn Sie Ereignisse für eine an ein bestimmtes Thema gesendete Nachricht erfassen möchten, ändern Sie diese Abfrage, indem Sie AND message_id != ''
durch AND message_id = <your message id>;
ersetzen.
Fan-out-Dauer für ein bestimmtes Thema oder eine bestimmte Kampagne berechnen
Der Beginn der Verzweigung ist der Zeitpunkt, zu dem die ursprüngliche Anfrage empfangen wird. Die Endzeit ist der Zeitpunkt, zu dem die letzte einzelne Nachricht erstellt wird, die auf eine einzelne Instanz ausgerichtet ist.
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;
Prozentsatz der zugestellten Nachrichten zählen
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;
Alle Ereignisse für eine bestimmte Nachrichten-ID und Instanz-ID erfassen
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;
Latenz für eine bestimmte Nachrichten-ID und Instanz-ID berechnen
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;