İ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 elde edilen toplu Android SDK yayınlama metrikleri
  • Google BigQuery'ye kapsamlı veri aktarımı

Bu sayfada açıklanan raporlama araçlarının tümü, Google Analytics çalıştırılabilmesi için gereklidir. Projenizde Google Analytics etkin değilse Firebase proje ayarlarınızın entegrasyonlar sekmesinden ayarlayabilirsiniz.

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ı

Firebase konsolundaki Raporlar sekmesinde, Bildirimler derleyicisi ve FCM API'leri aracılığıyla gönderilenler de dahil olmak üzere Android veya Apple platform FCM SDK'larına gönderilen mesajlarla ilgili aşağıdaki verileri görüntüleyebilirsiniz:

  • Gönderildi: Veri mesajı veya bildirim mesajı, teslimat için sıraya alındı ya da teslimat için APN'ler gibi bir üçüncü taraf hizmetine başarıyla iletildi. 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 sonraki bir sürüm yüklü olduğunda kullanılabilir.
  • Gösterimler (yalnızca Android cihazlardaki bildirim mesajları için kullanılabilir): Uygulama arka plandayken ekran bildirimi cihazda görüntülenmiştir.
  • 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ü içeren tüm mesajlar ve tüm etiketlenmiş veri mesajları için kullanılabilir. Etiketler hakkında daha fazla bilgi edinmek için Mesajlara analiz etiketleri ekleme başlıklı makaleyi inceleyin.

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

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

Mesajlara analiz etiketleri ekleme

İletileri etiketlemek, teslim istatistiklerini etiketlere veya etiket gruplarına göre filtrelemenize olanak tanıyan özel analiz için çok kullanışlıdır. Mesaj nesnesinde veya platforma özgü AndroidFcmOptions ya da ApnsFcmOptions alanlarında fcmOptions.analyticsLabel alanını ayarlayarak HTTP v1 API aracılığıyla gönderilen tüm iletilere etiket ekleyebilirsiniz.

Analytics etiketleri, ^[a-zA-Z0-9-_.~%]{1,50}$ biçiminde metin dizelerinden oluşur. Etiketler küçük ve büyük harf, sayı ve aşağıdaki sembolleri içerebilir:

  • -
  • ~
  • %

Uzunluk 50 karakteri aşamaz. Günde en fazla 100 benzersiz etiket belirtebilirsiniz. Bu sınırın üzerinde etiket eklenen iletiler raporlanmaz.

Firebase Console mesajlaşma Raporlar sekmesinde, mevcut tüm etiketlerin listesinde arama yapabilir ve gösterilen istatistikleri filtrelemek için etiketleri tek tek veya birlikte uygulayabilirsiniz.

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

Firebase Cloud Messaging Data API, Android uygulamalarına hedeflenen mesaj isteklerinin sonuçlarını anlamanıza yardımcı olabilecek bilgileri almanızı sağlar. API, bir projedeki veri toplama özellikli tüm Android cihazlarda toplanmış veriler sağlar. Bu bilgiler arasında, gecikme olmadan teslim edilen mesajların yüzdesi ve Android Taşıma Katmanı'nda geciken veya bırakılan mesaj sayısı 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 edinmek için Toplu veri zaman çizelgeleri başlıklı makaleyi inceleyin.

API, belirli bir uygulama için kullanılabilen tüm verileri sağlar. API referans dokümanlarına bakın.

Veriler nasıl ayrılır?

Yayınlanma verileri; uygulama, tarih ve analiz etiketine göre ayrılır. API'ye yapılan bir çağrı, her tarih, uygulama ve analiz etiketi kombinasyonu için veri döndürür. Örneğin, tek bir androidDeliveryData JSON nesnesi şu şekilde 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 birden çok metriğe sığabilir. Verileri toplama şeklimizdeki ve metrikleri birleştirdiğimiz ayrıntı düzeyindeki sınırlamalar nedeniyle, bazı mesaj sonuçları metriklerde hiç temsil edilmez. 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, payda olarak bu değeri kullanır. 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

