Informacje na temat dostarczania wiadomości

FCM udostępnia 3 zestawy narzędzi, które ułatwiają analizowanie dostarczania wiadomości:

  • Firebase raporty dotyczące dostarczenia wiadomości w konsoli
  • Zbiorcze dane o dostarczaniu pakietu Android SDK pochodzące z Interfejs API danych Firebase Cloud Messaging
  • Wszechstronny eksport danych do Google BigQuery
.

Narzędzia do raportowania opisane na tej stronie wymagają usługi Google Analytics żeby funkcjonować. Jeśli w projekcie nie włączono usługi Google Analytics, możesz ją skonfigurować w integracje w ustawieniach projektu Firebase.

Pamiętaj, że raporty w wielu statystykach na tej stronie, mogą podlegać opóźnieniom wynoszącym maksymalnie 24 godziny ze względu na zbiorcze gromadzenie danych analitycznych.

Raporty o dostarczeniu wiadomości

Na karcie Raporty w konsoli Firebase możesz wyświetlić te dane dotyczące wiadomości wysyłanych do pakietów FCM SDK na platformach Android i Apple, w tym tych wysłanych za pomocą edytora powiadomień i interfejsów FCM API:

  • Sends (Wysyła) – wiadomość z danymi lub powiadomienie zostało umieszczone w kole do wysyłki lub zostało przekazane do usługi zewnętrznej, takiej jak APN, w celu dostarczenia. Sprawdź okres ważności wiadomości. .
  • Received (otrzymano) (dostępne tylko na urządzeniach z Androidem) – aplikacja otrzymała wiadomość danych lub powiadomienie. Te dane są dostępne, gdy na urządzeniu odbiorcy z Androidem jest zainstalowany pakiet SDK w wersji 18.0.1 lub nowszej.
  • Wyświetlenia (dostępne tylko w przypadku powiadomień na urządzeniach z Androidem) – Powiadomienie na ekranie wyświetla się, gdy aplikacja jest uruchomiona w tle.
  • Otwierania – użytkownik otworzył wiadomość z powiadomieniem. Zaraportowane tylko w przypadku powiadomienia otrzymywane, gdy aplikacja działa w tle.

Dane te są dostępne w przypadku wszystkich wiadomości z ładunkiem powiadomienia oraz wszystkich oznaczonych wiadomości danych. Więcej informacji o etykietach znajdziesz w artykule Dodawanie etykiet analitycznych do wiadomości.

Przy przeglądaniu raportów dotyczących wiadomości możesz wybrać zakres dat dla wyświetlanych danych, z opcją eksportu do pliku CSV. Możesz też filtrować według tych kryteriów:

  • Platforma (iOS lub Android)
  • Aplikacja
  • Własne etykiety Analytics

Dodawanie etykiet Analytics do wiadomości

Oznaczanie wiadomości etykietami jest bardzo przydatne przy analizie niestandardowej, ponieważ pozwala: filtrowanie statystyk dostarczania według etykiet lub zbiorów etykiet. Możesz dodać do dowolnej wiadomości wysyłanej przez interfejs API HTTP w wersji 1 przez ustawienie w polu fcmOptions.analyticsLabel w kolumnie message lub w obiekcie pola AndroidFcmOptions lub ApnsFcmOptions na danej platformie.

Etykiety Analytics to ciągi tekstowe w formacie ^[a-zA-Z0-9-_.~%]{1,50}$. Etykiety mogą zawierać małe i wielkie litery, cyfry i te symbole:

  • -
  • ~
  • %

Maksymalna długość to 50 znaków. Możesz określić maksymalnie 100 unikalnych etykiet dziennie. Wiadomości z etykietami dodanymi powyżej tego limitu nie są uwzględniane w raportach.

Na karcie Raporty w konsoli Firebase możesz wyszukiwać listę wszystkich istniejących etykiet i zastosować je pojedynczo lub w połączeniu wyświetlane statystyki.

zbiorcze dane dotyczące dostawy za pomocą interfejsu 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 dostarcza zbiorcze dane ze wszystkich danych urządzeń z Androidem z włączonym zbieraniem danych w projekcie. Są to m.in. szczegółowe informacje na temat: odsetek dostarczonych wiadomości, bez opóźnienia, a także ile wiadomości zostało opóźnionych lub pominiętych w Warstwa transportu Androida. Ocena tych danych może ujawnić ogólne trendy w dostarczaniu wiadomości i pomóc znaleźć skuteczne sposoby na zwiększenie skuteczności wysyłanych żądań. Informacje o dostępności zakresu dat w raportach znajdziesz w sekcji Harmonogramy danych zbiorczych.

