Catch up on everthing we announced at this year's Firebase Summit. Learn more

Zrozumienie dostarczania wiadomości

FCM udostępnia trzy zestawy narzędzi, które pomogą Ci uzyskać wgląd w dostarczanie wiadomości:

  • Raporty dostarczania wiadomości w konsoli Firebase i analiza ścieżki powiadomień
  • Zagregowane dane o dostarczaniu Android SDK z interfejsu Firebase Cloud Messaging Data API
  • Kompleksowy eksport danych do Google BigQuery

Wszystkie narzędzia raportowania opisane na tej stronie wymagają do działania Google Analytics. Jeśli Google Analytics nie jest włączona do projektu, można ustawić go w integracje zakładce ustawień projektu Firebase.

Należy pamiętać, że raportowanie wielu statystyk na tej stronie podlega opóźnieniom do 24 godzin z powodu grupowania danych analitycznych.

Raporty doręczeń wiadomości

W Raporty karcie w konsoli Firebase można zobaczyć następujące dane dla wiadomości wysyłanych do firmy Apple lub Android SDK platformy FCM, w tym te wysyłane przez kompozytora powiadomień i API FCM:

  • Wysyła — wiadomość z danymi lub powiadomienie zostało umieszczone w kolejce w celu dostarczenia lub zostało pomyślnie przekazane do usługi innej firmy, takiej jak APNs w celu dostarczenia. Zobacz żywotność komunikatu , aby uzyskać więcej informacji.
  • Odebrano (dostępne tylko na urządzeniach z systemem Android) — Wiadomość z danymi lub powiadomienie zostało odebrane przez aplikację. Te dane są dostępne, gdy odbierające urządzenie z systemem Android ma zainstalowany pakiet FCM SDK 18.0.1 lub nowszy.
  • Wyświetlenia (dostępne tylko w przypadku powiadomień na urządzeniach z systemem Android) — powiadomienie na wyświetlaczu zostało wyświetlone na urządzeniu, gdy aplikacja działa w tle.
  • Otwiera — użytkownik otworzył wiadomość z powiadomieniem. Zgłaszane tylko w przypadku powiadomień otrzymanych, gdy aplikacja działa w tle.

Te dane są dostępne dla wszystkich wiadomości o ładowności powiadomienia i wszystkich oznakowanych komunikatów danych . Aby dowiedzieć się więcej o etykietach, zobacz Dodawanie analityki etykiet do wiadomości .

Podczas przeglądania raportów wiadomości możesz ustawić zakres dat dla wyświetlanych danych, z opcją eksportu do CSV. Możesz także filtrować według tych kryteriów:

  • Platforma (iOS lub Android)
  • Aplikacja
  • Niestandardowe etykiety analityczne

Dodawanie etykiet analitycznych do wiadomości

Etykietowanie wiadomości jest bardzo przydatne w przypadku niestandardowych analiz, umożliwiając filtrowanie statystyk dostarczania według etykiet lub zestawów etykiet. Możesz dodać etykietę do każdej wiadomości wysłanej za pośrednictwem HTTP API v1 ustawiając fcmOptions.analyticsLabel pola w wiadomości obiekcie lub w danej platformy AndroidFcmOptions lub ApnsFcmOptions dziedzinach.

Etykiety Analytics są ciągi tekstowe w formacie ^[a-zA-Z0-9-_.~%]{1,50}$ . Etykiety mogą zawierać małe i duże litery, cyfry oraz następujące symbole:

  • -
  • ~
  • %

Maksymalna długość to 50 znaków. Możesz określić do 100 unikalnych etykiet dziennie; wiadomości z dodanymi etykietami przekraczającymi ten limit nie są zgłaszane.

W konsoli Firebase Messaging kartę Raporty można przeszukiwać listę wszystkich istniejących etykiet i zastosować je pojedynczo lub w kombinacji, aby filtrować statystyki wyświetlane.

Analiza ścieżki powiadomień

