FCM udostępnia 3 zestawy narzędzi, które zapewniają wgląd w dostarczanie wiadomości:
- Raporty o dostarczaniu wiadomości w konsoli Firebase
- Zbiorcze dane o przesyłaniu pakietów SDK do Androida z interfejsu Firebase Cloud Messaging Data API
- Wszechstronny eksport danych do Google BigQuery
Wszystkie opisane na tej stronie narzędzia do raportowania wymagają Google Analytics do działania. Jeśli usługa Google Analytics nie jest włączona w Twoim projekcie, możesz ją skonfigurować na karcie Integracje w ustawieniach projektu Firebase.
Pamiętaj, że ze względu na zbiorcze grupowanie danych analitycznych raportowanie wielu statystyk na tej stronie może być opóźnione nawet o 24 godziny.
Raporty o dostarczeniu wiadomości
Na karcie Raporty w konsoli Firebase możesz wyświetlać te dane dotyczące wiadomości wysłanych do pakietów SDK FCM na Androida i platformy Apple, w tym za pomocą Narzędzia do tworzenia powiadomień i interfejsów API FCM:
- Wysłane – wiadomość z danymi lub wiadomość z powiadomieniem została dodana do kolejki do dostarczenia lub została przekazana do usługi innej firmy, takiej jak APNs w celu dostarczenia. Więcej informacji znajdziesz w sekcji Czas życia wiadomości.
- Otrzymane (dostępne tylko na urządzeniach z Androidem) – wiadomość z danymi lub komunikat z powiadomieniem została odebrana przez aplikację. Te dane są dostępne, gdy na docelowym urządzeniu z Androidem jest zainstalowany pakiet FCM SDK w wersji 18.0.1 lub nowszej.
- Wyświetlenia (dotyczy tylko powiadomień na urządzeniach z Androidem) – powiadomienie o wyświetlaniu wyświetla się na urządzeniu, gdy aplikacja działa w tle.
- Otwiera się – użytkownik otworzył wiadomość z powiadomieniem. Te dane są uwzględniane tylko w przypadku powiadomień otrzymywanych, gdy aplikacja działa w tle.
Te dane są dostępne w przypadku wszystkich wiadomości z ładunkiem powiadomień oraz wszystkich oznaczonych wiadomościami z danymi. Więcej informacji o etykietach znajdziesz w artykule Dodawanie etykiet Analytics do wiadomości.
Podczas przeglądania raportów dotyczących wiadomości możesz ustawić zakres dat wyświetlanych danych oraz opcję eksportu do pliku CSV. Możesz też filtrować dane 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 filtrować statystyki dostarczania według etykiet lub zbiorów etykiet. Możesz dodać etykietę do dowolnej wiadomości wysyłanej przez interfejs HTTP v1 API. W tym celu ustaw pole fcmOptions.analyticsLabel
w obiekcie message lub w polach AndroidFcmOptions
bądź ApnsFcmOptions
dostępnych 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 oraz te symbole:
-
~
%
Maksymalna długość to 50 znaków. Możesz określić do 100 unikalnych etykiet dziennie. Wiadomości z etykietami dodanymi ponad ten limit nie są raportowane.
Na karcie Raporty w konsoli Firebase możesz przeszukać listę wszystkich istniejących etykiet i zastosować je pojedynczo lub w połączeniu, aby filtrować wyświetlane statystyki.
Zbiorcze dane o dostawie przez interfejs FCM Data API
Interfejs Firebase Cloud Messaging Data API umożliwia pobieranie informacji, które pomagają zrozumieć efekty żądań wiadomości skierowanych do aplikacji na Androida. Interfejs API udostępnia dane zbiorcze ze wszystkich urządzeń z Androidem w projekcie, które umożliwiają zbieranie danych. Obejmuje to szczegółowe informacje o odsetku wiadomości dostarczonych bez opóźnienia oraz o liczbie wiadomości opóźnionych lub pominiętych w warstwie transportu Androida. Ocena tych danych może ujawnić ogólne trendy w dostarczaniu wiadomości i pomóc znaleźć skuteczne sposoby na zwiększenie wydajności wysyłanych żądań. Informacje o dostępności zakresu dat w raportach znajdziesz w sekcji Harmonogramy danych zbiorczych.
Interfejs API dostarcza wszystkie dane dostępne dla danej aplikacji. Zapoznaj się z dokumentacją API.
Jak wygląda podział danych?
Dane o wyświetlaniu są podzielone według aplikacji, daty i etykiety Analytics.
Wywołanie interfejsu API zwróci dane dla wszystkich kombinacji daty, aplikacji i etykiety analitycznej. 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
Przedstawiają one odsetek wiadomości, które spełniają poniższe warunki. Pojedyncza wiadomość może pasować do kilku wskaźników. Ze względu na ograniczenia w sposobie zbierania danych oraz na poziom szczegółowości, na jakim 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
Zbiór danych zawiera tylko liczbę wiadomości zaakceptowanych przez FCM w celu dostarczenia 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 skierowanych do użytkowników, którzy wyłączyli na swoich urządzeniach zbieranie informacji o użytkowaniu i diagnostyce.
Procentowe wyniki wiadomości
Pola zawarte w obiekcie MessageOutcomePercents
dostarczają informacji o efektach żądań wiadomości. Kategorie wzajemnie się wykluczają. Może on odpowiedzieć na pytania, takie jak „Czy moje wiadomości są dostarczane?” i „Co powoduje, że wiadomości są odrzucane?”.
Na przykład wysoka wartość w polu droppedTooManyPendingMessages
może oznaczać, że instancje aplikacji otrzymują ilość wiadomości, których nie można zwinąć, przekraczając limit 100 wiadomości oczekujących w FCM.
Aby temu zaradzić, sprawdź, czy Twoja aplikacja obsługuje wywołania onDeletedMessages
i rozważ wysyłanie wiadomości zwijanych. Podobnie wysokie wartości procentowe parametru droppedDeviceInactive
mogą być sygnałem do zaktualizowania tokenów rejestracji na serwerze, usunięcia nieaktualnych tokenów i anulowania ich subskrypcji z tematów. Sprawdzone metody w tym zakresie znajdziesz w artykule Zarządzanie tokenami rejestracji FCM.
Procentowe wskaźniki skuteczności wyświetlania
Pola w obiekcie DeliveryPerformancePercents
zawierają informacje o wiadomościach, które zostały dostarczone. Pozwala odpowiedzieć na pytania, takie jak „Czy moje wiadomości były opóźnione?” i „Dlaczego wiadomości są opóźnione?”. Na przykład wysoka wartość atrybutu delayedMessageThrottled
jasno wskazuje, że przekraczasz maksymalne limity na urządzenie, dlatego należy dostosować częstotliwość wysyłania wiadomości.
Procentowe statystyki wiadomości
Ten obiekt dostarcza dodatkowe informacje o wszystkich wysyłanych wiadomościach. Pole priorityLowered
określa odsetek zaakceptowanych wiadomości, których priorytet został obniżony z HIGH
do NORMAL
. Jeśli ta wartość jest wysoka, spróbuj wysyłać mniej wiadomości o wysokim priorytecie lub zadbaj o to, by zawsze wyświetlać powiadomienie o wysłaniu wiadomości o wysokim priorytecie. Więcej informacji znajdziesz w dokumentacji dotyczącej priorytetu wiadomości.
Czym różnią się te dane od danych eksportowanych do BigQuery?
Eksport BigQuery zawiera poszczególne dzienniki wiadomości dotyczące akceptacji wiadomości przez backend FCM oraz dostarczania wiadomości w pakiecie SDK na urządzeniu (kroki 2 i 4 architektury FCM). Dane te pozwalają zapewnić, że poszczególne wiadomości zostały zaakceptowane i dostarczone. Więcej informacji o eksportowaniu danych do BigQuery znajdziesz w następnej sekcji.
Interfejs Firebase Cloud Messaging Data API dostarcza natomiast zagregowane szczegółowe informacje o tym, co dzieje się w warstwie Android Transport Layer (lub w kroku 3 architektury FCM). Dane te zapewniają wgląd w dostarczanie wiadomości z backendów FCM do pakietu Android SDK. Jest to szczególnie przydatne, gdy chcesz pokazać trendy, które wyjaśniają, dlaczego wiadomości były opóźnione lub zostały usunięte podczas przenoszenia.
W niektórych przypadkach może się zdarzyć, że te 2 zbiory danych nie będą dokładnie pasować z tych powodów:
- Zagregowane wskaźniki obejmują tylko część wszystkich wiadomości.
- Dane zbiorcze są zaokrąglane.
- Nie prezentujemy danych poniżej progu umożliwiającego zachowanie prywatności
- Część wyników dotyczących wiadomości jest niedostępna ze względu na optymalizacje sposobu zarządzania dużą liczbą wiadomości.
Ograniczenia interfejsu API
Osie czasu zbierania danych
Interfejs API zwróci dane historyczne z 7 dni, jednak dane zwrócone przez ten interfejs API będą opóźnione nawet o 5 dni. Na przykład 20 stycznia dane z okresu 9–15 stycznia będą dostępne, ale nie będą z okresu 16 stycznia i później. Dodatkowo udostępniamy Ci dane w miarę naszych możliwości. W przypadku przerwy w działaniu danych FCM rozwiąże problem i nie uzupełni danych po jego wyeliminowaniu. W przypadku większych przerw dane mogą być niedostępne przez tydzień lub dłużej.
Zakres danych
Dane udostępniane przez interfejs Firebase Cloud Messaging Data API mają zapewnić wgląd w ogólne trendy w dostarczaniu wiadomości. Nie zapewniają jednak 100-procentowego zasięgu we wszystkich scenariuszach wiadomości. Poniższe scenariusze to znane wyniki, które nie są uwzględniane w wskaźnikach.
Wiadomości, które wygasły
Jeśli wartość Time To Live (TTL) wygaśnie po zakończeniu danej daty logu, wiadomość nie będzie liczona w tym dniu jako droppedTtlExpired
.
Wiadomości na nieaktywne urządzenia
Wiadomości wysyłane na nieaktywne urządzenia mogą się nie pojawiać w zbiorze danych w zależności od ścieżki danych, którą przebywają. Może to spowodować błędne zliczanie w polach droppedDeviceInactive
i pending
.
Wiadomości na urządzenia z określonymi preferencjami użytkownika
Zgodnie z własnymi preferencjami użytkowników, którzy wyłączyli zbieranie informacji o użytkowaniu i diagnostyce na swoich urządzeniach, ich wiadomości nie będą uwzględniane w naszym zliczaniu.
Zaokrąglanie i wartości minimalne
FCM celowo zaokrągla i wyklucza wartości, które nie są wystarczająco duże.
Eksportowanie danych do BigQuery
Dane wiadomości możesz wyeksportować do BigQuery, aby poddać je dalszej analizie. BigQuery umożliwia analizowanie danych za pomocą BigQuery SQL, eksportowanie ich do innego dostawcy usług w chmurze oraz wykorzystywanie danych na potrzeby niestandardowych modeli ML. Eksport do BigQuery obejmuje wszystkie dostępne dane wiadomości niezależnie od ich typu i tego, czy jest ona wysyłana przez interfejs API czy przez kompozytora powiadomień.
W przypadku wiadomości wysyłanych do urządzeń z tymi minimalnymi wersjami pakietu SDK FCM możesz włączyć eksport danych dotyczących dostarczania wiadomości z aplikacji:
- System Android w wersji 20.1.0 lub nowszej.
- iOS 8.6.0 lub nowszy
- pakiet SDK Firebase Web w wersji 9.0.0 lub nowszej
Poniżej znajdziesz szczegółowe informacje na temat włączania eksportu danych w przypadku Androida i iOS.
Aby rozpocząć, połącz projekt z BigQuery:
Wybierz jedną z tych opcji:
Otwórz edytor powiadomień i u dołu strony kliknij Otwórz BigQuery.
Na stronie Integracje w konsoli Firebase kliknij Połącz na karcie BigQuery.
Na tej stronie wyświetlane są opcje eksportu do FCM dla wszystkich aplikacji obsługujących FCM w projekcie.
Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby włączyć BigQuery.
Więcej informacji znajdziesz w artykule Łączenie Firebase z BigQuery.
Gdy włączysz eksportowanie danych do BigQuery na potrzeby Komunikacji w chmurze:
Firebase eksportuje dane do BigQuery. Pamiętaj, że początkowa propagacja danych do eksportu może potrwać do 48 godzin.
- Możesz ręcznie zaplanować uzupełnianie danych z maksymalnie 30 ostatnimi dniami.
Po utworzeniu zbioru danych jego lokalizacji nie można już zmienić. Możesz jednak skopiować zbiór danych do innej lokalizacji lub przenieść go ręcznie (ponownie utworzyć) w innej lokalizacji. Więcej informacji znajdziesz w artykule o zmienianiu lokalizacji zbioru danych.
Firebase konfiguruje regularne synchronizacje danych z projektu Firebase z BigQuery. Codzienne operacje eksportu rozpoczynają się o 4:00 czasu pacyficznego i zwykle kończą się w ciągu 24 godzin.
Domyślnie wszystkie aplikacje w projekcie są połączone z BigQuery, a wszystkie aplikacje, które dodasz później do projektu, zostaną automatycznie połączone z BigQuery. Możesz określić, które aplikacje mają wysyłać dane.
Aby wyłączyć funkcję BigQuery Export, odłącz projekt w konsoli Firebase.
Włącz eksportowanie danych dotyczących dostarczania wiadomości
Urządzenia z iOS z pakietem SDK FCM w wersji 8.6.0 lub nowszej mogą włączyć eksportowanie danych dotyczących dostarczania wiadomości w swojej aplikacji. FCM obsługuje eksportowanie danych zarówno w przypadku alertów, jak i powiadomień w tle. Zanim włączysz te opcje, musisz najpierw utworzyć w projekcie link FCM-BiqQuery, zgodnie z opisem w sekcji Eksportowanie danych do BigQuery.
Włącz eksportowanie danych dostawy na potrzeby powiadomień o alertach
Tylko powiadomienia o alertach mogą wywoływać rozszerzenia aplikacji usługi powiadomień, dlatego aby włączyć śledzenie wiadomości wyświetlanych, musisz dodać do aplikacji rozszerzenie usługi powiadomień i wywołać ten interfejs API w rozszerzeniu usługi. Zapoznaj się z dokumentacją firmy Apple dotyczącą modyfikowania treści w nowo dostarczanych powiadomieniach.
Dla każdego otrzymanego powiadomienia należy wykonać następujące połączenie:
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 API HTTP w wersji 1, pamiętaj, by określić mutable-content = 1
w obiekcie ładunku.
Włącz eksport danych dostawy na potrzeby powiadomień w tle
W przypadku wiadomości w tle otrzymanych, gdy aplikacja działa na pierwszym planie lub w tle, możesz wywołać interfejs API eksportu danych w ramach modułu obsługi wiadomości z danymi głównej 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 na nieaktualne tokeny lub nieaktywne rejestracje może zawyżać niektóre z tych statystyk.
Schemat wyeksportowanej tabeli:
_PARTITIONTIME | SYGNATURA CZASOWA | Ta pseudokolumna zawiera sygnaturę czasową początku dnia (w czasie UTC), w którym wczytano dane. W przypadku partycji RRRRMMDD ta pseudokolumna zawiera wartość TIMESTAMP('RRRR-MM-DD'). |
event_timestamp | SYGNATURA CZASOWA | Sygnatura czasowa zdarzenia zarejestrowana przez serwer |
numer_projektu | 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ść. W niektórych przypadkach identyfikator wiadomości, wygenerowany na podstawie identyfikatora aplikacji i sygnatury czasowej, nie jest unikalny globalnie. |
identyfikator_instancji | CIĄG ZNAKÓW | Unikalny identyfikator aplikacji, do której została wysłana wiadomość (jeśli jest dostępny). Może to być identyfikator instancji lub identyfikator instalacji Firebase. |
message_type | CIĄG ZNAKÓW | Typ wiadomości. Może to być Wiadomość z powiadomieniem lub Wiadomość z danymi. Temat służy do identyfikowania oryginalnej wiadomości związanej z tematem lub wiadomością związaną z kampanią. Kolejne wiadomości są albo powiadomieniami, albo wiadomościami zawierającymi 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 |
klucz_zwinięcia | CIĄG ZNAKÓW | Klucz zwijania określa grupę wiadomości, które można zwinąć. Gdy urządzenie nie jest połączone, w kolejce do dostarczenia jest tylko ostatnia wiadomość z danym kluczem zwijania |
rekrutacja priorytetowa | LICZBA CAŁKOWITA | Priorytet wiadomości. Prawidłowe wartości to „normal” (normalny) i „high”. W systemie 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 została wysłana wiadomość (jeśli dotyczy) |
identyfikator_zbiorczy | LICZBA CAŁKOWITA | Identyfikator zbiorczy identyfikuje grupę powiązanych wiadomości, np. konkretne wysłanie do tematu. |
event | CIĄG ZNAKÓW | Typ zdarzenia.
Możliwe wartości:
|
etykieta_analityki | CIĄG ZNAKÓW | Interfejs HTTP v1 API umożliwia ustawienie etykiety Analytics podczas wysyłania wiadomości w celu jej oznaczenia na potrzeby statystyk |
Co można zrobić z wyeksportowanymi danymi?
W sekcjach poniżej znajdziesz przykłady zapytań, które możesz wykonać w BigQuery na podstawie wyeksportowanych danych z 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;
Liczba unikalnych instancji aplikacji, których dotyczą 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';
Licznik 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';
Zliczanie wysłanych 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';
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ąpić AND message_id != ''
ciągiem AND message_id = <your message id>;
.
Oblicz czas zwielokrotnienia dla danego tematu lub kampanii
Godzina rozpoczęcia zwielokrotnienia to czas otrzymania pierwotnego żądania, a czas zakończenia to czas utworzenia ostatniej pojedynczej wiadomości kierowanej na pojedynczą instancję.
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 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ń związanych z danym identyfikatorem wiadomości i identyfikatorem 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;
Czas oczekiwania obliczony 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;