MessageOutcomePercents nesnesine dahil edilen alanlar, ileti isteklerinin sonuçları hakkında bilgi sağlar. Bu kategorilerin tümü birlikte kullanılamaz. "İletilerim teslim ediliyor mu?" ve "Mesajların atılmasının nedeni nedir?" gibi soruları yanıtlayabilir.

Örneğin, droppedTooManyPendingMessages alanının yüksek bir değeri, uygulama örneklerinin FCM'ın bekleyen 100 mesaj sınırını aşan miktarda daraltılamayan mesaj aldığını gösterebilir. 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üncellemeye, eski jetonları kaldırmaya ve konulardaki aboneliklerini iptal etmeye yönelik bir sinyal 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 nesnesinde yer alan alanlar, başarıyla teslim edilen iletiler hakkında bilgi sağlar. "Mesajlarım gecikti mi?" ve "Mesajlar neden gecikiyor?" gibi soruları yanıtlayabilir. Ö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 mesaj gönderimleri hakkında ek bilgi sağlar. priorityLowered alanı, önceliği HIGH'ten NORMAL'ye 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 yararlı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 mesajların FCM arka uçlarından Android SDK'ya teslim edilmesiyle ilgili analizler sağlar. Bu rapor, iletilerin bu aktarım sırasında neden geciktiği veya neden bırakıldığıyla ilgili trendleri göstermek için özellikle yararlıdır.

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
  • Büyük hacimli trafiği yönetme şeklimizdeki optimizasyonlar nedeniyle ileti sonuçlarının bir kısmı eksiktir.

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 arasındaki veriler kullanılabilir ancak 16 Ocak veya sonraki tarihlere ait veriler kullanılamaz. Ayrıca, veriler en iyi şekilde sağlanmıştı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, metriklere yansıtılmayan bilinen sonuçlar yer alır.

Süresi dolmuş iletiler

Geçerlilik süresi (TTL), belirtilen günlük tarihinin sonundan 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, droppedDeviceInactive ve pending alanlarında bazı yanlış sayımlara neden olabilir.

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ığı durumlarda sayıları kasıtlı olarak yuvarlar ve hariç tutar.

BigQuery verilerini dışa aktarma

Daha fazla 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 işlemi, mesaj türü veya mesajın API ya da Notifications oluşturucu aracılığıyla gönderilmesinden bağımsız olarak mesajlar için mevcut tüm verileri içerir.

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 üstü
  • Firebase Web SDK'sı 9.0.0 veya üstü

Android ve iOS için veri dışa aktarma özelliğini etkinleştirmeyle ilgili ayrıntıları aşağıda bulabilirsiniz.

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

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

    • Bildirimler derleyicisini açın, ardından sayfanın alt kısmındaki BigQuery'ye eriş'i tıklayın.

    • Firebase konsolundaki Entegrasyonlar sayfasında, BigQuery kartındaki Bağla'yı tıklayın.

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

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

Daha fazla bilgi için Firebase'i BigQuery'ye bağlama başlıklı makaleyi inceleyin.

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 konumu değiştirilemez ancak veri kümesini farklı bir konuma kopyalayabilir veya manuel olarak farklı bir konuma taşıyabilir (yeniden oluşturabilirsiniz). Daha fazla bilgi için Veri kümesi konumunu değiştirme başlıklı makaleyi inceleyin.

  • Firebase, Firebase projenizdeki verilerinizin BigQuery ile düzenli olarak senkronize edilmesini sağlar. 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. Hangi uygulamaların veri göndereceğini yönetebilirsiniz.

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 20.1.0 veya sonraki sürümleri çalıştıran Android cihazlar, uygulamalarının mesaj yayınlama verilerini dışa aktarma özelliğini etkinleştirebilir. Veri dışa aktarma özelliği, uygulama düzeyinde varsayılan olarak devre dışıdır. Bu özelliği uygulama örneği düzeyinde programatik olarak etkinleştirmek, son kullanıcılardan mesaj yayınlama verilerini analiz etme izni istemenize olanak tanır (önerilir). Her ikisi de ayarlandığında uygulama örneği düzeyindeki değer, uygulama düzeyindeki değeri geçersiz kılar.