Wbudowana analiza ścieżki powiadomień pokazuje, jak użytkownicy reagują na określone powiadomienia wysyłane z konsoli Firebase. Ten widok zawiera dane dotyczące docelowych urządzeń z systemem iOS i Android w następujących kategoriach:

  • Powiadomienia wysłane — wiadomość została umieszczona w kolejce do dostarczenia lub została pomyślnie przekazana do usługi innej firmy, takiej jak APNs w celu dostarczenia. Pamiętaj, że kierowanie na nieaktualne tokeny lub nieaktywne rejestracje może zawyżyć te statystyki.
  • Otwarte powiadomienia — liczba otwartych powiadomień. Zgłaszane tylko w przypadku powiadomień otrzymanych, gdy aplikacja działa w tle.
  • Liczba unikalnych użytkowników, którzy wywołali zdarzenie konwersji, jeśli zostało zdefiniowane.

Aby zobaczyć analizę ścieżki powiadomień:

  1. W kompozytora Powiadomienia wybierz Powiadomienia kartę.
  2. Kliknij ukończoną lub w toku wiadomość na liście wiadomości. Wyświetlony zostanie widok rozszerzony zawierający analizę ścieżki.

Raporty Analytics są okresowo aktualizowane, ale może wystąpić pewne opóźnienie między otwarciem powiadomienia przez użytkownika a udostępnieniem danych zdarzenia w konsoli. Oprócz tych raportów w ramach Powiadomienia karcie można również budować niestandardowe lejki w Analytics do wizualizacji natężenia zakończeniu sekwencji kroków w swojej aplikacji.

Zagregowane dane o dostawach za pośrednictwem FCM Data API

Interfejs Firebase Cloud Messaging Data API umożliwia pobieranie informacji, które mogą pomóc w zrozumieniu wyników żądań wiadomości kierowanych do aplikacji na Androida. Interfejs API zapewnia zagregowane dane na wszystkich urządzeniach z systemem Android obsługujących zbieranie danych w projekcie. Obejmuje dane dotyczące odsetka wiadomości dostarczanych niezwłocznie, a także ile wiadomości zostało opóźnione lub spadła w warstwie transportowej Android . Ocena tych danych może ujawnić ogólne trendy w dostarczaniu wiadomości i pomóc w znalezieniu skutecznych sposobów poprawy wydajności wysyłanych żądań.

API udostępnia wszystkie dane dostępne dla danej aplikacji. Zobacz dokumentację referencyjną API .

Jak podzielone są dane?

Dane dostawy podziale według wniosku, daty i analityki etykiecie . Wywołanie interfejsu API zwróci dane dla każdej kombinacji daty, aplikacji i etykiety analitycznej. Na przykład, jedna androidDeliveryData obiekt JSON będzie wyglądać następująco:

 {
  "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
    }
  }

Jak interpretować metryki

Dane o dostarczeniu przedstawiają procent wiadomości, które pasują do każdego z poniższych wskaźników. Możliwe, że pojedyncza wiadomość pasuje do wielu metryk. Ze względu na ograniczenia w sposobie zbierania danych i poziom szczegółowości w których zagregowane wskaźniki, niektóre efekty wiadomość nie są reprezentowane w metryki w ogóle, a więc poniżej wartości procentowe nie sumują się do 100%.

Policz wiadomości zaakceptowane

Jedyną liczbą uwzględnioną w zestawie danych jest liczba wiadomości, które zostały zaakceptowane przez FCM w celu dostarczenia na urządzenia z systemem Android. Wszystkie wartości procentowe używają tej wartości jako mianownika. Pamiętaj, że ta liczba nie obejmuje wiadomości kierowanych do użytkowników, którzy wyłączyli zbieranie informacji o użytkowaniu i diagnostycznych na swoich urządzeniach.

Procent wyniku wiadomości

Pola zawarte w MessageOutcomePercents sprzeciw dostarczają informacji o wynikach wniosków wiadomości. Kategorie wykluczają się wzajemnie. Może odpowiadać na pytania, takie jak „Czy moje wiadomości są dostarczane?” i „Co powoduje, że wiadomości są usuwane?”

