FCM bietet drei Sätze von Tools, die Ihnen helfen, einen Einblick in die Nachrichtenzustellung zu erhalten:
- Nachrichtenübermittlungsberichte der Firebase-Konsole
- Aggregierte Android SDK-Bereitstellungsmetriken aus der Firebase Cloud Messaging Data API
- Umfassender Datenexport nach Google BigQuery
Die auf dieser Seite beschriebenen Berichtstools erfordern alle Google Analytics, um zu funktionieren. Wenn Google Analytics für Ihr Projekt nicht aktiviert ist, können Sie es auf der Registerkarte „Integrationen“ Ihrer Firebase-Projekteinstellungen einrichten.
Beachten Sie, dass die Berichterstellung für viele der Statistiken auf dieser Seite aufgrund der Bündelung von Analysedaten Verzögerungen von bis zu 24 Stunden unterliegen kann.
Nachrichtenübermittlungsberichte
Auf der Registerkarte Berichte in der Firebase-Konsole können Sie die folgenden Daten für Nachrichten anzeigen, die an FCM-SDKs der Android- oder Apple-Plattform gesendet werden, einschließlich der Nachrichten, die über den Benachrichtigungs-Composer und die FCM-APIs gesendet werden:
- Sendet – Die Datennachricht oder Benachrichtigungsnachricht wurde zur Zustellung in die Warteschlange gestellt oder erfolgreich an einen Drittanbieterdienst wie APNs zur Zustellung übergeben. Weitere Informationen finden Sie unter Lebensdauer einer Nachricht .
- Empfangen (nur auf Android-Geräten verfügbar) – Die Datennachricht oder Benachrichtigungsnachricht wurde von der App empfangen. Diese Daten sind verfügbar, wenn auf dem empfangenden Android-Gerät FCM SDK 18.0.1 oder höher installiert ist.
- Impressionen (nur für Benachrichtigungen auf Android-Geräten verfügbar) – Die Anzeigebenachrichtigung wurde auf dem Gerät angezeigt, während die App im Hintergrund läuft.
- Öffnet – Der Benutzer hat die Benachrichtigung geöffnet. Wird nur für Benachrichtigungen gemeldet, die empfangen werden, wenn sich die App im Hintergrund befindet.
Diese Daten sind für alle Nachrichten mit einer Benachrichtigungsnutzlast und alle gekennzeichneten Datennachrichten verfügbar. Weitere Informationen zu Labels finden Sie unter Analytics-Labels zu Nachrichten hinzufügen .
Beim Anzeigen von Nachrichtenberichten können Sie einen Datumsbereich für die angezeigten Daten mit der Option zum Exportieren in CSV festlegen. Sie können auch nach diesen Kriterien filtern:
- Plattform (iOS oder Android)
- App
- Benutzerdefinierte Analytics-Labels
Hinzufügen von Analytics-Labels zu Nachrichten
Das Beschriften von Nachrichten ist sehr nützlich für benutzerdefinierte Analysen, da Sie die Übermittlungsstatistiken nach Labels oder Labelsätzen filtern können. Sie können jeder Nachricht, die über die HTTP v1-API gesendet wird, eine Bezeichnung hinzufügen, indem Sie das Feld fcmOptions.analyticsLabel
im Nachrichtenobjekt oder in den plattformspezifischen Feldern AndroidFcmOptions
oder ApnsFcmOptions
festlegen.
Analytics-Labels sind Textstrings im Format ^[a-zA-Z0-9-_.~%]{1,50}$
. Etiketten können Klein- und Großbuchstaben, Zahlen und die folgenden Symbole enthalten:
-
-
-
~
-
%
Die maximale Länge beträgt 50 Zeichen. Sie können bis zu 100 eindeutige Labels pro Tag angeben; Nachrichten mit Labels, die über dieses Limit hinaus hinzugefügt wurden, werden nicht gemeldet.
Auf der Registerkarte „ Berichte“ der Firebase-Konsole können Sie eine Liste aller vorhandenen Labels durchsuchen und sie einzeln oder in Kombination anwenden, um die angezeigten Statistiken zu filtern.
Aggregierte Lieferdaten über die FCM Data API
Mit der Firebase Cloud Messaging Data API können Sie Informationen abrufen, die Ihnen helfen können, die Ergebnisse von Nachrichtenanfragen zu verstehen, die an Android-Anwendungen gerichtet sind. Die API stellt aggregierte Daten für alle datenerfassungsfähigen Android-Geräte in einem Projekt bereit. 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 Nachrichtenzustellung aufzeigen und Ihnen dabei helfen, effektive Möglichkeiten zur Verbesserung der Leistung Ihrer Sendeanforderungen zu finden. Informationen zur Verfügbarkeit von Datumsbereichen in den Berichten finden Sie unter Aggregierte Datenzeitachsen .
Die API stellt alle Daten bereit, die für eine bestimmte Anwendung verfügbar sind. Siehe die API-Referenzdokumentation .
Wie werden die Daten aufgeschlüsselt?
Lieferdaten werden nach Anwendung, Datum und Analyselabel aufgeschlüsselt . Ein Aufruf der API gibt Daten für jede Kombination aus Datum, Anwendung und Analyselabel zurück. Ein einzelnes androidDeliveryData
JSON-Objekt würde 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
}
}
So interpretieren Sie die Metriken
Zustellungsdaten geben den Prozentsatz der Nachrichten an, die den folgenden Metriken entsprechen. Es ist möglich, dass eine einzelne Nachricht zu mehreren Metriken passt. Aufgrund von Einschränkungen bei der Erfassung der Daten und der Granularität, mit der wir die Metriken aggregiert haben, werden einige Nachrichtenergebnisse überhaupt nicht in den Metriken dargestellt, sodass die unten stehenden Prozentsätze nicht 100 % ergeben.
Akzeptierte Nachrichten zählen
Die einzige im Datensatz enthaltene Anzahl ist die Anzahl der Nachrichten, die von FCM für die Zustellung an Android-Geräte akzeptiert wurden. Alle Prozentangaben verwenden diesen Wert als Nenner. Beachten Sie, dass diese Zählung keine Nachrichten enthält, die an Benutzer gerichtet sind, die die Erfassung von Nutzungs- und Diagnoseinformationen auf ihren Geräten deaktiviert haben.
Nachrichtenergebnis-Prozentsätze
Die im MessageOutcomePercents
Objekt enthaltenen Felder liefern Informationen zu den Ergebnissen von Nachrichtenanforderungen. Die Kategorien schließen sich gegenseitig aus. Es kann Fragen wie „Werden meine Nachrichten zugestellt?“ beantworten. und "Was bewirkt, dass Nachrichten gelöscht werden?"
Beispielsweise könnte ein hoher Wert für das Feld droppedTooManyPendingMessages
signalisieren, dass App-Instanzen Mengen an nicht komprimierbaren Nachrichten empfangen, die das FCM-Limit von 100 ausstehenden Nachrichten überschreiten. Um dies abzumildern, stellen Sie sicher, dass Ihre App Aufrufe an onDeletedMessages
verarbeitet, und erwägen Sie das Senden von reduzierbaren Nachrichten. In ähnlicher Weise könnten hohe Prozentsätze für droppedDeviceInactive
ein Signal dafür sein, Registrierungstoken auf Ihrem Server zu aktualisieren, veraltete Token zu entfernen und sie von Themen abzumelden. Best Practices in diesem Bereich finden Sie unter FCM-Registrierungstoken verwalten .
Lieferleistung Prozent
Die Felder im DeliveryPerformancePercents
Objekt enthalten Informationen zu Nachrichten, die erfolgreich zugestellt wurden. Es kann Fragen wie "Wurden meine Nachrichten verzögert?" beantworten. und "Warum werden Nachrichten verzögert?" Ein hoher Wert für delayedMessageThrottled
würde beispielsweise deutlich darauf hinweisen, dass Sie die Höchstgrenzen pro Gerät überschreiten und die Rate anpassen sollten, mit der Sie Nachrichten senden.
Nachrichten-Insight-Prozentsätze
Dieses Objekt liefert zusätzliche Informationen über alle gesendeten Nachrichten. Das Feld priorityLowered
drückt den Prozentsatz akzeptierter Nachrichten aus, deren Priorität von HIGH
auf NORMAL
herabgesetzt wurde. Wenn dieser Wert hoch ist, versuchen Sie, weniger Nachrichten mit hoher Priorität zu senden, oder stellen Sie sicher, dass Sie immer eine Benachrichtigung anzeigen, wenn eine Nachricht mit hoher Priorität gesendet wird. Weitere Informationen finden Sie in unserer Dokumentation zur Nachrichtenpriorität
Wie unterscheiden sich diese Daten von Daten, die nach BigQuery exportiert werden?
Der BigQuery-Export stellt individuelle Nachrichtenprotokolle zur Nachrichtenannahme durch das FCM-Back-End und zur Nachrichtenübermittlung im SDK auf dem Gerät bereit (Schritte 2 und 4 der FCM-Architektur ). Diese Daten sind nützlich, um sicherzustellen, dass einzelne Nachrichten angenommen und zugestellt wurden. Weitere Informationen zum BigQuery-Datenexport finden Sie im nächsten Abschnitt.
Im Gegensatz dazu bietet die Firebase Cloud Messaging Data API aggregierte Details darüber, was speziell in der Android-Transportschicht (oder Schritt 3 der FCM-Architektur ) passiert. Diese Daten bieten insbesondere Einblick in die Übermittlung von Nachrichten von FCM-Back-Ends an das Android SDK. Es ist besonders nützlich, um Trends aufzuzeigen, warum Nachrichten während dieses Transports verzögert oder verworfen wurden.
In einigen Fällen ist es möglich, dass die beiden Datensätze aus folgenden Gründen nicht genau übereinstimmen:
- Die aggregierten Metriken erfassen nur einen Teil aller Nachrichten
- Die aggregierten Metriken sind gerundet
- Wir präsentieren keine Messwerte unterhalb einer Datenschutzschwelle
- Ein Teil der Nachrichtenergebnisse fehlt aufgrund von Optimierungen bei der Verwaltung des großen Verkehrsaufkommens.
Einschränkungen der API
Aggregierte Datenzeitpläne
Die API gibt 7 Tage historische Daten zurück; Die von dieser API zurückgegebenen Daten werden jedoch um bis zu 5 Tage verzögert. Beispielsweise wären am 20. Januar die Daten für den 9. Januar bis 15. Januar verfügbar, aber nicht für den 16. Januar oder später. Darüber hinaus werden die Daten nach bestem Bemühen bereitgestellt. Im Falle eines Datenausfalls arbeitet FCM daran, das Problem zu beheben, und füllt die Daten nicht nach, nachdem das Problem behoben wurde. Bei größeren Ausfällen können die Daten eine Woche oder länger nicht verfügbar sein.
Datenabdeckung
Die von der Firebase Cloud Messaging Data API bereitgestellten Metriken sollen einen Einblick in allgemeine Trends der Nachrichtenzustellung geben. Sie decken jedoch nicht alle Nachrichtenszenarien zu 100 % ab. Die folgenden Szenarien sind bekannte Ergebnisse, die sich nicht in den Metriken widerspiegeln.
Ausgeblendete Nachrichten
Nachrichten, die durch eine andere Nachricht reduziert wurden, werden nicht im Datensatz angezeigt.
Nachrichten an inaktive Geräte
Nachrichten, die an inaktive Geräte gesendet werden, können im Dataset angezeigt werden oder nicht, je nachdem, welchen Datenpfad sie nehmen. Dies kann zu einer falschen Zählung in den Feldern droppedDeviceInactive
“ und pending
führen.
Nachrichten an Geräte mit bestimmten Benutzereinstellungen
Benutzer, die die Erfassung von Nutzungs- und Diagnoseinformationen auf ihren Geräten deaktiviert haben, werden ihre Nachrichten gemäß ihren Einstellungen nicht in unsere Zählung aufnehmen.
Rundung und Mindestwerte
FCM rundet bewusst und schließt Zählungen aus, wenn die Volumina nicht groß genug sind.
BigQuery-Datenexport
Sie können Ihre Nachrichtendaten zur weiteren Analyse in BigQuery exportieren. Mit BigQuery können Sie die Daten mit BigQuery SQL analysieren, sie zu einem anderen Cloud-Anbieter exportieren oder die Daten für Ihre benutzerdefinierten ML-Modelle verwenden. Ein Export nach BigQuery umfasst alle verfügbaren Daten für Nachrichten, unabhängig vom Nachrichtentyp oder davon, ob die Nachricht über die API oder den Benachrichtigungs-Composer gesendet wird.
Für Nachrichten, die an Geräte mit den folgenden FCM SDK-Mindestversionen gesendet werden, haben Sie die zusätzliche Option, den Export von Nachrichtenübermittlungsdaten 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 Einzelheiten zum Aktivieren des Datenexports für Android und iOS .
Verknüpfen Sie zunächst Ihr Projekt mit BigQuery:
Wählen Sie eine der folgenden Optionen:
Öffnen Sie den Composer für Benachrichtigungen und klicken Sie dann unten auf der Seite auf Auf BigQuery zugreifen .
Klicken Sie auf der Seite „Integrationen“ in der Firebase-Konsole auf Link in der BigQuery- Karte.
Diese Seite zeigt FCM-Exportoptionen für alle FCM-fähigen Apps im Projekt an.
Befolgen Sie die Anweisungen auf dem Bildschirm, um BigQuery zu aktivieren.
Weitere Informationen finden Sie unter Firebase mit BigQuery verknüpfen.
Wenn Sie den BigQuery-Export für Cloud Messaging aktivieren:
Firebase exportiert Ihre Daten nach BigQuery. Beachten Sie, dass die anfängliche Weitergabe von Daten für den Export bis zu 48 Stunden dauern kann.
Nachdem das Dataset erstellt wurde, kann der Speicherort nicht mehr geändert werden, aber Sie können das Dataset an einen anderen Speicherort kopieren oder das Dataset manuell an einen anderen Speicherort verschieben (neu erstellen). Weitere Informationen finden Sie unter Dataset-Speicherort ä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 pazifischer Zeit und enden normalerweise in 24 Stunden.
Standardmäßig sind alle Apps in Ihrem Projekt mit BigQuery verknüpft und alle Apps, die Sie später zum Projekt hinzufügen, werden automatisch mit BigQuery verknüpft. Sie können verwalten, welche Apps Daten senden .
Um den BigQuery-Export zu deaktivieren, heben Sie die Verknüpfung Ihres Projekts in der Firebase-Konsole auf.
Aktivieren Sie den Export von Nachrichtenübermittlungsdaten
iOS-Geräte mit dem FCM SDK 8.6.0 oder höher können den Datenexport für die Nachrichtenzustellung ihrer App aktivieren. FCM unterstützt den Datenexport sowohl für Warn- als auch für Hintergrundbenachrichtigungen. Bevor Sie diese Optionen aktivieren, müssen Sie zuerst den FCM-BiqQuery-Link für Ihr Projekt erstellen, wie unter BigQuery-Datenexport beschrieben.
Lieferdatenexport für Warnmeldungen aktivieren
Da nur Warnungsbenachrichtigungen Benachrichtigungsdienst-App-Erweiterungen auslösen können, müssen Sie Ihrer App eine Benachrichtigungsdienst-Erweiterung hinzufügen und diese API innerhalb einer Diensterweiterung aufrufen, um die Nachverfolgung von Anzeigenachrichten zu aktivieren. Weitere Informationen finden Sie in der Apple-Dokumentation zum Ändern von Inhalten in neu zugestellten Benachrichtigungen .
Für jede erhaltene Benachrichtigung muss folgender Aufruf durchgeführt werden:
Schnell
// 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)
}
}
Ziel 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 Sendeanforderungen mit der HTTP v1-API erstellen, stellen Sie sicher, dass Sie mutable-content = 1
im Payload-Objekt angeben.
Lieferdatenexport für Hintergrundbenachrichtigungen aktivieren
Für Hintergrundnachrichten, die empfangen werden, wenn sich die App im Vorder- oder Hintergrund befindet, können Sie die Datenexport-API im Datennachrichten-Handler der Haupt-App aufrufen. Dieser Aufruf muss für jede erhaltene Benachrichtigung erfolgen:
Schnell
// 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)
}
Ziel 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 das Targeting veralteter Token oder inaktiver Registrierungen einige dieser Statistiken aufblähen kann.
Das Schema der exportierten Tabelle ist:
_PARTITIONTIME | ZEITSTEMPEL | 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 | ZEITSTEMPEL | Ereigniszeitstempel, wie vom Server aufgezeichnet |
Projektnummer | GANZE ZAHL | Die Projektnummer identifiziert das Projekt, das die Nachricht gesendet hat |
Nachrichten ID | STRING | Die Nachrichten-ID identifiziert eine Nachricht. Die aus der App-ID und dem Zeitstempel generierte Nachrichten-ID ist in einigen Fällen möglicherweise nicht global eindeutig. |
instance_id | STRING | Die eindeutige ID der App, an die die Nachricht gesendet wird (sofern verfügbar). Dies kann eine Instanz-ID oder eine Firebase-Installations-ID sein. |
Nachrichtentyp | STRING | Der Typ der Nachricht. Kann eine Benachrichtigungsnachricht oder eine Datennachricht sein. Thema wird verwendet, um die ursprüngliche Nachricht für einen Themen- oder Kampagnenversand zu identifizieren; die nachfolgenden Nachrichten sind entweder eine Benachrichtigung oder eine Datennachricht. |
sdk_platform | STRING | Die Plattform der Empfänger-App |
App Name | STRING | Der Paketname für Android-Apps oder die Paket-ID für iOS-Apps |
einsturz_schlüssel | STRING | Der Reduzierschlüssel identifiziert eine Gruppe von Nachrichten, die reduziert werden können. Wenn ein Gerät nicht verbunden ist, wird nur die letzte Nachricht mit einem bestimmten Zusammenbruchsschlüssel für eine eventuelle Zustellung in die Warteschlange gestellt |
Priorität | GANZE ZAHL | Die Priorität der Nachricht. Gültige Werte sind „normal“ und „hoch“. Unter iOS entsprechen diese den APNs-Prioritäten 5 und 10 |
ttl | GANZE ZAHL | 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 | GANZE ZAHL | Die Massen-ID identifiziert eine Gruppe zusammengehöriger Nachrichten, z. B. eine bestimmte Versendung an ein Thema |
Fall | STRING | Der Typ des Ereignisses. Mögliche Werte sind:
|
Analytics_Label | STRING | Mit der HTTP v1 API kann das Analytics-Label beim Senden der Nachricht gesetzt werden, um die Nachricht für Analysezwecke zu markieren |
Was können Sie mit den exportierten Daten tun?
Die folgenden Abschnitte bieten Beispiele für Abfragen, die Sie in BigQuery für Ihre exportierten FCM-Daten ausführen können.
Zählen Sie gesendete Nachrichten per App
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;
Zählen Sie eindeutige App-Instanzen, auf die Nachrichten abzielen
SELECT COUNT(DISTINCT instance_id) FROM `project ID.firebase_messaging.data` WHERE _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD') AND event = 'MESSAGE_ACCEPTED';
Gesendete Benachrichtigungsmeldungen 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';
Gesendete 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';
Zählen Sie Nachrichten, die an ein Thema oder eine Kampagne gesendet wurden
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 != '';
Um Ereignisse für eine an ein bestimmtes Thema gesendete Nachricht zu verfolgen, ändern Sie diese Abfrage, um AND message_id != ''
durch AND message_id = <your message id>;
.
Berechnen Sie die Fanout-Dauer für ein bestimmtes Thema oder eine bestimmte Kampagne
Die Fanout-Startzeit ist der Zeitpunkt, zu dem die ursprüngliche Anforderung empfangen wird, und die Endzeit ist der Zeitpunkt, an dem die letzte einzelne Nachricht erstellt wird, die auf eine einzelne Instanz abzielt.
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;
Zählen Sie den Prozentsatz der zugestellten Nachrichten
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;
Verfolgen Sie alle Ereignisse für eine bestimmte Nachrichten-ID und Instanz-ID
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;
Berechnen Sie die Latenz für eine bestimmte Nachrichten-ID und Instanz-ID
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;