Nachrichtenübermittlung verstehen

FCM bietet drei Sätze von Tools, die Ihnen helfen, Einblicke in die Nachrichtenübermittlung zu erhalten:

  • Berichte zur Nachrichtenzustellung in der Firebase-Konsole
  • Aggregierte Android SDK-Übermittlungsmetriken aus der Firebase Cloud Messaging Data API
  • Umfangreicher Datenexport nach Google BigQuery

Die auf dieser Seite beschriebenen Reporting-Tools 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 es bei der Berichterstattung vieler Statistiken auf dieser Seite aufgrund der Stapelung von Analysedaten zu Verzögerungen von bis zu 24 Stunden kommen kann.

Berichte zur Nachrichtenzustellung

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 Notifications Composer und die FCM-APIs gesendet werden:

  • Sendet – Die Datennachricht oder Benachrichtigungsnachricht wurde zur Zustellung in die Warteschlange gestellt oder wurde erfolgreich zur Zustellung an einen Drittanbieterdienst wie APNs weitergeleitet. 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 Benachrichtigungsnachricht geöffnet. Wird nur für Benachrichtigungen gemeldet, die empfangen werden, wenn die App im Hintergrund ausgeführt wird.

Diese Daten sind für alle Nachrichten mit einer Benachrichtigungsnutzlast und alle gekennzeichneten Datennachrichten verfügbar. Weitere Informationen zu Labels finden Sie unter Hinzufügen von Analyselabels zu Nachrichten .

Beim Anzeigen von Nachrichtenberichten können Sie einen Datumsbereich für die angezeigten Daten festlegen und die Option zum Exportieren in CSV nutzen. Sie können auch nach diesen Kriterien filtern:

  • Plattform (iOS oder Android)
  • App
  • Benutzerdefinierte Analyseetiketten

Hinzufügen von Analyselabels zu Nachrichten

Das Markieren von Nachrichten ist für benutzerdefinierte Analysen sehr nützlich, da Sie Zustellstatistiken nach Labels oder Labelsätzen filtern können. Sie können jeder über die HTTP v1-API gesendeten Nachricht eine Bezeichnung hinzufügen, indem Sie das Feld fcmOptions.analyticsLabel im Nachrichtenobjekt oder in den plattformspezifischen Feldern AndroidFcmOptions oder ApnsFcmOptions festlegen.

Analytics-Labels sind Textzeichenfolgen im Format ^[a-zA-Z0-9-_.~%]{1,50}$ . Beschriftungen 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 hinzugefügten Labels, die über diesen Grenzwert hinausgehen, werden nicht gemeldet.

Auf der Registerkarte „Messaging- Berichte“ der Firebase-Konsole können Sie eine Liste aller vorhandenen Labels durchsuchen und diese 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 Android-Geräte mit aktivierter Datenerfassung in einem Projekt bereit. Dazu gehören Details zum Prozentsatz der ohne Verzögerung zugestellten Nachrichten 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 dabei helfen, effektive Möglichkeiten zur Verbesserung der Leistung Ihrer Sendeanfragen zu finden. Informationen zur Verfügbarkeit von Datumsbereichen in den Berichten finden Sie unter Zeitleisten für aggregierte Daten .

Die API stellt alle für eine bestimmte Anwendung verfügbaren Daten bereit. Weitere Informationen finden Sie in der API-Referenzdokumentation .

Wie sind die Daten aufgeschlüsselt?

Die Lieferdaten werden nach Anwendung, Datum und Analyseetikett aufgeschlüsselt. Ein Aufruf der API gibt Daten für jede Kombination aus Datum, Anwendung und Analysebezeichnung 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 Kennzahlen entsprechen. Es ist möglich, dass eine einzelne Nachricht zu mehreren Metriken passt. Aufgrund von Einschränkungen bei der Art und Weise, wie wir die Daten sammeln, und der Granularität, mit der wir die Metriken aggregiert haben, werden einige Nachrichtenergebnisse überhaupt nicht in den Metriken dargestellt, sodass die unten aufgeführten Prozentsätze nicht 100 % ergeben.

Anzahl der angenommenen Nachrichten

Die einzige im Datensatz enthaltene Zählung ist die Anzahl der Nachrichten, die von FCM zur Zustellung an Android-Geräte akzeptiert wurden. Alle Prozentsätze verwenden diesen Wert als Nenner. Beachten Sie, dass diese Zählung keine Nachrichten umfasst, die an Benutzer gerichtet sind, die die Erfassung von Nutzungs- und Diagnoseinformationen auf ihren Geräten deaktiviert haben.

Prozentsätze der Nachrichtenergebnisse

