İleti teslimini anlama

FCM, mesaj yayınlama hakkında bilgi edinmenize yardımcı olacak üç araç grubu sağlar:

  • Firebase konsol mesaj teslimi raporları
  • Firebase Cloud Messaging Data API'den alınan toplu Android SDK yayın metrikleri
  • Google BigQuery'ye kapsamlı veri aktarımı

Bu sayfada açıklanan raporlama araçlarının tümü için Google Analytics gereklidir gerekir. Google Analytics, projeniz için etkinleştirilmemişse bu adımları takip etmek için entegrasyonlar Firebase proje ayarlarınızın sekmesini açın.

Bu sayfadaki istatistiklerin çoğunun raporlanmasının, analiz verilerinin toplu olarak işlenmesi nedeniyle 24 saate kadar gecikmeye tabi olduğunu unutmayın.

Mesaj teslimi raporları

Raporlar Firebase konsolunda bulunan Android veya Apple platform FCM SDK'larına gönderilen mesajlarla ilgili aşağıdaki veriler Bildirimler oluşturucu ve FCM API'leri aracılığıyla gönderilenler de dahil olmak üzere:

  • Gönderildi — Veri mesajı veya bildirim mesajı şunun için sıraya alındı: veya APNs gibi üçüncü taraf bir hizmete başarıyla aktarılmış olmalıdır. teslimat için. Daha fazla bilgi için mesajın kullanım ömrü başlıklı makaleyi inceleyin.
  • Alındı (yalnızca Android cihazlarda kullanılabilir): Veri mesajı veya bildirim mesajı uygulama tarafından alındı. Bu veriler, alıcı Android cihazda FCM SDK 18.0.1 veya daha yeni bir sürüm yüklü olduğunda kullanılabilir.
  • Gösterim sayısı (yalnızca Android cihazlarda bildirim mesajları için kullanılabilir) — Uygulama şu anda cihazda gösterilirken bildirim ekranı arka planda çalışır.
  • Açılır: Kullanıcı bildirim mesajını açtı. Yalnızca uygulama arka plandayken alınan bildirimler için raporlanır.

Bu veriler, bildirim yükü olan tüm mesajlar için kullanılabilir ve tüm etiketli veri mesajları için de geçerlidir. Etiketler hakkında daha fazla bilgi edinmek için bkz. İletilere analiz etiketleri ekleme.

Mesaj raporlarını görüntülerken, CSV olarak dışa aktarma seçeneğiyle birlikte görüntülenen veriler için bir tarih aralığı belirleyebilirsiniz. Şu ölçütlere göre de filtreleme yapabilirsiniz:

  • Platform (iOS veya Android)
  • Uygulama
  • Özel analiz etiketleri

İletilere Analytics etiketleri ekleme

İletileri etiketlemek özel analizde çok yararlıdır. yayınlanma istatistiklerini etiketlere veya etiket gruplarına göre filtreleyebilirsiniz. Bir web sitesi için HTTP v1 API aracılığıyla gönderilen tüm iletilere etiket eklemek için fcmOptions.analyticsLabel alanı message nesnesinde veya platforma özgü AndroidFcmOptions veya ApnsFcmOptions alanlarını içerir.

Analytics etiketleri, ^[a-zA-Z0-9-_.~%]{1,50}$ biçiminde metin dizelerinden oluşur. Etiketler küçük ve büyük harfler, sayılar ve şu simgeler:

  • -
  • ~
  • %

Maksimum uzunluk 50 karakterdir. Günde en fazla 100 benzersiz etiket belirtebilirsiniz. Bu sınırın üzerinde etiket eklenen iletiler raporlanmaz.

Firebase konsolunun mesajlaşma Raporlar sekmesinde, listesi oluşturup filtre uygulamak için bunları tek tek veya kombinasyon halinde uygulayın gösterilen istatistikler.

FCM Data API aracılığıyla toplu teslim verileri

Firebase Cloud Messaging Data API, Android'i hedefleyen mesaj isteklerinin sonuçlarını anlamanıza yardımcı olur izin verir. API, tüm veriler genelinde birleştirilmiş veriler sunar. bir projede koleksiyonun etkin olduğu Android cihazlar. Bu raporda, gecikme olmadan teslim edilen mesajların yüzdesi ve Android Aktarım Katmanı'nda geciken veya bırakılan mesaj sayısıyla ilgili ayrıntılar yer alır. Bu verileri değerlendirmek, mesaj yayınlamayla ilgili genel trendleri ortaya çıkarabilir ve gönderme isteklerinizin performansını iyileştirmenin etkili yollarını bulmanıza yardımcı olabilir. Raporlardaki tarih aralığı müsaitlik durumu hakkında bilgi için Toplu veri zaman çizelgeleri başlıklı makaleyi inceleyin.