Na przykład, wysoka wartość dla droppedTooManyPendingMessages dziedzinie może sygnalizować, że instancje aplikacji otrzymują tomy non-składane wiadomości przekroczenie limitu FCM za 100 oczekujących wiadomościach. Aby to ograniczyć, upewnij połączeń uchwyty aplikacji do onDeletedMessages i rozważyć wysłanie składane wiadomości. Podobnie wysokie procentowe droppedDeviceInactive może być sygnałem do tokenów rejestracyjnych zmiana na serwerze, usuwanie przestarzałych żetony i wypisywania ich tematy. Zobacz Zarządzanie FCM znaki rejestracyjne dla najlepszych praktyk w tej dziedzinie.

Procenty wydajności dostawy

Pola w DeliveryPerformancePercents sprzeciw dostarczają informacji o wiadomości, które zostały pomyślnie dostarczona. Może odpowiadać na pytania, takie jak „Czy moje wiadomości były opóźnione?” i „Dlaczego wiadomości są opóźnione?” Na przykład, wysoka wartość delayedMessageThrottled byłoby wyraźnie wskazują, że zostały przekroczone limity maksymalnych na urządzenie i należy dostosować tempo, w jakim jesteś wysyłania wiadomości.

Procenty wglądu w wiadomości

Ten obiekt dostarcza dodatkowych informacji o wszystkich wysłanych wiadomościach. priorityLowered pole wyraża procent przyjętych wiadomości, które priorytet obniżony z HIGH na NORMAL powodu aplikacji wiader gotowości . Jeśli ta wartość jest wysoka, spróbuj wysłać mniej wiadomości o wysokim priorytecie lub upewnij się, że zawsze wyświetlasz powiadomienie, gdy zostanie wysłana wiadomość o wysokim priorytecie.

Czym te dane różnią się od danych wyeksportowanych do BigQuery?

Eksport BigQuery zapewnia indywidualne dzienniki komunikat o przyjęciu komunikatu przez backend FCM i dostarczania wiadomości w SDK na urządzeniu (punkty 2 i 4 FCM Architecture ). Te dane są przydatne do zapewnienia, że ​​poszczególne wiadomości zostały zaakceptowane i dostarczone. Czytaj więcej o eksport danych BigQuery w następnym rozdziale.

Natomiast API Firebase Cloud Messaging danych zawiera zagregowane dane o tym, co się dzieje, szczególnie w warstwie transportowej (Android lub etap 3 FCM Architecture ). Te dane zapewniają wgląd w dostarczanie wiadomości z backendów FCM do Android SDK. Jest to szczególnie przydatne do pokazywania trendów, dlaczego wiadomości zostały opóźnione lub porzucone podczas tego transportu.

W niektórych przypadkach możliwe jest, że te dwa zestawy danych mogą się nie zgadzać z następujących powodów:

  • Zagregowane dane próbkują tylko część wszystkich wiadomości
  • Zagregowane dane są zaokrąglane
  • Nie prezentujemy danych poniżej progu prywatności
  • Brakuje części wyników wiadomości z powodu optymalizacji sposobu, w jaki zarządzamy dużym natężeniem ruchu.

Ograniczenia API

Opóźnienie danych

Dane zwrócone przez ten interfejs API zostaną opóźnione o maksymalnie 5 dni. Na przykład 10 stycznia będą dostępne dane z 5 stycznia, ale nie z 6 stycznia lub później. Dodatkowo dane są dostarczane z największą starannością. W przypadku przerwy w dostępie do danych FCM będzie pracować nad rozwiązaniem problemu i nie będzie uzupełniać danych po rozwiązaniu problemu. W przypadku większych awarii dane mogą być niedostępne przez tydzień lub dłużej.

Pokrycie danych

Wskaźniki udostępniane przez Firebase Cloud Messaging Data API mają na celu zapewnienie wglądu w ogólne trendy dostarczania wiadomości. Jednak nie zapewniają 100% pokrycia wszystkich scenariuszy wiadomości. Poniższe scenariusze to znane wyniki, które nie są odzwierciedlone w metrykach.