Die im MessageOutcomePercents Objekt enthaltenen Felder liefern Informationen über die Ergebnisse von Nachrichtenanforderungen. Die Kategorien schließen sich alle gegenseitig aus. Es kann Fragen wie „Werden meine Nachrichten zugestellt werden?“ beantworten. und „Was führt dazu, dass Nachrichten verworfen werden?“

Beispielsweise könnte ein hoher Wert für das Feld droppedTooManyPendingMessages signalisieren, dass App-Instanzen Mengen an nicht reduzierbaren 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 zusammenklappbarer Nachrichten. Ebenso könnten hohe Prozentsätze für droppedDeviceInactive ein Signal sein, Registrierungstokens auf Ihrem Server zu aktualisieren, veraltete Tokens zu entfernen und sie von Themen abzumelden. Best Practices in diesem Bereich finden Sie unter FCM-Registrierungstoken verwalten .

Lieferleistung in Prozent

Die Felder im DeliveryPerformancePercents Objekt stellen Informationen zu Nachrichten bereit, die erfolgreich zugestellt wurden. Es kann Fragen wie „Wurden meine Nachrichten verzögert?“ beantworten. und „Warum werden Nachrichten verzögert?“ Beispielsweise würde ein hoher Wert für delayedMessageThrottled eindeutig darauf hinweisen, dass Sie die Höchstgrenzen pro Gerät überschreiten, und Sie sollten die Rate, mit der Sie Nachrichten senden, anpassen.

Message Insight-Prozentsätze

Dieses Objekt stellt zusätzliche Informationen zu allen Nachrichtensendungen bereit. Das Feld priorityLowered drückt den Prozentsatz der akzeptierten Nachrichten aus, 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 stellen Sie sicher, 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 den nach BigQuery exportierten Daten?

Der BigQuery-Export stellt individuelle Nachrichtenprotokolle über die Nachrichtenannahme durch das FCM-Backend und die Nachrichtenzustellung 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-Backends an das Android SDK. Dies ist besonders nützlich, um Trends anzuzeigen, warum Nachrichten während dieses Transports verzögert wurden oder verloren gingen.

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 Kennzahlen werden gerundet
  • Wir präsentieren keine Kennzahlen unterhalb eines Datenschutzschwellenwerts
  • Ein Teil der Nachrichtenergebnisse fehlt aufgrund von Optimierungen bei der Verwaltung des großen Datenverkehrsvolumens.

Einschränkungen der API

Zeitpläne für aggregierte Daten

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. Am 20. Januar wären beispielsweise die Daten für den 9. bis 15. Januar verfügbar, nicht jedoch für den 16. Januar oder später. Darüber hinaus werden die Daten nach bestem Wissen und Gewissen bereitgestellt. Im Falle eines Datenausfalls arbeitet FCM an der Behebung des Problems und füllt die Daten nicht wieder auf, nachdem das Problem behoben wurde. Bei größeren Ausfällen kann es sein, dass die Daten eine Woche oder länger nicht verfügbar sind.

Datenabdeckung

Die von der Firebase Cloud Messaging Data API bereitgestellten Metriken sollen Einblicke in allgemeine Trends bei der Nachrichtenübermittlung geben. Sie decken jedoch nicht alle Nachrichtenszenarien zu 100 % ab. Bei den folgenden Szenarien handelt es sich um bekannte Ergebnisse, die sich nicht in den Kennzahlen widerspiegeln.

Reduzierte Nachrichten

Nachrichten, die durch eine andere Nachricht reduziert wurden, werden nicht im Datensatz angezeigt.

Nachrichten an inaktive Geräte

An inaktive Geräte gesendete Nachrichten werden möglicherweise nicht im Datensatz angezeigt, je nachdem, welchen Datenpfad sie verwenden. Dies kann zu Fehlzählungen 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 Präferenzen nicht in unsere Zählung einbeziehen.

Rundungen und Mindestbeträge

FCM rundet bewusst Zählungen ab und schließt diese 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 Notifications Composer gesendet wird.

Für Nachrichten, die an Geräte mit den folgenden FCM SDK-Mindestversionen gesendet werden, haben Sie zusätzlich die Möglichkeit, 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

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

Verknüpfen Sie zunächst Ihr Projekt mit BigQuery:

  1. Wählen Sie eine der folgenden Optionen:

    • Öffnen Sie den Notifications Composer und klicken Sie dann unten auf der Seite auf „Zugriff auf BigQuery“ .

    • Klicken Sie auf der Seite „Integrationen“ in der Firebase-Konsole auf der BigQuery- Karte auf „Link“ .

      Auf dieser Seite werden FCM-Exportoptionen für alle FCM-fähigen Apps im Projekt angezeigt.

  2. 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 erstmalige Weitergabe der Daten für den Export bis zu 48 Stunden dauern kann.

  • Nachdem das Dataset erstellt wurde, kann der Speicherort nicht mehr geändert werden. Sie können das Dataset jedoch an einen anderen Speicherort kopieren oder das Dataset manuell an einen anderen Speicherort verschieben (neu erstellen). Weitere Informationen finden Sie unter Datensatzspeicherort ä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 Nachrichtenübermittlungsdatenexport ihrer App aktivieren. FCM unterstützt den Datenexport sowohl für Warnungen als auch für Hintergrundbenachrichtigungen. Bevor Sie diese Optionen aktivieren, müssen Sie zunächst den FCM-BiqQuery-Link für Ihr Projekt erstellen, wie unter BigQuery-Datenexport beschrieben.