API, belirli bir uygulama için mevcut tüm verileri sağlar. Bkz. API referans belgeleri.

Verilerin dökümü nasıl?

Yayınlanma verileri; uygulama, tarih ve analiz etiketine göre ayrılır. API'ye yapılan bir çağrı döndürülür uygulama ve analiz etiketi kombinasyonlarının tüm verileri için geçerlidir. Örneğin, örnek, tek bir androidDeliveryData JSON nesnesi şöyle görünür:

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

Metrikleri Yorumlama

Yayınlama verileri, aşağıdaki metriklerin her birine uyan mesajların yüzdesini özetler. Tek bir mesajın birden fazla metriğe uyması mümkündür. Verileri toplama yöntemlerimizle ilgili sınırlamalar nedeniyle metrikleri birleştirdiğimiz ayrıntı düzeyi, Bazı mesaj sonuçları metriklerde hiç gösterilmese de Bu nedenle aşağıdaki yüzdelerin toplamı %100 olmaz.

Kabul Edilen Mesajları Sayma

Veri kümesine dahil edilen tek sayı, Android cihazlara teslim edilmek üzere FCM tarafından kabul edilen mesajların sayısıdır. Tüm yüzdeler bu değeri kullanır payda olarak kullanabilirsiniz. Bu sayının, cihazlarında kullanım ve teşhis bilgilerinin toplanmasını devre dışı bırakan kullanıcıları hedefleyen mesajları içermediğini unutmayın.

Mesaj Sonucu Yüzdeleri

Dahil edilen alanlar MessageOutcomePercents nesne, bu öğe hakkında netleştirmelerine yardımcı olur. Kategorilerin tümü birbirini hariç tutar. O da "İletilerim teslim ediliyor mu?" "Neden bu sorunun atlanacak mı?" diye soruyor.

Örneğin, droppedTooManyPendingMessages alanı için yüksek bir değer sinyale dayanıyor. Bu sinyal, uygulama örneklerinin daraltılamayan mesajlar FCM adresinin bekleyen 100 mesaj sınırını aşıyor. Bu sorunu azaltmak için uygulamanızın onDeletedMessages numaralı telefonlara gelen aramaları işlediğinden emin olun ve daraltılabilir mesajlar göndermeyi düşünün. Benzer şekilde, droppedDeviceInactive için yüksek yüzdeler, sunucunuzdaki kayıt jetonlarını güncelleme, eski jetonları kaldırma ve konuların aboneliğinden çıkma sinyali olabilir. Bu alandaki en iyi uygulamalar için FCM kayıt jetonlarını yönetme başlıklı makaleyi inceleyin.

Yayın Performansı Yüzdeleri

DeliveryPerformancePercents'daki alanlar nesne başarıyla teslim edilen iletiler hakkında bilgi sağlar. Google "İletilerim gecikti mi?" ve "İletiler neden gecikiyor?" Örneğin, delayedMessageThrottled için yüksek bir değer, cihaz başına maksimum sınırları aştığınızı açıkça gösterir ve mesaj gönderme hızınızı ayarlamanız gerekir.

Mesaj Analizi Yüzdeleri

Bu nesne, tüm ileti gönderme işlemleri hakkında ek bilgiler sağlar. priorityLowered alanı, önceliği HIGH'ten NORMAL'e düşürülen kabul edilen iletilerin yüzdesini ifade eder. Bu değer yüksekse daha az yüksek öncelikli mesaj göndermeyi deneyin veya yüksek öncelikli bir mesaj gönderildiğinde her zaman bildirim gösterin. Daha fazla bilgi için ileti önceliğiyle ilgili dokümanlarımıza göz atın.

Bu veriler BigQuery'ye aktarılan verilerden nasıl farklıdır?

BigQuery Export, FCM arka ucunun iletiyi kabul etmesi ve cihazdaki SDK'da ileti yayınlamasıyla ilgili ayrı ileti günlükleri sağlar (FCM Mimarisi'nin 2. ve 4. Adımları). Bu veriler, mesajların kabul edilip teslim edildiğinden emin olmak için kullanışlıdır. Bir sonraki bölümde BigQuery verilerini dışa aktarma hakkında daha fazla bilgi edinin.