Zwinięte wiadomości

Wiadomości, które zostały zapadnięte przez inny komunikat nie pojawia się w zbiorze danych.

Wiadomości do nieaktywnych urządzeń

Wiadomości wysyłane do nieaktywnych urządzeń mogą, ale nie muszą pojawiać się w zbiorze danych, w zależności od wybranej ścieżki danych. Może to prowadzić do niektórych zliczaniu w droppedDeviceInactive i pending pola.

Wiadomości do urządzeń z określonymi preferencjami użytkownika

Użytkownicy, którzy wyłączyli zbieranie informacji o użytkowaniu i diagnostycznych na swoich urządzeniach, nie będą uwzględniać swoich wiadomości w naszym zliczaniu, zgodnie z ich preferencjami.

Zaokrąglanie i minima

FCM celowo zaokrągla i wyklucza zliczenia, w których wolumeny nie są wystarczająco duże.

Eksport danych BigQuery

Można wyeksportować dane wiadomość do BigQuery do dalszej analizy. BigQuery pozwala analizować dane za pomocą BigQuery SQL, eksportować je do innego dostawcy chmury lub używać danych do niestandardowych modeli ML. Eksport do BigQuery obejmuje wszystkie dostępne dane dotyczące wiadomości, niezależnie od typu wiadomości i tego, czy wiadomość jest wysyłana za pośrednictwem interfejsu API czy kompozytora powiadomień.

W przypadku wiadomości wysyłanych na urządzenia z następującymi minimalnymi wersjami pakietu FCM SDK masz dodatkową opcję włączenia eksportu danych dostarczania wiadomości dla swojej aplikacji:

  • Android 20.1.0 lub nowszy.
  • iOS 8.6.0 lub nowszy
  • Pakiet Firebase Web SDK w wersji 9.0.0 lub nowszej

Poniżej znajdują się szczegółowe informacje na temat umożliwiające eksport danych dla Androida i iOS .

Aby rozpocząć, połącz swój projekt z BigQuery:

  1. Wybierz jedną z następujących opcji:

    • Otwórz kompozytor powiadomień , a następnie kliknij Access BigQuery w dolnej części strony.

    • Z Integrations strony konsoli Firebase, kliknij link na karcie BigQuery.

      Ta strona wyświetla opcje eksportu FCM dla wszystkich aplikacji obsługujących FCM w projekcie.

  2. Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby włączyć BigQuery.

Patrz link Firebase do BigQuery , aby uzyskać więcej informacji.

Po połączeniu projektu z BigQuery:

  • Firebase eksportuje swoje dane do BigQuery. Pamiętaj, że wstępne propagowanie danych do wyeksportowania może potrwać do 48 godzin.

  • Firebase konfiguruje regularne synchronizacje danych z projektu Firebase do BigQuery. Te codzienne operacje eksportowe rozpoczynają się o 4:00 czasu pacyficznego i zwykle kończą się w ciągu 24 godzin.

  • Domyślnie wszystkie aplikacje w Twoim projekcie są połączone z BigQuery, a wszystkie aplikacje, które później dodasz do projektu, zostaną automatycznie połączone z BigQuery. Możesz zarządzać które aplikacje wysyłać dane .

Aby dezaktywować eksport BigQuery, odłączyć swój projekt w konsoli Firebase.

Włącz eksport danych dostarczania wiadomości

Urządzenia z iOS z pakietem FCM SDK 8.6.0 lub nowszym mogą włączyć eksport danych dostarczania wiadomości w swojej aplikacji. FCM obsługuje eksport danych zarówno dla powiadomień alarmowych, jak i w tle. Przed włączeniem tych opcji, należy najpierw utworzyć odnośnik FCM-BiqQuery dla danego projektu, jak opisano w eksporcie danych BigQuery .

Włącz eksport danych dostawy dla powiadomień o alertach