Aktivieren Sie den Export von Lieferdaten für Warnmeldungen

Da nur Warnungsbenachrichtigungen Benachrichtigungsdienst-App-Erweiterungen auslösen können, müssen Sie Ihrer App eine Benachrichtigungsdiensterweiterung hinzufügen und diese API innerhalb einer Diensterweiterung aufrufen, um die Verfolgung von Anzeigenachrichten zu aktivieren. Weitere Informationen finden Sie in der Dokumentation von Apple zum Ändern von Inhalten in neu zugestellten Benachrichtigungen .

Für jede eingegangene Meldung muss folgender Aufruf erfolgen:

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 mithilfe der HTTP v1-API erstellen, stellen Sie sicher, dass Sie im Nutzlastobjekt mutable-content = 1 angeben.

Aktivieren Sie den Export von Lieferdaten für Hintergrundbenachrichtigungen

Für Hintergrundnachrichten, die empfangen werden, wenn sich die App im Vordergrund oder Hintergrund befindet, können Sie die Datenexport-API im Datennachrichtenhandler der Haupt-App aufrufen. Dieser Aufruf muss für jede eingegangene 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 die gezielte Ausrichtung auf veraltete Token oder inaktive Registrierungen einige dieser Statistiken in die Höhe treiben 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 JJJJMMTT enthält diese Pseudospalte den Wert TIMESTAMP('JJJJ-MM-TT').
event_timestamp ZEITSTEMPEL Vom Server aufgezeichneter Ereigniszeitstempel
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 manchen Fällen möglicherweise nicht global eindeutig.
Instanz_ID STRING Die eindeutige ID der App, an die die Nachricht gesendet wird (sofern verfügbar). Dabei kann es sich um eine Instanz-ID oder eine Firebase-Installations-ID handeln.
Nachrichtentyp STRING Der Typ der Nachricht. Kann eine Benachrichtigungsnachricht oder eine Datennachricht sein. „Thema“ wird verwendet, um die ursprüngliche Nachricht für ein Thema oder eine Kampagnensendung zu identifizieren; Bei den nachfolgenden Nachrichten handelt es sich entweder um 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 Bundle-ID für iOS-Apps
collapse_key STRING Der Minimierungsschlü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 Minimierungsschlüssel für die 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 APN-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, beispielsweise einen bestimmten Versand an ein Thema
Ereignis STRING Die Art des Ereignisses. Mögliche Werte sind:
  • 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 übermittelt. Standardmäßig wird dieses Feld nicht weitergegeben. Befolgen Sie zum Aktivieren die Anweisungen in setDeliveryMetricsExportToBigQuery(boolean) .
  • MISSING_REGISTRATIONS: Die Anfrage wurde aufgrund einer fehlenden Registrierung abgelehnt;
  • UNAUTHORIZED_REGISTRATION: Die Nachricht wurde abgelehnt, da der Absender nicht zum Senden an die Registrierung berechtigt ist.
  • MESSAGE_RECEIVED_INTERNAL_ERROR: Bei der Verarbeitung der Nachrichtenanforderung ist ein nicht näher bezeichneter Fehler aufgetreten.
  • MISMATCH_SENDER_ID: Die Anfrage zum Senden einer Nachricht wurde aufgrund einer Nichtübereinstimmung zwischen der Absender-ID, die die Nachricht sendet, und der für den Endpunkt deklarierten ID abgelehnt.
  • QUOTA_EXCEEDED: Die Anfrage zum Senden einer Nachricht wurde aufgrund unzureichender Quote 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 größer als das Limit ist.
  • AUTHENTICATION_ERROR: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines Authentifizierungsfehlers abgelehnt (überprü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 beim Versenden der Nachricht das Analytics-Label gesetzt werden, um die Nachricht für Analysezwecke zu markieren

Was können Sie mit den exportierten Daten machen?

In den folgenden Abschnitten finden Sie 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 einzelne 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';

Anzahl der gesendeten Benachrichtigungsnachrichten

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

Zählen Sie die 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';

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 Anfrage empfangen wird, und die Endzeit ist der Zeitpunkt, zu 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;