Buna karşılık Firebase Cloud Messaging Data API, özellikle Android Aktarım Katmanı'nda (veya FCM Mimarisi'nin 3. Adımı'nda) neler olduğuyla ilgili toplu ayrıntılar sağlar. Bu veriler, özellikle de müşteri ilişkileri yönetimi FCM arka uçlarından Android SDK'ya göndermemizi sağlar. Özellikle proje başlatma belgenize ve iletilerin bu aktarım sırasında neden geciktiğine veya atıldığına ilişkin trendleri gösteriyor.

Bazı durumlarda, iki veri kümesinin aşağıdakiler nedeniyle tam olarak eşleşmemesi mümkündür:

  • Toplu metrikler tüm mesajların yalnızca bir kısmını örnek olarak alır
  • Toplu metrikler yuvarlanır
  • Gizlilik eşiğinin altındaki metrikleri sunmayız
  • E-postalarda yaptığımız optimizasyonlar nedeniyle yönetmek demektir.

API'nin sınırlamaları

Toplu Veri Zaman Çizelgeleri

API, 7 günlük geçmiş verileri döndürür ancak bu API tarafından döndürülen veriler 5 güne kadar gecikmeli olur. Örneğin, 20 Ocak'ta 9 Ocak - 15 Ocak'a ait veriler kullanılabilir olacak ama Ocak için geçerli değil 16. veya sonraki bir ay. Ayrıca veriler, mümkün olduğunca sağlanır. Veri kesintisi durumunda FCM, ileriye dönük olarak düzeltme yapmaya çalışır ve sorun düzeltildikten sonra verileri doldurmaz. Daha büyük kesintilerde veriler bir hafta veya daha uzun süre kullanılamayabilir.

Veri Kapsamı

Firebase Cloud Messaging Data API tarafından sağlanan metrikler, mesaj yayınlamayla ilgili genel eğilimler hakkında bilgi sağlamak için tasarlanmıştır. Ancak bu yöntemler tüm mesaj senaryolarını %100 kapsamaz. Aşağıdaki senaryolarda, metriklerde yansıtılmayan bilinen sonuçlar vardır.

Süresi dolan iletiler

Geçerlilik süresi (TTL), belirtilen günlük tarihinin bitiminden sonra sona ererse mesaj bu tarihte droppedTtlExpired olarak sayılmaz.

Etkin olmayan cihazlara gönderilen mesajlar

Etkin olmayan cihazlara gönderilen mesajlar, hangi veri yolunu kullandıklarına bağlı olarak veri kümesinde gösterilebilir veya gösterilmeyebilir. Bu durum, ekip arkadaşlarınızın rolleri ve görevlerini droppedDeviceInactive ve pending alanları için geçerlidir.

Belirli kullanıcı tercihlerine sahip cihazlara gönderilen mesajlar

Cihazlarında kullanım ve teşhis bilgilerinin toplanmasını devre dışı bırakan kullanıcıların mesajları, tercihlerine uygun olarak sayıma dahil edilmez.

Yuvarlama ve minimum değerler

FCM, hacimlerin yeterince büyük olmadığı sayıları kasıtlı olarak yuvarlar ve hariç tutar.

BigQuery verilerini dışa aktarma

Daha ayrıntılı analiz için mesaj verilerinizi BigQuery'ye aktarabilirsiniz. BigQuery, BigQuery SQL'i kullanarak verileri analiz etmenize, başka bir bulut sağlayıcıya aktarmanıza veya özel makine öğrenimi modelleriniz için kullanmanıza olanak tanır. BigQuery'ye aktarma mesajlar için kullanılabilir tüm verileri içerir mesaj türünden ya da mesajın API üzerinden mi yoksa bildirim oluşturucuyu açar.

Aşağıdaki FCM SDK minimum sürümlerine sahip cihazlara gönderilen mesajlar için uygulamanızın mesaj yayınlama verilerinin dışa aktarılmasını etkinleştirme seçeneğiniz de vardır:

  • Android 20.1.0 veya sonraki sürümler.
  • iOS 8.6.0 veya sonraki sürümler
  • Firebase Web SDK 9.0.0 veya sonraki sürümler

Veri dışa aktarımını etkinleştirmeyle ilgili ayrıntıları aşağıda bulabilirsiniz. Android ve iOS

Başlamak için projenizi BigQuery'ye bağlayın:

  1. Aşağıdaki seçeneklerden birini belirleyin:

    • Bildirim oluşturucu, Ardından sayfanın en altında BigQuery'ye Eriş'i tıklayın.

    • Şuradan: Entegrasyonlar Firebase konsolunda, BigQuery'deki Bağla'yı tıklayın kartını inceleyebilirsiniz.

      Bu sayfada, projedeki tüm FCM etkin uygulamaların FCM dışa aktarma seçenekleri gösterilir.

  2. BigQuery'yi etkinleştirmek için ekrandaki talimatları uygulayın.