Ponieważ tylko powiadomienia o alertach mogą wyzwalać rozszerzenia aplikacji usługi powiadomień, musisz dodać rozszerzenie usługi powiadomień do swojej aplikacji i wywołać ten interfejs API w rozszerzeniu usługi, aby włączyć śledzenie wyświetlanych komunikatów. Zobacz dokumentację Apple na modyfikacji zawartości nowo oddanych powiadomień .

W przypadku każdego otrzymanego powiadomienia należy wykonać następujące wezwanie:

Szybki

// 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)
  }
}

Cel 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

Jeśli budujesz zapytań Wyślij używając HTTP API v1, upewnij się, aby określić mutable-content = 1 w obiekcie ładunku .

Włącz eksport danych dostawy dla powiadomień w tle

Za odebrane wiadomości w tle, gdy aplikacja jest na pierwszym planie lub w tle, można wywołać API eksportu danych wewnątrz wiadomości dane obsługi głównego aplikacji UIApplicationDelegate application:didReceiveRemoteNotification:fetchCompletionHandler: . To wezwanie należy wykonać dla każdego otrzymanego powiadomienia:

Szybki

// For background notifications, call the API inside the UIApplicationDelegate method:
  func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
    Messaging.extensionHelper().exportDeliveryMetricsToBigQuery(withMessageInfo:userInfo)
  }

Cel C

// For background notifications, call the API inside the UIApplicationDelegate method:
@implementation AppDelegate
- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:userInfo];
@end

Jakie dane są eksportowane do BigQuery?

Pamiętaj, że kierowanie na nieaktualne tokeny lub nieaktywne rejestracje może zawyżyć niektóre z tych statystyk.

Schemat eksportowanej tabeli to:

_PARTITIONTIME ZNAK CZASU Ta pseudokolumna zawiera znacznik czasu początku dnia (w UTC), w którym dane zostały załadowane. W przypadku partycji RRRRMMDD ta pseudokolumna zawiera wartość TIMESTAMP('RRRR-MM-DD').
event_timestamp ZNAK CZASU Znacznik czasu zdarzenia zarejestrowany przez serwer
numer projektu LICZBA CAŁKOWITA Numer projektu identyfikuje projekt, który wysłał wiadomość
ID wiadomości STRUNOWY Identyfikator wiadomości identyfikuje wiadomość. Wygenerowany na podstawie identyfikatora aplikacji i sygnatury czasowej identyfikator wiadomości może w niektórych przypadkach nie być globalnie unikatowy.
instancja_id STRUNOWY Identyfikator instancji aplikacji, do której wiadomość jest wysyłana (jeśli jest dostępny)
typ wiadomości STRUNOWY Typ wiadomości. Może to być wiadomość z powiadomieniem lub wiadomość z danymi. Temat służy do identyfikacji oryginalnej wiadomości dla tematu lub wysłanej kampanii; kolejne wiadomości są albo powiadomieniem, albo wiadomością z danymi.
sdk_platform STRUNOWY Platforma aplikacji odbiorcy
Nazwa aplikacji STRUNOWY Nazwa pakietu dla aplikacji na Androida lub identyfikator pakietu dla aplikacji na iOS
klawisz_zawinięcia STRUNOWY Klucz zwinięcia identyfikuje grupę wiadomości, które można zwinąć. Gdy urządzenie nie jest podłączone, tylko ostatnia wiadomość z danym kluczem zwinięcia jest umieszczana w kolejce do ostatecznego dostarczenia
priorytet LICZBA CAŁKOWITA Priorytet wiadomości. Prawidłowe wartości to „normalne” i „wysokie”. W systemie iOS odpowiadają one priorytetom APN 5 i 10
ttl LICZBA CAŁKOWITA Ten parametr określa, jak długo (w sekundach) wiadomość powinna być przechowywana w pamięci FCM, jeśli urządzenie jest w trybie offline
temat STRUNOWY Nazwa tematu, na który została wysłana wiadomość (jeśli dotyczy)
zbiorczy_id LICZBA CAŁKOWITA Identyfikator zbiorczy identyfikuje grupę powiązanych wiadomości, takich jak konkretna wiadomość wysłana do tematu
wydarzenie STRUNOWY Rodzaj wydarzenia. Możliwe wartości to:
  • MESSAGE_ACCEPTED: wiadomość została odebrana przez serwer FCM i żądanie jest ważne;
  • MESSAGE_DELIVERED: wiadomość została dostarczona do pakietu FCM SDK aplikacji na urządzeniu. Domyślnie to pole nie jest propagowane. Aby włączyć, należy postępować zgodnie z instrukcjami podanymi w setDeliveryMetricsExportToBigQuery(boolean) .
  • MISSING_REGISTRATIONS: wniosek został odrzucony z powodu braku rejestracji;
  • UNAUTHORIZED_REGISTRATION: wiadomość została odrzucona, ponieważ nadawca nie ma uprawnień do wysyłania do rejestracji;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: wystąpił nieokreślony błąd podczas przetwarzania żądania wiadomości;
  • MISMATCH_SENDER_ID: żądanie wysłania komunikatu zostało odrzucone z powodu niezgodności między identyfikatorem nadawcy wysyłającego komunikat a identyfikatorem zadeklarowanym dla punktu końcowego;
  • QUOTA_EXCEEDED: żądanie wysłania wiadomości zostało odrzucone z powodu niewystarczającego limitu;
  • INVALID_REGISTRATION: żądanie wysłania wiadomości zostało odrzucone z powodu nieprawidłowej rejestracji;
  • INVALID_PACKAGE_NAME: żądanie wysłania wiadomości zostało odrzucone z powodu nieprawidłowej nazwy pakietu;
  • INVALID_APNS_CREDENTIAL: żądanie wysłania wiadomości zostało odrzucone z powodu nieprawidłowego certyfikatu APNS;
  • INVALID_PARAMETERS: żądanie wysłania wiadomości zostało odrzucone z powodu nieprawidłowych parametrów;
  • PAYLOAD_TOO_LARGE: żądanie wysłania wiadomości zostało odrzucone z powodu ładunku większego niż limit;
  • AUTHENTICATION_ERROR: żądanie wysłania wiadomości zostało odrzucone z powodu błędu uwierzytelniania (sprawdź klucz API użyty do wysłania wiadomości);
  • INVALID_TTL: żądanie wysłania wiadomości zostało odrzucone z powodu nieprawidłowego TTL.
etykieta_analityki STRUNOWY Z HTTP v1 API , etykieta analityka można ustawić podczas wysyłania wiadomości, aby oznaczyć wiadomość dla celów analitycznych

Co możesz zrobić z wyeksportowanymi danymi?

W poniższych sekcjach znajdziesz przykłady zapytań, które możesz uruchomić w BigQuery na wyeksportowanych danych FCM.

Policz wysłane wiadomości według aplikacji

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;

Zliczanie unikalnych wystąpień aplikacji, na które kierowane są wiadomości

SELECT COUNT(DISTINCT instance_id)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED';

Policz wysłane powiadomienia

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

Policz wysłane wiadomości z danymi

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

Zliczaj wiadomości wysłane do tematu lub kampanii

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

Aby śledzić wydarzenia dla wiadomości wysłanej do konkretnego tematu, modyfikować tę kwerendę, aby zastąpić AND message_id != '' Z AND message_id = <your message id>; .

Oblicz czas trwania fanoutu dla danego tematu lub kampanii

Czas rozpoczęcia fanoutu to czas odebrania oryginalnego żądania, a czas zakończenia to czas utworzenia ostatniej pojedynczej wiadomości kierowanej na jedno wystąpienie.

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;

Policz procent dostarczonych wiadomości

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;

Śledź wszystkie zdarzenia dla danego identyfikatora wiadomości i identyfikatora instancji

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;

Oblicz opóźnienie dla danego identyfikatora wiadomości i identyfikatora instancji

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;