Verwenden Sie zur Fehlerbehebung bei anhaltenden Problemen mit der Nachrichtenzustellung die FCM-Fehlerbehebung und lesen Sie diesen Blogbeitrag, um die verschiedenen Gründe dafür zu verstehen, warum Sie Ihre Nachricht möglicherweise nicht sehen. Sie können auch das FCM-Status-Dashboard aufrufen, um festzustellen, ob es aktuelle Dienstunterbrechungen gibt, die sich auf FCM auswirken.
FCM bietet außerdem drei Toolsets, mit denen Sie den Erfolg und die Strategie von Nachrichten umfassend analysieren können:
- Firebase Konsolennachrichten-Zustellberichte
- Aggregierte Messwerte zur Bereitstellung von Android-SDKs aus der Firebase Cloud Messaging Data API
- Umfassender Datenexport nach Google BigQuery
Für den BigQuery-Datenexport und den Tab Berichte in der Firebase-Konsole 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. Für Aggregated Delivery Data ist Google Analytics nicht erforderlich.
Beachten Sie, dass es bei der Berichterstellung für viele Statistiken auf dieser Seite aufgrund der Batchverarbeitung von Analysedaten zu Verzögerungen von bis zu 24 Stunden kommen kann.
Berichte zur E-Mail-Zustellung
Auf dem Tab Berichte in der Firebase-Konsole können Sie die folgenden Daten für Nachrichten ansehen, die an FCM-SDKs für Android- oder Apple-Plattformen gesendet wurden, einschließlich der Nachrichten, die über den Benachrichtigungs-Composer und die FCM-APIs gesendet wurden:
- Sendet: Die Daten- oder Benachrichtigungsnachricht wurde für die Zustellung in die Warteschlange gestellt oder erfolgreich an einen Drittanbieterdienst wie APNs zur Zustellung übergeben. Hinweis: Es kann einige Stunden dauern, bis die Statistiken zu Sendungen aktualisiert werden. 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 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.
- Öffnungen: Der Nutzer hat die Benachrichtigung geöffnet. Wird nur für Benachrichtigungen erfasst, die eingehen, wenn die App im Hintergrund ausgeführt wird.
Diese Daten sind für alle Nachrichten mit einer Benachrichtigungsnutzlast und alle gelabelten Datennachrichten verfügbar. Weitere Informationen zu Labels finden Sie unter Analyselabel zu Nachrichten hinzufügen.
Wenn Sie sich Berichte zu Mitteilungen ansehen, können Sie einen Zeitraum für die angezeigten Daten festlegen und die Daten als CSV-Datei exportieren. Sie können auch nach diesen Kriterien filtern:
- Plattform (iOS oder Android)
- App
- Benutzerdefinierte Analytik-Labels
Nachrichten Analyselabels 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, indem Sie das Feld fcmOptions.analyticsLabel
im Objekt message oder in den plattformspezifischen Feldern AndroidFcmOptions
oder ApnsFcmOptions
festlegen.
Analytics-Labels sind Textstrings im Format ^[a-zA-Z0-9-_.~%]{1,50}$
.
Labels können Groß- und Kleinbuchstaben, Zahlen und die folgenden Symbole enthalten:
-
~
%
Darf maximal 50 Zeichen lang sein. 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 dem Tab Firebase-Konsolenbenachrichtigungen 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 Auslieferungsdaten mit der FCM Data API
Mit der Firebase Cloud Messaging Data API können Sie Informationen abrufen, die Ihnen helfen, die Ergebnisse von Nachrichtenanfragen für Android-Anwendungen nachzuvollziehen. Die API stellt zusammengefasste Daten für alle Android-Geräte in einem Projekt bereit, 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 Transport Layer verzögert oder verworfen wurden. Wenn Sie diese Daten auswerten, können Sie allgemeine Trends bei der Zustellung von Nachrichten erkennen und effektive Möglichkeiten zur Verbesserung der Leistung Ihrer Sendeanfragen finden. Informationen zur Verfügbarkeit von Zeiträumen in den Berichten finden Sie unter Zeitachse 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 sieht beispielsweise so aus:
{
"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 nicht enthalten. Die unten aufgeführten Prozentsätze ergeben daher nicht 100%.
Anzahl der akzeptierten Nachrichten
Die einzige Anzahl, die im Dataset enthalten ist, ist die Anzahl der Nachrichten, die von FCM für die Zustellung an Android-Geräte akzeptiert wurden. Alle Prozentsätze verwenden diesen Wert als Nenner. Beachten Sie, dass in dieser Anzahl keine Nachrichten enthalten sind, die an Nutzer gesendet werden, 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 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 Anzahl von nicht minimierbaren Nachrichten empfangen, die das Limit von 100 ausstehenden Nachrichten für FCM überschreiten.
Um dies zu verhindern, muss Ihre App Aufrufe von onDeletedMessages
verarbeiten. Außerdem sollten Sie minimierbare Nachrichten senden. Ebenso können hohe Prozentsätze für droppedDeviceInactive
ein Signal dafür sein, dass Sie Registrierungstokens auf Ihrem Server aktualisieren, alte Tokens entfernen und sie von Themen abmelden sollten. Best Practices für diesen Bereich finden Sie unter FCM-Registrierungstokens verwalten.
Prozentsätze der Auslieferungsleistung
Die Felder im DeliveryPerformancePercents
-Objekt 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 darauf hinweisen, dass Sie die maximalen Grenzwerte pro Gerät überschreiten. Sie sollten die Rate, mit der Sie Nachrichten senden, entsprechend anpassen.
Prozentsätze für Nachrichtenstatistiken
Dieses Objekt enthält zusätzliche Informationen zu allen gesendeten Nachrichten. Das Feld priorityLowered
gibt den Prozentsatz der akzeptierten Nachrichten an, deren Priorität von HIGH
auf NORMAL
gesenkt wurde. Wenn dieser Wert hoch ist, sollten Sie weniger Nachrichten mit hoher Priorität senden oder dafür sorgen, 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 werden?
Der BigQuery-Export enthält einzelne Nachrichtenprotokolle zur Nachrichtenannahme 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
Die Firebase Cloud Messaging Data API bietet dagegen aggregierte Details dazu, was genau in der Android-Transportschicht (oder Schritt 3 der FCM-Architektur) passiert. Diese Daten geben Aufschluss über die Zustellung von Nachrichten von FCM-Back-Ends an das Android SDK. Das ist besonders nützlich, um Trends zu erkennen, warum Nachrichten während dieses Transports verzögert oder verworfen wurden.
In einigen Fällen stimmen die beiden Datasets möglicherweise nicht genau überein. Das kann folgende Gründe haben:
- Die aggregierten Messwerte basieren nur auf einer Stichprobe aller Nachrichten.
- Die zusammengefassten Messwerte werden gerundet.
- Messwerte unterhalb eines bestimmten Schwellenwerts werden nicht angezeigt.
- Ein Teil der Nachrichtenergebnisse fehlt aufgrund von Optimierungen bei der Verarbeitung des großen Trafficvolumens.
Einschränkungen der API
Zeitachse für aggregierte Daten
Die API gibt historische Daten für 7 Tage zurück. Die von dieser API zurückgegebenen Daten sind jedoch um 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 nach bestem Wissen und Gewissen bereitgestellt. Bei einem Datenausfall wird FCM das Problem beheben, aber die Daten nach der Behebung des Problems nicht rückwirkend auffüllen. 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 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
Bei Nutzern, die die Erhebung von Nutzungs- und Diagnoseinformationen auf ihren Geräten deaktiviert haben, werden ihre Nachrichten gemäß ihren Einstellungen nicht in unsere Zählung einbezogen.
Rundung und Mindestbeträge
In FCM werden Zählungen bewusst gerundet und ausgeschlossen, wenn die Mengen 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, 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 Benachrichtigungs-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 9.0.0 oder höher
Unten finden Sie Informationen zum Aktivieren des Datenexports für Android und iOS.
So verknüpfen Sie Ihr Projekt mit BigQuery:
Wählen Sie eine der folgenden Optionen aus:
Öffnen Sie das Tool zum Erstellen von Benachrichtigungen und klicken Sie unten auf der Seite auf Auf BigQuery zugreifen.
Klicken Sie in der Firebase-Konsole auf der Seite Integrationen auf der Karte BigQuery auf Verknüpfen.
Auf dieser Seite werden die FCM-Exportoptionen für alle FCM-fähigen 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 BigQuery-Export für Cloud Messaging aktivieren, gilt Folgendes:
Firebase exportiert Ihre Daten nach BigQuery. Die erste Übertragung von Daten für den Export kann bis zu 48 Stunden dauern.
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 verschieben, d. h. an einem anderen Standort 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 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 Nachrichtenzustellung 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 für Benachrichtigungen sowohl für Warnungen als auch für Hintergrundbenachrichtigungen. 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 für Warnungen 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 Dienst-Erweiterung aufrufen, um das Tracking von Display-Nachrichten zu aktivieren. Weitere Informationen finden Sie 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.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 Zustellungsdaten für Hintergrundbenachrichtigungen aktivieren
Bei Hintergrundnachrichten, die empfangen werden, wenn sich die App im Vorder- oder Hintergrund befindet, können Sie die Data Export API im Daten-Nachrichten-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?
Wenn Sie auf alte Tokens oder inaktive Registrierungen ausrichten, können einige dieser Statistiken höher ausfallen.
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 YYYYMMDD-Partition 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 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). 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. Das Thema 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 | Den Paketnamen für Android-Apps oder die Bundle-ID für iOS-Apps |
collapse_key | STRING | Der Collapse-Schlü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 collapse_key in die Warteschlange gestellt, um sie später zu senden. |
Priorität | INTEGER | Die Priorität der Nachricht. Gültige Werte sind „normal“ und „high“. Unter iOS entsprechen diese den APNs-Prioritäten 5 und 10. |
ttl | INTEGER | Dieser Parameter gibt an, wie lange 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 kennzeichnet eine Gruppe verwandter Nachrichten, z. B. eine bestimmte Nachricht, die an ein Thema gesendet wurde. |
event | STRING | Der Typ des Ereignisses.
Mögliche Werte:
|
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 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.
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 zählen, die auf 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 erfassen möchten, die an ein bestimmtes Thema gesendet wurde, ersetzen Sie in dieser Abfrage 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
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;