Nachrichtenzustellung

FCM bietet drei Sätze von Tools, die Ihnen helfen, einen Einblick in die Nachrichtenzustellung zu 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

Alle auf dieser Seite beschriebenen Berichtstools benötigen Google Analytics, damit sie funktionieren. 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 abrufen, 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:

  • Sendet: Die Datennachricht oder Benachrichtigung wurde zur Zustellung in die Warteschlange gestellt oder erfolgreich an einen Drittanbieterdienst wie APNs zur Zustellung weitergeleitet. 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 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 Analytics-Labels 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 dazu, welche Zeiträume in den Berichten verfügbar sind, finden Sie unter Zusammengefasste Datenzeitachsen.

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 Dataset wird nur die Anzahl der Nachrichten berücksichtigt, die von FCM für die Übermittlung 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.

Prozentuale 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.

Beispielsweise könnte ein hoher Wert für das Feld droppedTooManyPendingMessages darauf hinweisen, dass Anwendungsinstanzen Volumen nicht minimierbarer Nachrichten empfangen, die das Limit von FCM von 100 ausstehenden Nachrichten überschreiten. 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. Es kann Fragen wie „Haben meine Nachrichten verspätet empfangen?“ und „Warum sind Nachrichten verzögert?“ beantwortet. 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. Das Feld priorityLowered gibt den Prozentsatz der akzeptierten Nachrichten an, deren Priorität von HIGH auf NORMAL gesenkt wurde. Wenn dieser Wert hoch ist, versuchen Sie, weniger Nachrichten mit hoher Priorität zu senden, oder achten Sie darauf, dass Sie immer eine Benachrichtigung anzeigen, 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 stellt einzelne Nachrichtenlogs zur Annahme von Nachrichten durch das FCM-Back-End und zur Nachrichtenzustellung im SDK auf dem Gerät bereit (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 aggregierten Messwerte sind gerundete Werte
  • 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. So sind beispielsweise am 20. Januar bis zum 15. Januar die Daten für den Zeitraum vom 9. Januar bis zum 15. Januar verfügbar, jedoch nicht für den 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 Logdatums 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. Dies 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.

Rundung und Minima

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

Weitere Informationen zum Aktivieren des Datenexports für Android und iOS finden Sie weiter unten.

Verknüpfen Sie zuerst Ihr Projekt mit BigQuery:

  1. 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 die FCM-Exportoptionen für alle FCM-fähigen Apps im Projekt angezeigt.

  2. 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 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.

Zum Deaktivieren des BigQuery-Exports müssen Sie in der Firebase-Konsole die Verknüpfung des Projekts aufheben.

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, müssen Sie zuerst die FCM-BigQuery-Verknüpfung für Ihr Projekt erstellen, wie im Hilfeartikel 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 zum Ändern von Inhalten in neu bereitgestellten Benachrichtigungen.

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 möglicherweise aufgebläht werden.

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
Projektnummer 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). Dies kann eine Instanz-ID oder eine Firebase-Installations-ID sein.
message_type STRING Der Nachrichtentyp. 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 "high". 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 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 E-Mail an ein Thema.
event STRING Der Typ des Ereignisses. Mögliche Werte:
  • MESSAGE_ACCEPTED: Die Nachricht wurde vom FCM-Server empfangen und die Anfrage ist gültig.
  • MESSAGE_DELIVERED: Die Nachricht wurde an das FCM SDK der App auf dem Gerät gesendet. Dieses Feld wird standardmäßig nicht weitergegeben. Folgen Sie der Anleitung unter setDeliveryMetricsExportToBigQuery(boolean), um die Funktion zu aktivieren.
  • MISSING_REGISTRATIONS: Die Anfrage wurde aufgrund einer fehlenden Registrierung abgelehnt.
  • UNAUTHORIZED_REGISTRATION: Die Nachricht wurde abgelehnt, da der Absender nicht berechtigt ist, an die Registrierung zu senden.
  • MESSAGE_RECEIVED_INTERNAL_ERROR: Bei der Verarbeitung der Nachrichtenanfrage ist ein nicht näher beschriebener Fehler aufgetreten.
  • MISMATCH_SENDER_ID: Die Anfrage zum Senden einer Nachricht wurde aufgrund einer Abweichung zwischen der Absender-ID, von der die Nachricht gesendet wurde, und der für den Endpunkt angegebenen ID abgelehnt.
  • QUOTA_EXCEEDED: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines unzureichenden Kontingents abgelehnt.
  • INVALID_REGISTRATION: Die Anfrage zum Senden einer Nachricht wurde aufgrund einer ungültigen Registrierung abgelehnt.
  • INVALID_PACKAGE_NAME: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines ungültigen Paketnamens abgelehnt.
  • INVALID_APNS_CREDENTIAL: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines ungültigen APNS-Zertifikats abgelehnt.
  • INVALID_PARAMETERS: Die Anfrage zum Senden einer Nachricht wurde aufgrund ungültiger Parameter abgelehnt.
  • PAYLOAD_TOO_LARGE: Die Anfrage zum Senden einer Nachricht wurde aufgrund einer Nutzlast abgelehnt, die das Limit überschreitet.
  • AUTHENTICATION_ERROR: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines Authentifizierungsfehlers abgelehnt. Prüfen Sie den API-Schlüssel, der zum Senden der Nachricht verwendet wurde.
  • INVALID_TTL: Die Anfrage zum Senden einer Nachricht wurde aufgrund einer ungültigen TTL abgelehnt.
analytics_label STRING Mit der HTTP v1 API kann das Analyselabel beim Senden der Nachricht festgelegt werden, um die Nachricht zu Analysezwecken zu markieren.

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;

Einzelne 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';

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';

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 des Fanouts ist der Zeitpunkt, zu dem die ursprüngliche Anfrage empfangen wird, und 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

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;