Aby rozwiązać problemy z dostarczaniem wiadomości, użyj narzędzia do rozwiązywania problemów z FCM i zapoznaj się z tym postem na blogu, aby poznać różne przyczyny, dla których możesz nie widzieć swojej wiadomości. Możesz też sprawdzić na panelu stanu FCM, czy nie występują obecnie przerwy w działaniu usługi FCM.
FCM udostępnia też 3 zestawy narzędzi, które pomagają uzyskać ogólne statystyki o skuteczności przesyłania wiadomości i strategii:
- Raporty o dostarczeniu wiadomości z konsoli Firebase
- Zbiorcze dane o wyświetlaniu z interfejsu Firebase Cloud Messaging Data API dotyczące pakietu Android SDK
- Kompleksowy eksport danych do Google BigQuery
Eksportowanie danych do BigQuery i karta Raporty w konsoli Firebase wymagają do działania Google Analytics. Możesz włączyć Google Analytics w konsoli Firebase na karcie
Pamiętaj, że raportowanie wielu statystyk na tej stronie może być opóźnione nawet o 24 godziny ze względu na przetwarzanie danych analitycznych w pakietach.
Raporty Dostarczanie wiadomości
W Firebase konsoli otwórz DevOps i zaangażowanie > Wiadomości > karta Raporty, aby wyświetlić te dane dotyczące wiadomości wysłanych do pakietów SDK FCM na platformy Android i Apple, w tym wiadomości wysłanych za pomocą narzędzia do tworzenia powiadomień i interfejsów API FCM:
- Wysłane – wiadomość z danymi lub powiadomienie zostało umieszczone w kolejce do dostarczenia lub zostało przekazane do usługi innej firmy, np. APNs, w celu dostarczenia. Pamiętaj, że statystyki wysyłania mogą być opóźnione o kilka godzin. Więcej informacji znajdziesz w sekcji Czas życia wiadomości.
- Odebrano (dostępne tylko na urządzeniach z Androidem) – aplikacja odebrała wiadomość z danymi lub powiadomienie. Te dane są dostępne, gdy na urządzeniu z Androidem, które odbiera wiadomość, jest zainstalowany pakiet SDK FCM w wersji 18.0.1 lub nowszej.
- Wyświetlenia (dostępne tylko w przypadku powiadomień na urządzeniach z Androidem) – powiadomienie zostało wyświetlone na urządzeniu, gdy aplikacja działała w tle.
- Otwarcie – użytkownik otworzył wiadomość z powiadomieniem. Raportowane tylko w przypadku powiadomień otrzymanych, gdy aplikacja działa w tle.
Te dane są dostępne w przypadku wszystkich wiadomości z ładunkiem powiadomienia i wszystkich oznaczonych etykietą wiadomości z danymi. Więcej informacji o etykietach znajdziesz w artykule Dodawanie etykiet analitycznych do wiadomości.
Podczas wyświetlania raportów wiadomości możesz ustawić 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
- Etykiety niestandardowych statystyk
Dodawanie etykiet analitycznych do wiadomości
Etykietowanie wiadomości jest bardzo przydatne w przypadku analizy niestandardowej, ponieważ umożliwia filtrowanie statystyk dostarczania według etykiet lub zestawów etykiet. Możesz dodać etykietę do dowolnej wiadomości wysłanej za pomocą interfejsu HTTP v1 API, ustawiając pole fcmOptions.analyticsLabel w obiekcie message lub w polach AndroidFcmOptions lub ApnsFcmOptions dla konkretnej platformy.
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ć maksymalnie 100 unikalnych etykiet dziennie. Wiadomości z etykietami dodanymi po przekroczeniu tego limitu nie są uwzględniane w raportach.
Na karcie Raporty w sekcji wiadomości w konsoli Firebase możesz wyszukać listę wszystkich istniejących etykiet i zastosować je pojedynczo lub w połączeniu, aby filtrować wyświetlane statystyki.
Zbiorcze dane o dostawie przy użyciu interfejsu FCM Data API
Interfejs Komunikacja w chmurze Firebase (FCM) Data API umożliwia pobieranie informacji, które mogą pomóc Ci zrozumieć wyniki żądań wiadomości kierowanych do aplikacji na Androida. Interfejs API udostępnia dane zbiorcze ze wszystkich urządzeń z Androidem w projekcie, na których włączone jest zbieranie danych. Obejmuje to informacje o odsetku wiadomości dostarczonych bez opóźnień oraz o liczbie wiadomości, które zostały opóźnione lub odrzucone w warstwie transportowej Androida. Analiza tych danych może ujawnić ogólne trendy w dostarczaniu wiadomości i pomóc Ci znaleźć skuteczne sposoby na zwiększenie skuteczności wysyłanych próśb. Informacje o dostępności zakresów dat w raportach znajdziesz w sekcji Oś czasu danych zbiorczych.
Interfejs API udostępnia wszystkie dane dostępne w przypadku danej aplikacji. Zapoznaj się z dokumentacją interfejsu API.
Jak są podzielone dane?
Dane o dostarczaniu 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. Na przykład pojedynczy obiekt JSON androidDeliveryData wyglądałby 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
}
}
Interpretacja danych
Dane o dostarczaniu zawierają odsetek wiadomości, które pasują do poszczególnych danych. Możliwe, że jedna wiadomość pasuje do kilku danych. Ze względu na ograniczenia dotyczące sposobu zbierania danych i poziomu szczegółowości, na którym agregujemy dane, niektóre wyniki wiadomości nie są w ogóle uwzględniane w danych, więc podane niżej wartości procentowe nie sumują się do 100%.
Liczba zaakceptowanych wiadomości
Jedyna liczba uwzględniona w zbiorze danych to liczba wiadomości, które zostały zaakceptowane przez FCM do 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 kierowanych do użytkowników, którzy wyłączyli zbieranie informacji o użytkowaniu i diagnostycznych na swoich urządzeniach.
Odsetki wyników wiadomości
Pola w obiekcie MessageOutcomePercents zawierają informacje o wynikach żądań wiadomości. Wszystkie kategorie wzajemnie się wykluczają. Może odpowiadać na pytania takie jak „Czy moje wiadomości są dostarczane?” i „Co powoduje odrzucanie wiadomości?”.
Na przykład wysoka wartość w polu droppedTooManyPendingMessages może oznaczać, że instancje aplikacji otrzymują liczbę wiadomości niezwijanych przekraczającą limit 100 oczekujących wiadomości w usłudze FCM.
Aby temu zapobiec, zadbaj o to, aby aplikacja obsługiwała wywołania funkcji onDeletedMessages i rozważ wysyłanie zwijalnych wiadomości. Podobnie wysokie wartości procentowe dla droppedDeviceInactive mogą być sygnałem, że należy zaktualizować tokeny rejestracji na serwerze, usunąć nieaktualne tokeny i anulować ich subskrypcję tematów. Więcej informacji o sprawdzonych metodach znajdziesz w artykule Zarządzanie tokenami rejestracji FCM.
Odsetki wydajności dostawy
Pola w obiekcie DeliveryPerformancePercents zawierają informacje o wiadomościach, które zostały dostarczone. 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ść parametru
delayedMessageThrottled wyraźnie wskazuje, że przekraczasz maksymalne limity na urządzenie i powinieneś(-aś) dostosować częstotliwość wysyłania wiadomości.
Wartości procentowe statystyk wiadomości
Ten obiekt zawiera dodatkowe informacje o wszystkich wysł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 upewnij się, że za każdym razem, gdy wysyłana jest wiadomość o wysokim priorytecie, wyświetlane jest powiadomienie. Więcej informacji znajdziesz w naszej dokumentacji dotyczącej priorytetu wiadomości.
Czym te dane różnią się od danych eksportowanych do BigQuery?
Eksport BigQuery udostępnia dzienniki poszczególnych wiadomości dotyczące akceptacji wiadomości przez backend FCM i dostarczania wiadomości w pakiecie SDK na urządzeniu (kroki 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 eksportowaniu danych do BigQuery znajdziesz w następnej sekcji.
Z kolei interfejs Firebase Cloud Messaging Data API udostępnia zbiorcze informacje o tym, co dzieje się w warstwie transportowej Androida (czyli w kroku 3 architektury FCM). Te dane zawierają statystyki dotyczące dostarczania wiadomości z backendów FCM do pakietu Android SDK. Jest to szczególnie przydatne do pokazywania trendów dotyczących przyczyn opóźnień lub odrzucenia wiadomości podczas tego transportu.
W niektórych przypadkach te 2 zbiory danych mogą się nie pokrywać dokładnie z tych powodów:
- Zgromadzone dane obejmują tylko próbkę wszystkich wiadomości.
- Dane zbiorcze są zaokrąglane.
- Nie wyświetlamy danych poniżej progu prywatności
- Część wyników wiadomości jest niedostępna z powodu optymalizacji sposobu zarządzania dużym ruchem.
Ograniczenia interfejsu API
Oś czasu danych zbiorczych
Interfejs API zwraca dane historyczne z 7 dni, ale dane zwracane przez ten interfejs API będą opóźnione o maksymalnie 5 dni. Na przykład 20 stycznia dostępne będą dane z okresu 9–15 stycznia, ale nie z okresu od 16 stycznia. Dodatkowo dane są dostarczane z możliwie największą dokładnością. W przypadku awarii danych FCM podejmie działania, aby rozwiązać problem, ale nie uzupełni danych po jego usunięciu. W przypadku większych awarii dane mogą być niedostępne przez tydzień lub dłużej.
Zakres danych
Dane dostarczane przez interfejs Firebase Cloud Messaging Data API mają na celu zapewnienie wglądu w ogólne trendy dotyczące dostarczania wiadomości. Nie zapewniają one jednak 100% pokrycia wszystkich scenariuszy wyświetlania wiadomości. Poniższe scenariusze to znane wyniki, które nie są odzwierciedlane w danych.
Wygasłe wiadomości
Jeśli czas TTL wygaśnie po zakończeniu danego dnia, wiadomość nie zostanie uwzględniona w dzienniku jako droppedTtlExpired w tym dniu.
Wiadomości na nieaktywne urządzenia
Wiadomości wysyłane na nieaktywne urządzenia mogą, ale nie muszą, pojawiać się w zbiorze danych w zależności od tego, którą ścieżką danych się przemieszczają. Może to prowadzić do błędów w zliczaniu w polach droppedDeviceInactive i pending.
Wiadomości na urządzenia z określonymi ustawieniami użytkownika
Wiadomości od użytkowników, którzy wyłączyli zbieranie informacji o użytkowaniu i diagnostyce na swoich urządzeniach, nie będą uwzględniane w naszych obliczeniach, zgodnie z ich preferencjami.
Zaokrąglanie i wartości minimalne
FCM celowo zaokrągla i wyklucza liczby, gdy wolumeny nie są wystarczająco duże.
Eksportowanie danych z BigQuery
Możesz wyeksportować dane wiadomości do BigQuery, aby przeprowadzić dalszą analizę. BigQuery umożliwia analizowanie danych za pomocą BigQuery SQL, eksportowanie ich do innego dostawcy chmury lub używanie ich w niestandardowych modelach ML. Eksport do BigQuery obejmuje wszystkie dostępne dane dotyczące wiadomości, niezależnie od ich typu i tego, czy zostały wysłane za pomocą interfejsu API czy Kreatora powiadomień.
W przypadku wiadomości wysyłanych na urządzenia z minimalną wersją pakietu SDK FCM masz dodatkową opcję włączenia eksportu danych o dostarczaniu wiadomości w aplikacji:
- Androida w wersji 20.1.0 lub nowszej.
- iOS w wersji 8.6.0 lub nowszej,
- Pakiet SDK Firebase dla aplikacji internetowych w wersji 12.14.0 lub nowszej
Aby rozpocząć, połącz projekt z BigQuery za pomocą konsoli Firebase:
Wybierz jedną z tych opcji:
Otwórz DevOps i zaangażowanie > Komunikacja > Kreator powiadomień, a następnie u dołu strony kliknij Uzyskaj dostęp do BigQuery.
Otwórz
Ustawienia > Integracje. Następnie w sekcji BigQuery kliknij Połącz.Na tej stronie wyświetlane są FCMopcje eksportu dla wszystkichFCM aplikacji w projekcie, w których włączono tę funkcję.
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 z usługi BigQuery do Cloud Messaging:
Firebase eksportuje Twoje dane do BigQuery. Pamiętaj, że początkowe rozpowszechnianie danych do eksportu może potrwać do 48 godzin.
- Możesz ręcznie zaplanować uzupełnianie danych z ostatnich 30 dni.
Gdy zostanie on utworzony, jego lokalizacji nie można już zmienić. Możesz natomiast skopiować zbiór danych do innej lokalizacji lub go ręcznie przenieść przez ponowne utworzenie tego zbioru w innej lokalizacji. Więcej informacji znajdziesz w artykule Zmiana lokalizacji zbioru danych.
Firebase konfiguruje regularną synchronizację danych z projektu w Firebase z BigQuery. Te 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. Wszystkie aplikacje, które dodasz do projektu później, także zostaną automatycznie połączone z BigQuery. Możesz określić, które aplikacje mają wysyłać dane.
Aby dezaktywować eksport BigQuery, odłącz projekt w Firebase konsoli.
Włączanie eksportu danych o dostarczaniu wiadomości
iOS+
Na urządzeniach z iOS z pakietem SDK FCM w wersji 8.6.0 lub nowszej można włączyć eksportowanie danych o dostarczaniu wiadomości z aplikacji. FCM obsługuje eksport danych zarówno w przypadku alertów, jak i powiadomień w tle. Eksport danych jest domyślnie wyłączony na poziomie aplikacji. Włączenie tej funkcji automatycznie na poziomie instancji aplikacji umożliwia poproszenie użytkowników o zgodę na analizowanie danych o dostarczaniu wiadomości (zalecane). Jeśli ustawione są obie wartości, wartość na poziomie instancji aplikacji zastępuje wartość na poziomie aplikacji.
Zanim włączysz te opcje, musisz najpierw utworzyć połączenie FCM-BigQuery dla swojego projektu, jak opisano w artykule Eksportowanie danych do BigQuery.
Włączanie eksportu danych o dostawie w przypadku powiadomień o alertach
Tylko powiadomienia o alertach mogą wywoływać rozszerzenia aplikacji usługi powiadomień, więc musisz dodać do aplikacji rozszerzenie usługi powiadomień i wywołać ten interfejs API w rozszerzeniu usługi, aby włączyć śledzenie wyświetlania wiadomości. Zapoznaj się z dokumentacją Apple dotyczącą modyfikowania treści w nowo dostarczonych powiadomieniach.
W przypadku każdego otrzymanego powiadomienia należy 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.serviceExtension().exportDeliveryMetrics(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 v1 API, pamiętaj, aby w obiekcie ładunku określić `mutable-content = 1`.
Włączanie eksportu danych o dostarczaniu 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 module obsługi wiadomości z danymi w głównej aplikacji. To wywołanie musi być wykonywane 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.serviceExtension().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
Android
Na urządzeniach z Androidem z pakietem SDK FCM w wersji 20.1.0 lub nowszej można włączyć eksportowanie danych o dostarczaniu wiadomości z aplikacji. Eksport danych jest domyślnie wyłączony na poziomie aplikacji. Włączenie tej funkcji na poziomie instancji aplikacji umożliwia proszenie użytkowników o zgodę na analizowanie danych o dostarczaniu wiadomości (zalecane). Jeśli oba są ustawione, wartość na poziomie instancji aplikacji zastępuje wartość na poziomie aplikacji.
Zanim włączysz te opcje, musisz najpierw utworzyć FCMpołączenie z BigQuery w projekcie zgodnie z opisem w sekcji Eksportowanie danych do BigQuery.
Włączanie eksportu danych o dostarczaniu w przypadku instancji aplikacji
W większości przypadków zalecamy włączenie eksportu danych o dostarczaniu wiadomości tylko na poziomie instancji aplikacji i pozostawienie go wyłączonego na poziomie aplikacji.
FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true);
Włączanie eksportu danych o dostarczaniu w przypadku aplikacji
Jeśli wolisz włączyć eksportowanie na poziomie aplikacji, nie wywołuj metody setDeliveryMetricsExportToBigQuery i dodaj do obiektu aplikacji w manifeście aplikacji tę właściwość:
<application> <meta-data android:name="delivery_metrics_exported_to_big_query_enabled" android:value="true" /> </application>
Sieć
FCM SDK na potrzeby internetu w wersji 12.14.0 lub nowszej umożliwia eksportowanie danych o dostarczaniu. Eksport danych jest domyślnie wyłączony na poziomie aplikacji. Włączenie tej funkcji automatycznie na poziomie instancji aplikacji umożliwia poproszenie użytkowników o zgodę na analizowanie danych o dostarczaniu wiadomości (zalecane). Jeśli ustawione są obie wartości, wartość na poziomie instancji aplikacji zastępuje wartość na poziomie aplikacji. Gdy użytkownik wyrazi zgodę na zbieranie danych lub ją odrzuci, aplikacja powinna ustawić eksperymentalną flagę włączania lub wyłączania dla każdej instancji aplikacji w ten sposób:
// userConsent holds the decision of the user to give big query export consent. const userConsent = ...; const messaging = getMessagingInSw(app); experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, userConsent);
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 jest następujący:
| _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. |
| project_number | LICZBA CAŁKOWITA | Numer projektu identyfikuje projekt, który wysłał wiadomość. |
| message_id | CIĄG ZNAKÓW | Identyfikator wiadomości identyfikuje wiadomość. Identyfikator wiadomości jest generowany na podstawie identyfikatora aplikacji i sygnatury czasowej, więc w niektórych przypadkach może nie być unikalny globalnie. |
| instance_id | CIĄG ZNAKÓW | Unikalny identyfikator aplikacji, do której wysyłana jest 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ć powiadomienie lub wiadomość zawierająca dane. Temat służy do identyfikowania pierwotnej wiadomości w przypadku wysyłania tematu lub kampanii. Kolejne wiadomości to powiadomienia lub wiadomości z danymi. |
| sdk_platform | CIĄG ZNAKÓW | Platforma aplikacji odbiorcy |
| app_name | CIĄG ZNAKÓW | nazwę pakietu w przypadku 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, tylko ostatnia wiadomość z danym kluczem zwijania jest umieszczana w kolejce do dostarczenia. |
| rekrutacja priorytetowa | LICZBA CAŁKOWITA | Priorytet wiadomości. 5 to priorytet „normalny”, a 10 to priorytet „wysoki”. |
| ttl | LICZBA CAŁKOWITA | Ten parametr określa, jak długo (w sekundach) wiadomość powinna być przechowywana w FCM, jeśli urządzenie jest offline. |
| temat | CIĄG ZNAKÓW | nazwa tematu, do którego wysłano wiadomość (jeśli dotyczy); |
| bulk_id | LICZBA CAŁKOWITA | Identyfikator zbiorczy identyfikuje grupę powiązanych wiadomości, np. wysłanych na dany temat. |
| zdarzenie | CIĄG ZNAKÓW | Typ zdarzenia.
Możliwe wartości:
|
| analytics_label | CIĄG ZNAKÓW | W przypadku interfejsu HTTP v1 API etykietę analityczną można ustawić podczas wysyłania wiadomości, aby oznaczyć ją do celów analitycznych. |
Co można zrobić z wyeksportowanymi danymi?
W sekcjach poniżej znajdziesz przykłady zapytań, które możesz uruchamiać w BigQuery na 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;Liczba unikalnych instancji aplikacji, do których 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';Liczba wysłanych wiadomości z powiadomieniem
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 związane z wiadomością wysłaną do określonego tematu, zmodyfikuj to zapytanie, zastępując AND message_id != '' ciągiem AND message_id = <your message id>;.
obliczać czas trwania fanoutu dla danego tematu lub kampanii;
Czas rozpoczęcia rozsyłania to moment otrzymania pierwotnego żądania, a czas zakończenia to moment utworzenia ostatniej pojedynczej wiadomości kierowanej do jednej instancji.
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;
Obliczanie odsetka 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ń dotyczących 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;Obliczanie czasu oczekiwania 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;