Bu seçenekleri etkinleştirmeden önce, BigQuery veri dışa aktarma bölümünde açıklandığı gibi projeniz için FCM-BigQuery bağlantısını oluşturmanız gerekir.

Uygulama örnekleri için yayın verilerini dışa aktarmayı etkinleştirme

Çoğu durumda, mesaj yayınlama verisi dışa aktarma özelliğini yalnızca uygulama örneği düzeyinde etkinleştirmenizi ve uygulama düzeyinde devre dışı bırakmanızı öneririz.

 FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true)

Uygulama için teslimat verilerini dışa aktarmayı etkinleştirme

Dışa aktarma özelliğini uygulama düzeyinde etkinleştirmeyi tercih ediyorsanız setDeliveryMetricsExportToBigQuery yöntemini çağırmadığınızdan ve uygulama manifest dosyanızdaki uygulama nesnesine aşağıdaki özelliği eklediğinizden emin olun:

<application>
  <meta-data android:name="delivery_metrics_exported_to_big_query_enabled"
      android:value="true" />
</application>

Hangi veriler BigQuery'ye aktarılır?

Eski jetonları veya etkin olmayan kayıtları hedeflemenin bu istatistiklerin bazılarını artırabileceğ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ği ve zaman damgasından oluşturulan ileti kimliği, bazı durumlarda dünya genelinde 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.
message_type 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
collapse_key DİZE Daraltma anahtarı, daraltılabilen 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 5 ve 10
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 mesaj 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, cihazdaki uygulamanın FCM SDK'sına teslim edildi. Bu alan varsayılan olarak dağıtılmaz. Etkinleştirmek için setDeliveryMetricsExportToBigQuery(boolean) bölümündeki talimatları uygulayın.
  • MISSING_REGISTRATIONS: Kayıt eksik olduğu için istek reddedildi;
  • UNAUTHORIZED_REGISTRATION: Gönderenin kayıt için gönderme yetkisi olmadığı için ileti reddedildi;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: Mesaj isteği işlenirken belirtilmemiş bir hata oluştu;
  • MISMATCH_SENDER_ID: Mesaj gönderme isteği, mesajı gönderen gönderen kimliği ile uç nokta için bildirilen gönderen kimliği arasındaki uyuşmazlık nedeniyle reddedildi;
  • QUOTA_EXCEEDED: Mesaj gönderme isteği, yetersiz kota nedeniyle reddedildi;
  • INVALID_REGISTRATION: Mesaj gönderme isteği, geçersiz kayıt nedeniyle reddedildi;
  • INVALID_PACKAGE_NAME: Mesaj gönderme isteği, geçersiz bir paket adı nedeniyle reddedildi;
  • INVALID_APNS_CREDENTIAL: Mesaj gönderme isteği, geçersiz bir APNS sertifikası nedeniyle reddedildi;
  • INVALID_PARAMETERS: Mesaj gönderme isteği, geçersiz parametreler nedeniyle reddedildi;
  • PAYLOAD_TOO_LARGE: İleti gönderme isteği, sınırdan daha büyük bir yük nedeniyle reddedildi;
  • AUTHENTICATION_ERROR: Mesaj gönderme isteği, kimlik doğrulama hatası nedeniyle reddedildi (mesaj göndermek için kullanılan API anahtarını kontrol edin);
  • INVALID_TTL: Mesaj gönderme isteği, geçersiz bir TTL nedeniyle reddedildi.
analytics_label 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, aktarılan FCM verilerinizle BigQuery'de çalıştırabileceğiniz sorgu örnekleri verilmiştir.

Gönderilen mesajları uygulamaya göre sayın

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 tarafından hedeflenen benzersiz uygulama örneklerini sayma

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ı sayma

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 mesajın etkinliklerini izlemek için bu sorguyu AND message_id != '' yerine AND message_id = <your message id>; ile değiştirin.

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

Yayılma başlangıç zamanı, orijinal isteğin alındığı zamandır ve bitiş zamanı, tek bir örneği hedefleyen son tek mesajın oluşturulduğu zamandır.

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 yüzdesini sayma

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 ileti kimliği ve örnek kimliği için gecikmeyi hesaplama

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;