Firebase'i BigQuery'ye bağlama başlıklı makaleyi inceleyin. konulu videomuzu izleyin.

Cloud Messaging için BigQuery dışa aktarmayı etkinleştirdiğinizde:

  • Firebase, BigQuery'ye verilerinizi aktarır. Dışa aktarma işlemi için verilerin ilk dağıtılmasının tamamlanmasının 48 saati bulabileceğini unutmayın.

  • Veri kümesi oluşturulduktan sonra konum değiştirilemez, ancak veri kümesini farklı bir konuma kopyalayabilirsiniz ya da veri kümesini farklı bir konuma manuel olarak taşıyın (yeniden oluşturun). Öğrenmek için daha fazla bilgi için Veri kümesi konumunu değiştirme bölümüne bakın.

  • Firebase, Firebase projenizden Firebase'e veri aktarıp BigQuery Bu günlük dışa aktarma işlemleri Pasifik Saati'ne göre 04:00'te başlar ve genellikle 24 saat içinde tamamlanır.

  • Varsayılan olarak, projenizdeki tüm uygulamalar BigQuery'ye bağlanır ve daha sonra projeye eklediğiniz tüm uygulamalar otomatik olarak BigQuery'ye bağlanır. Şunları yapabilirsiniz: hangi uygulamaların veri göndereceğini yönetin.

BigQuery dışa aktarma özelliğini devre dışı bırakmak için Firebase konsolunda projenizin bağlantısını kaldırın.

Mesaj yayınlama verilerini dışa aktarmayı etkinleştirme

FCM SDK 8.6.0 veya sonraki sürümleri çalıştıran iOS cihazlarda uygulamanın mesaj yayınlama verilerinin dışa aktarılması etkinleştirilebilir. FCM. hem uyarı hem de arka plan bildirimleri için veri dışa aktarmayı destekler. Bu seçenekleri etkinleştirmeden önce FCM-Şurada açıklandığı gibi projeniz için BigQuery bağlantısı: BigQuery verilerini dışa aktarma

Uyarı bildirimleri için yayınlama verilerini dışa aktarmayı etkinleştirme

Bildirim hizmeti uygulama uzantılarını yalnızca uyarı bildirimleri tetikleyebileceğinden, görüntülü mesaj takibini etkinleştirmek için uygulamanıza bir bildirim hizmeti uzantısı eklemeniz ve bu API'yi bir hizmet uzantısı içinde çağırmanız gerekir. Görüntüleyin Apple'ın Yeni Gönderilen Bildirimlerde İçeriği Değiştirme ile ilgili dokümanları.

Alınan her bildirim için aşağıdaki çağrı yapılmalıdır:

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

HTTP v1 API kullanarak gönderme istekleri oluşturuyorsanız mutable-content = 1 öğesini yük nesnesi.

Arka plan bildirimleri için yayınlama verilerini dışa aktarmayı etkinleştirme

Uygulama ön veya arka plandayken alınan arka plan mesajlarında ana uygulamanın veri mesajı işleyicisinin içinden Data Export API'yi çağırabilirsiniz. Bu arama, alınan her bildirim için yapılmalıdır:

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

BigQuery'ye hangi veriler aktarılır?

Eski jetonları veya etkin olmayan kayıtları hedeflemenin bu istatistiklerin bazılarını şişirebileceğini unutmayın.

Dışa aktarılan tablonun şeması:

_PARTITIONTIME ZAMAN DAMGASI Bu sözde sütun, verilerin yüklendiği günün başlangıcına ait bir zaman damgasını (UTC'de) içerir. YYYYAAGG bölümü için bu sözde sütun, TIMESTAMP("YYYY-AA-GG") değerini içerir.
event_timestamp ZAMAN DAMGASI Sunucu tarafından kaydedilen etkinlik zaman damgası
proje_numarası TAM SAYI Proje numarası, mesajı gönderen projeyi tanımlar
message_id DİZE İleti kimliği bir iletiyi tanımlar. Uygulama kimliğinden oluşturulur ve zaman damgası, ileti kimliği ise bazı durumlarda genel olarak benzersiz olmayabilir.
instance_id DİZE Mesajın gönderildiği uygulamanın benzersiz kimliği (varsa). Örnek kimliği veya Firebase yükleme kimliği olabilir.
mesaj_türü DİZE Mesajın türü. Bildirim mesajı veya Veri mesajı olabilir. Konu, bir konu veya kampanya gönderimi için orijinal mesajı tanımlamak için kullanılır. Sonraki mesajlar bildirim veya veri mesajıdır.
sdk_platform DİZE Alıcı uygulamasının platformu
uygulama_adı DİZE Android uygulamaları için paket adı veya iOS uygulamaları için paket kimliği
daraltma_anahtarı DİZE Daraltma anahtarı, daraltılabilecek bir ileti grubunu tanımlar. Bir cihaz bağlı değilse yalnızca belirli bir daraltma anahtarına sahip son mesaj, nihai teslimat için sıraya alınır.
öncelik TAM SAYI İletinin önceliği. Geçerli değerler "normal" ve "yüksek"tir. iOS'te bunlar APN'lerin 5 ve 10. önceliklerine karşılık gelir.
ttl TAM SAYI Bu parametre, cihaz çevrimdışıysa mesajın FCM depolama alanında ne kadar süre (saniye cinsinden) tutulacağını belirtir.
konu DİZE İletinin gönderildiği konunun adı (varsa)
bulk_id TAM SAYI Toplu kimlik, belirli bir konuya gönderilen iletiler gibi ilgili bir ileti grubunu tanımlar.
etkinlik DİZE Etkinliğin türü. Olası değerler:
  • MESSAGE_ACCEPTED: İleti, FCM sunucusu tarafından alındı ve istek geçerlidir;
  • MESSAGE_DELIVERED: Mesaj, uygulamanın FCM SDK'sına şu tarihte teslim edildi: için geçerlidir. Varsayılan olarak bu alan dağıtılmaz. Etkinleştirmek için şu adımları uygulayın: setDeliveryMetricsExportToBigQuery(boolean) adresindeki talimatlara bakın.
  • MISSING_REGISTRATIONS: istek eksik bir veri nedeniyle reddedildi tescil;
  • UNAUTHORIZED_REGISTRATION: Gönderen, bu nedenle kayda gönderme yetkisine sahip olmadığını;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: mesaj isteğini işleme koymalıdır;
  • MISMATCH_SENDER_ID: ileti gönderme isteği iletiyi gönderen kimliği ile uç nokta;
  • QUOTA_EXCEEDED: Mesaj gönderme isteği şu nedenle reddedildi: yetersiz kota;
  • INVALID_REGISTRATION: mesaj gönderme isteği geçersiz kayıt;
  • INVALID_PACKAGE_NAME: Mesaj gönderme isteği, geçersiz bir paket adı nedeniyle reddedildi;
  • INVALID_APNS_CREDENTIAL: mesaj gönderme isteği şu nedenle reddedildi: geçersiz bir APNS sertifikası;
  • INVALID_PARAMETERS: Mesaj gönderme isteği, geçersiz parametreler nedeniyle reddedildi;
  • PAYLOAD_TOO_LARGE: ileti gönderme isteği Yük sınırın üzerinde olması;
  • AUTHENTICATION_ERROR: ileti gönderme isteği kimlik doğrulama hatası (mesajı göndermek için kullanılan API Anahtarını kontrol edin);
  • INVALID_TTL: ileti gönderme isteği geçersiz bir TTL.
analytics_label [Analytics_etiketi] DİZE HTTP v1 API ile, mesajı analiz amacıyla işaretlemek için mesaj gönderilirken analiz etiketi ayarlanabilir.

Dışa aktarılan verilerle neler yapabilirsiniz?

Aşağıdaki bölümlerde, BigQuery'de çalıştırabileceğiniz sorgu örnekleri sunulmaktadır ve dışa aktarılan FCM verilerinizle karşılaştırabilirsiniz.

Gönderilen mesajları uygulamaya göre sayma

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;

Mesajların hedeflediği benzersiz uygulama örneklerini sayın

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

Gönderilen bildirim mesajlarının sayısını öğrenin

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

Gönderilen veri iletilerinin sayısı

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

Bir konuya veya kampanyaya gönderilen mesajları sayma

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

Belirli bir konuya gönderilen iletiye ilişkin etkinlikleri izlemek için bu sorguyu şu şekilde değiştirin: AND message_id != '' değerini AND message_id = <your message id>; ile değiştirin.

Belirli bir konu veya kampanya için dağılım süresini hesaplama

Dağılma başlangıç zamanı, orijinal isteğin alındığı ve bitiş tarihinin de saat, tek bir örneği hedefleyen son tek mesajın zamanıdır ile başlar.

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;

Teslim edilen iletilerin sayısı

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;

Belirli bir ileti kimliği ve örnek kimliği için tüm etkinlikleri izleme

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;

Belirli bir mesaj kimliği ve örnek kimliği için hesaplama gecikmesi

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;