Wenn Sie Probleme bei der Nachrichtenzustellung beheben möchten, verwenden Sie die FCM-Fehlerbehebung und lesen Sie diesen Blogpost, um die verschiedenen Gründe zu verstehen, warum Sie Ihre Nachricht möglicherweise nicht sehen. Sie können auch das FCM-Status-Dashboard aufrufen, um zu prüfen, ob es aktuelle Dienstunterbrechungen gibt, die sich auf FCM auswirken.
FCM bietet außerdem drei Toolsets, mit denen Sie Einblicke in die umfassende Auswertung des Messaging-Erfolgs und der Messaging-Strategie erhalten:
- Firebase Berichte zur Zustellung von Console-Nachrichten
- Aggregierte Messwerte zur Android SDK-Auslieferung aus der Firebase Cloud Messaging Data API
- Umfassender Datenexport nach Google BigQuery
Für den Datenexport nach BigQuery und den Tab Berichte in der Firebase-Konsole ist Google Analytics erforderlich. Sie können Google Analytics in der Firebase-Konsole auf dem Tab
Beachten Sie, dass die Berichterstellung für viele der Statistiken auf dieser Seite aufgrund der Batchverarbeitung von Analysedaten bis zu 24 Stunden dauern kann.
Berichte zur Nachrichtenzustellung
Rufen Sie in der Firebase-Konsole den Tab DevOps & Engagement > Messaging > Berichte auf, um die folgenden Daten für Nachrichten aufzurufen, die an FCM SDKs für Android- oder Apple-Plattformen gesendet wurden, einschließlich der Nachrichten, die mit dem Notifications Composer und den FCM APIs gesendet wurden:
- Gesendet: Die Datennachricht oder Benachrichtigung wurde für die Zustellung in die Warteschlange gestellt oder erfolgreich an einen Drittanbieterdienst wie APNs für die Zustellung übergeben. Beachten Sie, dass die Statistiken zu gesendeten Nachrichten möglicherweise einige Stunden verzögert sind. Weitere Informationen finden Sie unter Lebensdauer einer Nachricht.
- Empfangen (nur auf Android-Geräten verfügbar): Die Datennachricht oder Benachrichtigung 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 Benachrichtigungen auf Android-Geräten verfügbar): Die Benachrichtigung wurde auf dem Gerät angezeigt, während die App im Hintergrund ausgeführt wurde.
- Geöffnet: Der Nutzer hat die Benachrichtigung geöffnet. Wird nur für Benachrichtigungen erfasst, die eingehen, während die App im Hintergrund ausgeführt wird.
Diese Daten sind für alle Nachrichten mit einer Benachrichtigungsnutzlast und alle mit Labels versehenen Datennachrichten verfügbar. Weitere Informationen zu Labels finden Sie unter Analytische Labels zu Nachrichten hinzufügen.
Wenn Sie sich SMS-Berichte ansehen, können Sie einen Zeitraum für die angezeigten Daten festlegen und die Daten in eine CSV-Datei exportieren. Sie können auch nach diesen Kriterien filtern:
- Plattform (iOS oder Android)
- App
- Benutzerdefinierte Analyselabels
Analyse-Labels zu Nachrichten hinzufügen
Das Labeln von Nachrichten ist sehr nützlich für benutzerdefinierte Analysen, da Sie Zustellungsstatistiken nach Labels oder Gruppen von Labels filtern können. Sie können jeder Nachricht, die über die HTTP v1 API gesendet wird, ein Label hinzufügen. Legen Sie dazu das Feld fcmOptions.analyticsLabel im message-Objekt oder in den plattformspezifischen Feldern AndroidFcmOptions oder ApnsFcmOptions fest.
Analytics-Labels sind Textstrings im Format ^[a-zA-Z0-9-_.~%]{1,50}$.
Labels können Klein- und Großbuchstaben, Ziffern und die folgenden Symbole enthalten:
-~%
Maximale Länge: 50 Zeichen. Sie können bis zu 100 eindeutige Labels pro Tag angeben. Nachrichten mit Labels, die über dieses Limit hinausgehen, werden nicht gemeldet.
Auf dem Tab Berichte für Firebase-Console-Messaging können Sie eine Liste aller vorhandenen Labels durchsuchen und sie einzeln oder in Kombination anwenden, um die angezeigten Statistiken zu filtern.
Aggregierte Auslieferungsdaten über die FCM Data API
Mit der Firebase Cloud Messaging Data API können Sie Informationen abrufen, die Ihnen helfen, die Ergebnisse von Nachrichtenanfragen zu verstehen, die auf Android-Anwendungen ausgerichtet sind. Die API liefert aggregierte Daten für alle Android-Geräte in einem Projekt, auf denen die Datenerhebung aktiviert ist. Dazu gehören Details zum Prozentsatz der Nachrichten, die ohne Verzögerung zugestellt wurden, sowie zur Anzahl der Nachrichten, die innerhalb der Android-Transportschicht verzögert oder verworfen wurden. Die Auswertung dieser Daten kann allgemeine Trends bei der Nachrichtenzustellung aufzeigen und Ihnen helfen, effektive Möglichkeiten zur Verbesserung der Leistung Ihrer Sendeanfragen zu finden. Informationen zur Verfügbarkeit von Zeiträumen in den Berichten finden Sie unter Zeitpläne 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 Auslieferungsdaten sind nach Anwendung, Datum und Analytics-Label aufgeschlüsselt.
Bei einem Aufruf der API werden Daten für jede Kombination aus Datum, Anwendung und Analyselabel zurückgegeben. 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 interpretieren
Die Zustellungsdaten geben den Prozentsatz der Nachrichten an, die den einzelnen Messwerten entsprechen. Es ist möglich, dass eine einzelne Nachricht zu mehreren Messwerten passt. Aufgrund von Einschränkungen bei der Datenerhebung und des Detaillierungsgrads, mit dem wir die Messwerte aggregiert haben, sind einige Ergebnisse von Mitteilungen in den Messwerten überhaupt nicht enthalten. Die unten aufgeführten Prozentsätze ergeben daher nicht 100%.
Anzahl der angenommenen Nachrichten
Der einzige im Dataset enthaltene Wert 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 in dieser Anzahl keine Nachrichten enthalten sind, die an Nutzer gerichtet sind, die die Erhebung von Nutzungs- und Diagnosedaten auf ihren Geräten deaktiviert haben.
Prozentsätze für Nachrichtenergebnisse
Die Felder im Objekt MessageOutcomePercents enthalten Informationen zu den Ergebnissen von Nachrichtenanfragen. Die Kategorien schließen sich alle gegenseitig aus. Sie kann Fragen wie „Werden meine Nachrichten zugestellt?“ und „Was führt dazu, dass Nachrichten verworfen werden?“ beantworten.
Ein hoher Wert für das Feld droppedTooManyPendingMessages kann beispielsweise darauf hinweisen, dass App-Instanzen eine große Anzahl von nicht minimierbaren Nachrichten empfangen, die das Limit von 100 ausstehenden Nachrichten für FCM überschreiten.
Um dieses Problem zu beheben, muss Ihre App Aufrufe von onDeletedMessages verarbeiten. Außerdem sollten Sie zusammenfassbare Nachrichten senden. Ebenso können hohe Prozentsätze für droppedDeviceInactive ein Signal dafür sein, dass die Registrierungstokens auf Ihrem Server aktualisiert werden sollten, um veraltete Tokens zu entfernen und sie von Themen abzumelden. Best Practices für diesen Bereich finden Sie unter FCM-Registrierungstokens verwalten.
Prozentsätze der Auslieferungsleistung
Die Felder im Objekt DeliveryPerformancePercents enthalten Informationen zu Nachrichten, die erfolgreich zugestellt wurden. Sie kann Fragen wie „Haben sich meine Nachrichten verzögert?“ und „Warum haben sich Nachrichten verzögert?“ beantworten. 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.
Prozentsätze für Nachrichtenstatistiken
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, versuche, weniger Nachrichten mit hoher Priorität zu senden, oder sorge dafür, dass immer eine Benachrichtigung angezeigt wird, 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 liefert individuelle Nachrichtenlogs zur Annahme von Nachrichten durch das FCM-Backend und zur Nachrichtenzustellung im SDK auf dem Gerät (Schritte 2 und 4 der FCM-Architektur). Diese Daten sind nützlich, um sicherzustellen, dass einzelne Nachrichten akzeptiert und zugestellt wurden. Weitere Informationen zum BigQuery-Datenexport finden Sie im nächsten Abschnitt.
Die Firebase Cloud Messaging Data API liefert dagegen aggregierte Details dazu, was genau in der Android-Transportschicht (oder Schritt 3 der FCM-Architektur) passiert. Diese Daten geben insbesondere Aufschluss über die Zustellung von Nachrichten von FCM-Back-Ends an das Android SDK. Sie ist besonders nützlich, um Trends aufzuzeigen, warum Nachrichten während dieses Transports verzögert oder verworfen wurden.
In einigen Fällen stimmen die beiden Datensätze möglicherweise aus folgenden Gründen nicht genau überein:
- Die aggregierten Messwerte umfassen nur einen Teil aller Nachrichten.
- Die zusammengefassten Messwerte werden gerundet.
- Wir präsentieren keine Messwerte unterhalb eines Datenschutzschwellenwerts.
- Ein Teil der Nachrichtenergebnisse fehlt aufgrund von Optimierungen bei der Verwaltung des großen Trafficvolumens.
Einschränkungen der API
Zeitpläne für aggregierte Daten
Die API gibt Verlaufsdaten für 7 Tage zurück. Die von dieser API zurückgegebenen Daten sind jedoch bis zu 5 Tage verzögert. Am 20. Januar sind beispielsweise die Daten für den Zeitraum vom 9. bis zum 15. Januar verfügbar, nicht aber für den 16. Januar oder später. Außerdem werden die Daten auf Best-Effort-Basis bereitgestellt. Bei einem Datenausfall wird FCM versuchen, das Problem zu beheben. Die Daten werden nach der Behebung des Problems jedoch nicht wiederhergestellt. 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 Messwerte sollen Einblicke in allgemeine Trends bei der Nachrichtenzustellung 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 im Dataset angezeigt. Dies kann zu Fehlern bei der Zählung in den Feldern droppedDeviceInactive und pending führen.
Nachrichten an Geräte mit bestimmten Nutzereinstellungen
Nachrichten von Nutzern, die die Erhebung von Nutzungs- und Diagnosedaten auf ihren Geräten deaktiviert haben, werden gemäß ihren Einstellungen nicht in unsere Zählung einbezogen.
Rundung und Mindestbeträge
FCM rundet die Anzahl absichtlich und schließt sie aus, wenn die Volumina nicht groß genug sind.
BigQuery-Datenexport
Sie können Ihre Nachrichtendaten zur weiteren Analyse nach BigQuery exportieren. Mit BigQuery können Sie die Daten mit BigQuery SQL analysieren, zu einem anderen Cloud-Anbieter exportieren oder 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 Notifications Composer gesendet wird.
Bei Nachrichten, die an Geräte mit den folgenden FCM-SDK-Mindestversionen gesendet werden, haben Sie die zusätzliche Option, den Export von Daten zur Nachrichtenzustellung für Ihre App zu aktivieren:
- Android 20.1.0 oder höher
- iOS 8.6.0 oder höher
- Firebase Web SDK 12.14.0 oder höher
Verknüpfen Sie zuerst Ihr Projekt mit BigQuery. Verwenden Sie dazu die Firebase-Konsole:
Wählen Sie eine der folgenden Optionen aus:
Gehen Sie zu DevOps & Engagement > Messaging > Benachrichtigungs-Composer und klicken Sie dann unten auf der Seite auf Auf BigQuery zugreifen.
Rufen Sie den Tab
Einstellungen > Integrationen auf. Klicken Sie dann im BigQuery auf Verknüpfen.Auf dieser Seite werden die FCM-Exportoptionen für alle FCM-fähigen Anwendungen im Projekt angezeigt.
Folge der Anleitung 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, gilt Folgendes:
Firebase exportiert Ihre Daten nach BigQuery. Beachten Sie, dass die erste Übertragung von Daten für den Export bis zu 48 Stunden dauern kann.
Nachdem das Dataset erstellt wurde, kann der Standort nicht mehr geändert werden. Sie können das Dataset aber an einen anderen Standort kopieren oder es manuell an einen anderen Standort 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 Pacific Time und werden in der Regel innerhalb von 24 Stunden abgeschlossen.
Standardmäßig sind alle Apps in Ihrem Projekt mit BigQuery verknüpft. Alle Apps, die Sie später dem Projekt hinzufügen, werden 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 Nachrichtenzustelldaten aktivieren
iOS+
Auf iOS-Geräten mit dem FCM SDK 8.6.0 oder höher kann der Datenexport für die Nachrichtenzustellung der App aktiviert werden. FCM unterstützt den Datenexport sowohl für Benachrichtigungen zu Warnungen als auch für Hintergrundbenachrichtigungen. Der Datenexport ist standardmäßig auf Anwendungsebene deaktiviert. Wenn Sie die Funktion auf App-Instanzebene programmatisch aktivieren, können Sie Endnutzer um die Erlaubnis bitten, ihre Daten zur Nachrichtenübermittlung zu analysieren (empfohlen). Wenn beide festgelegt sind, überschreibt der Wert auf App-Instanzebene den Wert auf App-Ebene.
Bevor Sie diese Optionen aktivieren, müssen Sie zuerst die FCM-BigQuery-Verknüpfung für Ihr Projekt erstellen, wie unter BigQuery-Datenexport beschrieben.
Export von Zustellungsdaten 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 innerhalb einer Diensterweiterung aufrufen, um das Tracking von Anzeigennachrichten zu aktivieren. Weitere Informationen findest du in der Apple-Dokumentation unter Modifying Content in Newly Delivered Notifications.
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.serviceExtension().exportDeliveryMetrics(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 im Nutzlastobjekt `mutable-content = 1` angeben.
Export von Zustelldaten für Hintergrundbenachrichtigungen aktivieren
Für Hintergrundnachrichten, die empfangen werden, wenn die App im Vorder- oder Hintergrund ausgeführt wird, können Sie die API für den Datenexport im Daten-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.serviceExtension().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
Android
Auf Android-Geräten mit dem FCM SDK 20.1.0 oder höher kann der Export von Daten zur Nachrichtenübermittlung für die App aktiviert werden. Der Datenexport ist standardmäßig auf Anwendungsebene deaktiviert. Wenn Sie die Funktion programmatisch auf App-Instanzebene aktivieren, können Sie Endnutzer um Erlaubnis bitten, ihre Daten zur Nachrichtenzustellung zu analysieren (empfohlen). Wenn beide festgelegt sind, überschreibt der Wert auf App-Instanzebene den Wert auf App-Ebene.
Bevor Sie diese Optionen aktivieren, müssen Sie zuerst die FCM-BigQuery-Verknüpfung für Ihr Projekt erstellen, wie unter BigQuery-Datenexport beschrieben.
Export von Zustelldaten für App-Instanzen aktivieren
In den meisten Fällen empfehlen wir, den Export von Daten zur Nachrichtenzustellung nur auf App-Instanzebene zu aktivieren und auf App-Ebene deaktiviert zu lassen.
FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true);
Export von Auslieferungsdaten für eine App aktivieren
Wenn Sie den Export lieber auf App-Ebene aktivieren möchten, rufen Sie die Methode setDeliveryMetricsExportToBigQuery nicht auf und fügen Sie dem Anwendungsobjekt in Ihrem App-Manifest die folgende Property hinzu:
<application> <meta-data android:name="delivery_metrics_exported_to_big_query_enabled" android:value="true" /> </application>
Web
Das FCM SDK für Web 12.14.0 oder höher ermöglicht den Export von Auslieferungsdaten. Der Datenexport ist standardmäßig auf App-Ebene deaktiviert. Wenn Sie die Funktion programmatisch auf App-Instanzebene aktivieren, können Sie Endnutzer um Erlaubnis bitten, ihre Daten zur Nachrichtenzustellung zu analysieren (empfohlen). Wenn beide festgelegt sind, überschreibt der Wert auf App-Instanzebene den Wert auf App-Ebene. Wenn ein Endnutzer seine Einwilligung erteilt oder die Datenerhebung ablehnt, sollte die App das experimentelle Flag zum Aktivieren oder Deaktivieren für jede App-Instanz wie folgt festlegen:
// userConsent holds the decision of the user to give big query export consent. const userConsent = ...; const messaging = getMessagingInSw(app); experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, userConsent);
Welche Daten werden nach BigQuery exportiert?
Wenn Sie auf alte Tokens oder inaktive Registrierungen ausrichten, können einige dieser Statistiken höher ausfallen.
Das Schema der exportierten Tabelle lautet:
| _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 | Zeitstempel des Ereignisses, wie vom Server aufgezeichnet |
| project_number | INTEGER | Die Projektnummer identifiziert das Projekt, aus 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 (sofern verfügbar). Es kann eine Instanz-ID oder eine Firebase-Installations-ID sein. |
| message_type | STRING | Der Typ der Nachricht. Kann eine Benachrichtigung oder eine Datennachricht sein. „Topic“ wird verwendet, um die ursprüngliche Nachricht für einen Themen- oder Kampagnenversand zu identifizieren. Die nachfolgenden Nachrichten sind entweder Benachrichtigungen oder Datennachrichten. |
| 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 |
| collapse_key | STRING | Der Minimierungsschlüssel identifiziert eine Gruppe von Nachrichten, die minimiert werden können. 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. 5 ist die Priorität „normal“ und 10 ist die Priorität „hoch“. |
| 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 zusammengehöriger Nachrichten, z. B. eine bestimmte Sendung zu einem Thema. |
| 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 für Analysezwecke zu kennzeichnen. |
Was können Sie 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.
Anzahl der gesendeten Nachrichten nach 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;Anzahl der einzelnen App-Instanzen, 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';Anzahl der gesendeten Benachrichtigungen
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';Anzahl der gesendeten Datennachrichten
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';An ein Thema oder eine Kampagne gesendete Nachrichten 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 Nachricht verfolgen möchten, die an ein bestimmtes Thema gesendet wurde, ändern Sie diese Abfrage und ersetzen Sie AND message_id != '' durch AND message_id = <your message id>;.
Fanout-Dauer für ein bestimmtes Thema oder eine bestimmte Kampagne berechnen
Die Startzeit für den Fanout ist der Zeitpunkt, zu dem die ursprüngliche Anfrage empfangen wird. Die Endzeit ist der Zeitpunkt, zu dem die letzte einzelne Nachricht für eine einzelne Instanz erstellt wird.
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;