Interfejs API udostępnia wszystkie dane dostępne dla danej aplikacji. Zapoznaj się z dokumentacją interfejsu API.

Jakie są podziały danych?

Dane o wyświetlaniu są podzielone według aplikacji, daty i etykiety Analytics. Wywołanie interfejsu API zwróci dane dla każdej kombinacji daty, aplikacji i etykiety analitycznej. Dla: na przykład pojedynczy obiekt JSON androidDeliveryData wygląda tak:

 {
  "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ć dane

Dane o dostarczeniu podają odsetek wiadomości, które pasują do każdego z tych rodzajów danych. Pojedyncza wiadomość może pasować do kilku wskaźników. Ze względu na ograniczenia w sposobie zbierania danych poziom szczegółowości, na którym zagregowaliśmy wskaźniki, niektóre wyniki dotyczące wiadomości nie są w ogóle odzwierciedlane w danych. więc poniższe wartości procentowe nie sumują się do 100%.

Liczba zaakceptowanych wiadomości

Jedyną liczbą w zbiorze danych jest liczba wiadomości, które zostały akceptowane przez FCM i dostarczane na urządzenia z Androidem. Wszystkie wartości procentowe używają tej wartości jako mianownika. Pamiętaj, że ta liczba nie obejmuje wiadomości kierowane na użytkowników, którzy wyłączono zbieranie informacji o użytkowaniu i diagnostycznych w na ich urządzeniach.

Odsetki wyników wiadomości

Pola w obiekcie MessageOutcomePercents zawierają informacje o wynikach żądań wiadomości. Kategorie wzajemnie się wykluczają. Może odpowiadać na pytania, takie jak „Czy moje wiadomości są dostarczane?” i „Co powoduje do usunięcia?”

Na przykład wysoka wartość pola droppedTooManyPendingMessages może wskazywać, że instancje aplikacji otrzymują dużą liczbę niezwijanych wiadomości, która przekracza limit FCM wynoszący 100 oczekujących wiadomości. Aby temu zapobiec, zadbaj o to, aby Twoja aplikacja obsługiwała wywołania onDeletedMessages, i rozważ wysyłanie wiadomości z możliwością zwijania. Analogicznie wysokie wartości procentowe droppedDeviceInactive może być sygnałem do zaktualizowania tokenów rejestracji przez usunięcie nieaktualnych tokenów i anulowanie ich subskrypcji z tematów. Zobacz Zarządzaj tokenami rejestracji FCM .

Procentowe wskaźniki skuteczności wyświetlania

Pola w obiekcie DeliveryPerformancePercents zawierają informacje o wiadomościach, które zostały dostarczone. Może ona odpowiadać na pytania w rodzaju „Czy moje wiadomości były opóźnione?” i „Dlaczego wiadomości były opóźnione?”. Na przykład wysoka wartość parametru delayedMessageThrottled wyraźnie wskazuje, że przekraczasz maksymalne limity na urządzenie. W takim przypadku powinieneś zmienić częstotliwość wysyłania wiadomości.

Procentowe statystyki wiadomości

Ten obiekt dostarcza dodatkowe informacje o wszystkich wysyłanych wiadomościach. Pole priorityLowered wyraża odsetek zaakceptowanych wiadomości, których priorytet został obniżony z HIGH na NORMAL. Jeśli ta wartość jest wysoka, wyślij mniej wiadomości o wysokim priorytecie lub upewnij się, że zawsze wyświetlasz powiadomienie, gdy wysyłasz wiadomość o wysokim priorytecie. Więcej informacji znajdziesz w dokumentacji na temat priorytetów wiadomości.

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

Eksport BigQuery zawiera dzienniki poszczególnych wiadomości o ich akceptacji przez backend FCM oraz dostarczaniu w SDK na urządzeniu (czynności opisane w krokach 2 i 4 architektury FCM). Te dane są przydatne do sprawdzania, czy poszczególne wiadomości zostały zaakceptowane i dostarczone. Więcej informacji o Eksportowanie danych do BigQuery znajdziesz w następnej sekcji.

Interfejs Firebase Cloud Messaging Data API zapewnia natomiast zagregowane dane. co konkretnie dzieje się w warstwie transportu Androida (lub w kroku 3 architekturę FCM). Dane te dostarczają dokładnie informacji o wyświetlaniu reklam wiadomości z backendów FCM do pakietu Android SDK. Jest to szczególnie przydatne w przypadku pokazując trendy dotyczące przyczyn opóźnienia lub utraty wiadomości podczas tego przesyłania.

Czasem może się zdarzyć, że te 2 zbiory danych nie będą dokładnie odpowiadać. z następujących powodów:

  • Dane zbiorcze obejmują tylko część wszystkich wiadomości
  • Dane zbiorcze są zaokrąglane.
  • Nie przedstawiamy danych poniżej progu prywatności
  • Część wyników wiadomości jest utracona ze względu na optymalizacje i zarządzać dużym ruchem.

Ograniczenia interfejsu API

Osie czasu zbierania danych

Interfejs API zwróci dane historyczne z 7 dni. dane zwrócone przez ten interfejs API będą jednak opóźnione nawet o 5 dni. Na przykład 20 stycznia będą dostępne dane z okresu od 9 do 15 stycznia, ale nie z 16 stycznia ani później. Dodatkowo udostępniamy Ci dane w miarę naszych możliwości. W przypadku jeśli wystąpi przerwa w działaniu danych, FCM rozwiąże problem i nie uzupełni danych po czy problem został rozwiązany. Przy większych przerwach w działaniu dane mogą być niedostępne przez tydzień. lub więcej.

Zakres danych

Dane udostępniane przez interfejs Firebase Cloud Messaging Data API mają na celu dostarczenie informacji o ogólnych trendach dostarczania wiadomości. Nie obejmują jednak w 100% wszystkich scenariuszy dotyczących wiadomości. Poniższe scenariusze są nieuwzględnionych w danych.

Wiadomości, które wygasły

Jeśli czas życia danych (TTL) wygasa po dacie logowania, wiadomość nie zostanie w tym dniu policzona jako droppedTtlExpired.

Wiadomości na nieaktywne urządzenia

Wiadomości wysyłane na nieaktywne urządzenia mogą się pojawiać lub nie w zbiorze danych w zależności od ścieżki danych. Może to spowodować nieprawidłowe zliczanie w polach droppedDeviceInactivepending.

Wiadomości na urządzenia z określonymi ustawieniami użytkownika

Użytkownicy, którzy wyłączyli zbieranie informacji o użytkowaniu i diagnostyce na swoich urządzeniach, nie będą uwzględniani w liczeniu, zgodnie z ich preferencjami.

Zaokrąglanie i wartości minimalne

FCM celowo zaokrągla i wyklucza z uwzględnienia liczby, gdy ich wielkość jest niewystarczająca.

Eksportowanie danych do BigQuery

Dane wiadomości możesz wyeksportować do BigQuery na potrzeby dalszej analizy. BigQuery umożliwia analizowanie danych za pomocą BigQuery SQL, eksportowanie ich do innego dostawcy usług w chmurze lub używanie ich do niestandardowych modeli uczenia maszynowego. Eksport do BigQuery obejmuje wszystkie dostępne dane dotyczące wiadomości, niezależnie od typ wiadomości, czyli czy jest ona wysyłana przez interfejs API, w edytorze powiadomień.

W przypadku wiadomości wysyłanych na urządzenia z tymi wersjami pakietu SDK FCM masz dodatkową opcję umożliwiającą eksport danych dotyczących dostarczania wiadomości w aplikacji:

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

Poniżej znajdziesz szczegółowe informacje o włączaniu eksportu danych na AndroidzieiOS.

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

  1. Wybierz jedną z tych opcji:

    • Otwarta Kreator powiadomień, i na dole strony kliknij Otwórz BigQuery.

    • Na stronie Integracje w konsoli Firebase kliknij Połącz na karcie BigQuery.

      Na tej stronie wyświetlane są opcje eksportowania FCM dla wszystkich aplikacji w projekcie, w których włączono FCM.

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

Więcej informacji znajdziesz w artykule Łączenie Firebase z BigQuery.

Gdy włączysz eksport BigQuery w celu Cloud Messaging:

  • Firebase eksportuje dane do usługi BigQuery. Notatka że początkowe udostępnienie danych do eksportu może potrwać do 48 godzin gotowe.

  • Po utworzeniu zbioru danych jego lokalizacji nie można już zmienić. Możesz natomiast skopiować zbiór danych do innej lokalizacji lub ręcznie przenieść (ponownie utworzyć) zbiór danych w innej lokalizacji. Więcej informacji znajdziesz w artykule Zmiana lokalizacji zbioru danych.

  • Firebase regularnie synchronizuje dane z projektu Firebase w BigQuery Te codzienne operacje eksportu rozpoczynają się o 4:00 czasu pacyficznego i zwykle kończy się w ciągu 24 godzin.

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

Aby wyłączyć eksportowanie danych z BigQuery: odłącz projekt w konsoli Firebase.

Włącz eksportowanie danych dotyczących dostarczania wiadomości

Na urządzeniach z iOS z pakietem SDK FCM w wersji 8.6.0 lub nowszej można włączyć eksport danych o dostarczonej wiadomości. FCM obsługuje eksportowanie danych zarówno w przypadku alertów, jak i powiadomień w tle. Przed włączeniem tych opcji musisz najpierw utworzyć FCM Link do BigQuery w Twoim projekcie, zgodnie z opisem w sekcji Eksportowanie danych do BigQuery.

Włączanie eksportu danych o dostawie powiadomień o alertach

Ponieważ tylko powiadomienia o alertach mogą aktywować aplikację usługi powiadomień musisz dodać rozszerzenie usługi powiadomień do aplikacji i połączeń ten interfejs API w rozszerzeniu usługi, aby włączyć śledzenie wiadomości w sieci reklamowej. Zobacz dokumentację Apple na temat modyfikowania treści w nowo wysłanych powiadomieniach.

W przypadku każdego otrzymanego powiadomienia musisz wykonać to wywołanie:

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

Jeśli tworzysz żądania wysyłania za pomocą interfejsu HTTP w wersji 1, pamiętaj, aby w obiekcie ładunku podać wartość mutable-content = 1.

Włącz eksport danych dostawy na potrzeby powiadomień w tle

W przypadku wiadomości w tle odebranych, gdy aplikacja działa na pierwszym planie lub w tle: możesz wywołać interfejs API eksportu danych w głównym module obsługi wiadomości z danymi w aplikacji. To połączenie musi być nawiązywane w przypadku każdego otrzymanego powiadomienia:

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

Jakie dane są eksportowane do BigQuery?

Pamiętaj, że kierowanie reklam na nieaktualne tokeny lub nieaktywne rejestracje może zawyżać część te statystyki.

Schemat wyeksportowanej tabeli:

_PARTITIONTIME SYGNATURA CZASOWA Ta pseudokolumna zawiera sygnaturę czasową początku dnia (w strefie czasowej UTC) z których dane zostały wczytane. W przypadku partycji RRRRMMDD ta pseudokolumna zawiera wartość TIMESTAMP('RRRR-MM-DD').
event_timestamp SYGNATURA CZASOWA Sygnatura czasowa zdarzenia zarejestrowana przez serwer
project_number LICZBA CAŁKOWITA Numer projektu identyfikuje projekt, który wysłał wiadomość.
message_id CIĄG ZNAKÓW Identyfikator wiadomości określa jej treść. Identyfikator wiadomości jest generowany na podstawie identyfikatora aplikacji i sygnatury czasowej. W niektórych przypadkach może nie być globalnie niepowtarzalny.
identyfikator_instancji CIĄG ZNAKÓW Unikalny identyfikator aplikacji, do której została wysłana wiadomość (jeśli jest dostępny). Jest taka możliwość identyfikator instancji lub identyfikator instalacji Firebase.
message_type CIĄG ZNAKÓW Typ wiadomości. Może to być wiadomość z danymi lub powiadomieniem. Topic służy do identyfikowania pierwotnej wiadomości dotyczącej tematu lub wysyłania kampanii; kolejne wiadomości to powiadomienia lub wiadomości zawierające dane.
sdk_platform CIĄG ZNAKÓW Platforma aplikacji odbiorcy
nazwa_aplikacji CIĄG ZNAKÓW Nazwa pakietu aplikacji na Androida lub identyfikator pakietu w przypadku aplikacji na iOS
collapse_key CIĄG ZNAKÓW Klucz zwijania identyfikuje grupę wiadomości, które można zwinąć. Gdy urządzenie nie jest połączone, wyświetla się tylko ostatnia wiadomość z danym zwinięciem klucz jest w kolejce do ostatecznego dostarczenia
rekrutacja priorytetowa LICZBA CAŁKOWITA Priorytet wiadomości. Prawidłowe wartości to „normal” i „wysoka”. W iOS: odpowiadają one priorytetom APNs 5 i 10
TTL LICZBA CAŁKOWITA Ten parametr określa czas (w sekundach), przez jaki wiadomość ma być przechowywana w pamięci FCM, gdy urządzenie jest offline
temat CIĄG ZNAKÓW Nazwa tematu, do którego wysłano wiadomość (w stosownych przypadkach)
bulk_id LICZBA CAŁKOWITA Identyfikator zbiorczy identyfikuje grupę powiązanych wiadomości, np. wysłanych na dany temat.
event CIĄG ZNAKÓW Typ zdarzenia. Możliwe wartości to:
  • MESSAGE_ACCEPTED: wiadomość została odebrana przez serwer FCM i żądanie jest prawidłowe;
  • MESSAGE_DELIVERED: wiadomość została dostarczona do pakietu FCM SDK aplikacji urządzenia. Domyślnie to pole nie jest rozpowszechniane. Aby to zrobić, postępuj zgodnie z instrukcjami podanymi w artykule setDeliveryMetricsExportToBigQuery(boolean).
  • MISSING_REGISTRATIONS: prośba została odrzucona z powodu braku rejestracja;
  • UNAUTHORIZED_REGISTRATION: wiadomość została odrzucona, ponieważ jej nadawca to nie ma uprawnień do wysłania wiadomości do rejestracji;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: podczas przetwarzania żądania dotyczącego wiadomości wystąpił nieokreślony błąd;
  • MISMATCH_SENDER_ID: prośba o wysłanie wiadomości została odrzucona z powodu niezgodność między identyfikatorem nadawcy wysyłającym wiadomość i identyfikatorem zadeklarowanym dla punkt końcowy;
  • QUOTA_EXCEEDED: prośba o wysłanie wiadomości została odrzucona z powodu niewystarczający limit;
  • INVALID_REGISTRATION: prośba o wysłanie wiadomości została odrzucona z powodu nieprawidłowa rejestracja;
  • INVALID_PACKAGE_NAME: żądanie wysłania wiadomości zostało odrzucone z powodu nieprawidłowej nazwy pakietu;
  • INVALID_APNS_CREDENTIAL: prośba o wysłanie wiadomości została odrzucona z powodu nieprawidłowy certyfikat APNS;
  • INVALID_PARAMETERS: żądanie wysłania wiadomości zostało odrzucone z tych powodów: nieprawidłowych parametrów;
  • PAYLOAD_TOO_LARGE: żądanie wysłania wiadomości zostało odrzucone, ponieważ ładunek był większy niż limit;
  • AUTHENTICATION_ERROR: żądanie wysłania wiadomości zostało odrzucone z powodu błędu uwierzytelniania (sprawdź klucz interfejsu API użyty do wysłania wiadomości);
  • INVALID_TTL: żądanie wysłania wiadomości zostało odrzucone z powodu nieprawidłowego TTL.
analytics_label CIĄG ZNAKÓW Interfejs HTTP v1 API etykietę analityczną można ustawić przy wysyłaniu wiadomości, aby oznaczyć wiadomość do celów analitycznych

Co można zrobić z wyeksportowanymi danymi?

W następnych sekcjach znajdziesz przykłady zapytań, które możesz uruchamiać w BigQuery na podstawie wyeksportowanych danych FCM.

Liczba wysłanych 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 instancji aplikacji docelowych dla 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';

Liczba wysłanych powiadomień

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

Liczba wysłanych wiadomości zawierających dane

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

Zliczanie wiadomości wysłanych 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ć zdarzenia dotyczące wiadomości wysyłanej do określonego tematu, zmodyfikuj to zapytanie tak, aby Zastąp AND message_id != '' elementem AND message_id = <your message id>;.

Obliczanie czasu trwania rozgałęzienia dla danego tematu lub kampanii

Czas rozpoczęcia rozgałęzienia to moment otrzymania pierwotnego żądania, a czas zakończenia to moment utworzenia ostatniej wiadomości kierowanej do pojedynczego wystąpienia.

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;

Liczba procentowa 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;

Śledzenie wszystkich zdarzeń dla danego identyfikatora wiadomości i identyfikatora wystąpienia

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;

Obliczanie opóźnienia 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;