Informacje na temat dostarczania wiadomości

Aby rozwiązać problemy z dostarczaniem wiadomości, użyj narzędzia do rozwiązywania problemów z FCM i przeczytaj ten post na blogu, aby poznać różne przyczyny, dla których możesz nie widzieć wiadomości. Możesz też sprawdzić panel stanu FCM, aby dowiedzieć się, czy nie występują przerwy w działaniu usługi FCM.

FCM udostępnia też 3 zestawy narzędzi, które pomagają uzyskać ogólny wgląd w skuteczność i strategię przesyłania wiadomości:

  • 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 Ustawienia > Integracje. Zbiorcze dane o wyświetlaniu nie wymagają do działania Google Analytics.

Pamiętaj, że raportowanie wielu statystyk na tej stronie może być opóźnione nawet o 24 godziny z powodu grupowania danych analitycznych.

Raporty Dostarczanie wiadomości

W konsoli Firebase otwórz DevOps & Engagement (DevOps i zaangażowanie) > Messaging (Komunikaty) > karta Reports (Raporty), aby wyświetlić te dane dotyczące wiadomości wysyłanych do pakietów FCM SDK na platformie Android lub Apple, w tym wiadomości wysyłanych za pomocą kreatora powiadomień i interfejsów API FCM:

  • Wysłane – wiadomość z danymi lub powiadomienie zostało dodane do kolejki dostarczania 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ł powiadomienie. 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óźnienia 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 poprawę skuteczności żądań wysyłania. Informacje o dostępności zakresów dat w raportach znajdziesz w artykule Oś czasu danych zbiorczych.

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

Jak są podzielone dane?

Dane o dostarczaniu są podzielone według aplikacji, daty i etykiety analitycznej. 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
    }
  }

Jak interpretować dane

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 diagnostyce na swoich urządzeniach.

Odsetek 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, upewnij się, że aplikacja obsługuje wywołania onDeletedMessages, i rozważ wysyłanie wiadomości zwijanych. 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. Sprawdzone metody znajdziesz w artykule Zarządzanie tokenami rejestracji FCM.

Wartości procentowe skutecznoś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ść delayedMessageThrottled wyraźnie wskazuje, że przekraczasz maksymalne limity na urządzenie i musisz dostosować częstotliwość wysyłania wiadomości.

Wartości procentowe statystyk wiadomości

Ten obiekt dostarcza 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 zawsze wyświetlasz powiadomienie, gdy wysyłana jest wiadomość o wysokim priorytecie. 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 wyświetlania trendów dotyczących przyczyn opóźnień lub odrzucania wiadomości podczas transportu.

W niektórych przypadkach te 2 zbiory danych mogą nie być dokładnie zgodne z tych powodów:

  • Zbiorcze dane obejmują tylko próbkę wszystkich wiadomości.
  • Dane zbiorcze są zaokrąglane.
  • Nie podajemy danych poniżej progu prywatności.
  • Brakuje części wyników wiadomości z powodu optymalizacji sposobu zarządzania dużym natężeniem ruchu.

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 od 9 do 15 stycznia, ale nie z 16 stycznia ani z późniejszych dni. Dodatkowo dane są dostarczane z możliwie największą dokładnością. W przypadku przerwy w dostępie do danych FCM będzie pracować nad rozwiązaniem problemu i nie uzupełni danych po jego rozwiązaniu. W przypadku większych przerw w działaniu 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 obejmują one jednak wszystkich scenariuszy wiadomości. Poniższe scenariusze to znane wyniki, które nie są odzwierciedlone 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 są przesyłane. 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.

Eksport danych 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:

  • Android 20.1.0 lub nowszy.
  • iOS 8.6.0 lub nowszy
  • Pakiet SDK Firebase dla aplikacji internetowych w wersji 12.14.0 lub nowszej

Aby rozpocząć, połącz projekt z BigQuery za pomocą konsoli Firebase:

  1. 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 Settings (Ustawienia) > karta Integrations (Integracje). Następnie w BigQuery kliknij Połącz.

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

  2. 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.

  • 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ć eksportowanie do BigQuery, odłącz projekt w konsoli Firebase.

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 powiadomień o alertach, 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 dostarczaniu powiadomień o alertach

Ponieważ tylko powiadomienia o alertach mogą aktywować rozszerzenia aplikacji usługi powiadomień, 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 i 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 go automatycznie na poziomie instancji aplikacji pozwala poprosić 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ć link FCM-BigQuery do projektu, jak opisano w artykule 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 dostawie 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ć

Pakiet SDK FCM dla sieci w wersji 12.14.0 lub nowszej umożliwia eksportowanie danych o wyświetlaniu. 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:

_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 ramach 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 – „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:
  • MESSAGE_ACCEPTED: wiadomość została odebrana przez serwer FCM, a żądanie jest prawidłowe;
  • MESSAGE_DELIVERED: wiadomość została dostarczona do pakietu FCM SDK aplikacji na urządzeniu. Domyślnie to pole nie jest propagowane. Aby je włączyć, postępuj zgodnie z instrukcjami podanymi w setDeliveryMetricsExportToBigQuery(boolean).
  • MISSING_REGISTRATIONS: żądanie zostało odrzucone z powodu braku rejestracji;
  • UNAUTHORIZED_REGISTRATION: wiadomość została odrzucona, ponieważ nadawca nie ma uprawnień do wysyłania wiadomości do rejestracji;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: podczas przetwarzania żądania wiadomości wystąpił nieokreślony błąd;
  • MISMATCH_SENDER_ID: żądanie wysłania wiadomości zostało odrzucone z powodu niezgodności między identyfikatorem nadawcy wysyłającego wiadomość a identyfikatorem zadeklarowanym dla punktu końcowego;
  • QUOTA_EXCEEDED: prośba o wysłanie wiadomości została odrzucona z powodu niewystarczającego limitu;
  • INVALID_REGISTRATION: żądanie wysłania wiadomości zostało odrzucone z powodu nieprawidłowej rejestracji;
  • INVALID_PACKAGE_NAME: prośba o wysłanie wiadomości została odrzucona 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, ponieważ ładunek przekracza 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 czasu TTL.
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;

Zliczanie 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 w ramach 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>;.

obliczyć czas trwania dystrybucji dla danego tematu lub danej 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;

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