İleti teslimini anlama

FCM, mesaj teslimiyle ilgili bilgi edinmenize yardımcı olacak üç araç seti sunar:

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

Bu sayfada açıklanan raporlama araçlarının tümünün çalışabilmesi için Google Analytics'e ihtiyaç vardır. Projenizde Google Analytics etkinleştirilmemişse Firebase proje ayarlarınızın entegrasyonlar sekmesinden Google Analytics'i kurabilirsiniz.

Analiz verilerinin toplu olarak işlenmesi nedeniyle, bu sayfadaki istatistiklerin birçoğunun raporlanmasında 24 saate varan gecikmeler olabileceğini unutmayın.

İleti teslimi raporları

Firebase konsolundaki Raporlar sekmesinde, Notifications oluşturucu ve FCM API'leri aracılığıyla gönderilenler de dahil olmak üzere Android veya Apple platformu FCM SDK'larına gönderilen mesajlar için aşağıdaki verileri görüntüleyebilirsiniz:

  • Göndermeler: Veri mesajı veya bildirim mesajı teslim edilmek üzere sıraya alınmıştır veya teslim edilmek üzere APN'ler gibi bir üçüncü taraf hizmetine başarıyla iletir. Daha fazla bilgi için bir mesajın ömrü bölümüne bakın.
  • 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 cihazlarda bildirim mesajları için kullanılabilir): Uygulama arka plandayken cihazda görüntü bildirimi gösterilmiştir.
  • Aç - Kullanıcı, bildirim mesajını açmıştır. Yalnızca uygulama arka plandayken alınan bildirimler için raporlanır.

Bu veriler, bildirim yükü olan tüm mesajlar ve etiketli veri mesajları için kullanılabilir. Etiketler hakkında daha fazla bilgi edinmek için İletilere analiz etiketleri ekleme bölümüne bakın.

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

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

İletilere Analytics etiketleri ekleme

İletileri etiketlemek, özel analiz için çok kullanışlıdır. Bu sayede, gönderme istatistiklerini etiketlere veya etiket gruplarına göre filtreleyebilirsiniz. message nesnesinde fcmOptions.analyticsLabel alanını ayarlayarak veya platforma özgü AndroidFcmOptions ya da ApnsFcmOptions alanlarını ayarlayarak HTTP v1 API aracılığıyla gönderilen tüm mesajlara etiket ekleyebilirsiniz.

Analytics etiketleri, ^[a-zA-Z0-9-_.~%]{1,50}$ biçimindeki metin dizeleridir. Etiketler küçük ve büyük harfler, sayılar ve aşağıdaki simgeleri içerebilir:

  • -
  • ~
  • %

Maksimum uzunluk 50 karakterdir. Günde en fazla 100 benzersiz etiket belirtebilirsiniz. Bu sınırı aşan etiketlere sahip iletiler raporlanmaz.

Firebase konsolunun mesajlaşma Raporlar sekmesinde, mevcut tüm etiketlerin bulunduğu bir listede arama yapabilir ve gösterilen istatistikleri filtrelemek için etiketleri tek tek veya kombinasyon halinde 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 projede veri toplama özelliğinin etkin olduğu tüm Android cihazlardan birleştirilmiş 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 verilerin değerlendirilmesi, mesaj teslimindeki geniş trendleri ortaya çıkarabilir ve gönderme isteklerinizin performansını iyileştirmenin etkili yollarını bulmanıza yardımcı olabilir. Raporlardaki tarih aralığı kullanılabilirliği hakkında bilgi için Toplu veri zaman çizelgeleri konusuna bakın.

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

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

Teslim verileri, aşağıdaki metriklerin her birine uyan mesajların yüzdesini gösterir. Tek bir mesaj birden çok metriğe sığabilir. Verileri toplama şeklimizle ilgili sınırlamalar ve metrikleri topladığımız ayrıntı düzeyi nedeniyle bazı mesaj sonuçları metriklerde hiç temsil edilmez. Bu nedenle aşağıdaki yüzdelerin toplamı %100 olmaz.

Kabul Edilen İletilerin Sayısı

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

Mesaj Sonucu Yüzdeleri

MessageOutcomePercents nesnesinin içerdiği alanlar, mesaj isteklerinin sonuçları hakkında bilgi sağlar. Bu kategorilerin tümü birlikte kullanılamaz. "İletilerim teslim ediliyor mu?" ve "İletilerimin kaybolmasının nedeni ne?" gibi soruları yanıtlayabilir.

Örneğin, droppedTooManyPendingMessages alanı için yüksek bir değer, uygulama örneklerinin daraltılamayan mesaj hacminin, FCM'nin bekleyen 100 mesaj sınırını aştığına dair sinyal alabilir. Bu sorunu azaltmak için uygulamanızın onDeletedMessages'e yapılan çağrıları işlediğinden emin olun ve daraltılabilir mesajlar gönderin. Benzer şekilde, droppedDeviceInactive için yüksek yüzdeler, sunucunuzdaki kayıt jetonlarını güncellemeye, eski jetonları kaldırmaya ve konulardaki e-posta aboneliklerini iptal etmeye yönelik bir sinyal olabilir. Bu alandaki en iyi uygulamalar için FCM kayıt jetonlarını yönetme bölümüne bakın.

Yayın Performansı Yüzdeleri

DeliveryPerformancePercents nesnesindeki alanlar, başarıyla teslim edilen iletiler hakkında bilgi sağlar. "İletilerim gecikti mi?" ve "İletiler 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 belirtir 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ı, HIGH olan önceliği NORMAL değerine düşürülmüş, kabul edilmiş mesajların yüzdesini ifade eder. Bu değer yüksekse daha az sayıda yüksek öncelikli mesaj göndermeyi deneyin veya yüksek öncelikli bir mesaj gönderildiğinde her zaman bildirim gösterildiğinden emin olun. Daha fazla bilgi için mesaj önceliğiyle ilgili dokümanlarımıza göz atın

Bu verilerin BigQuery'ye aktarılan verilerden farkı nedir?

BigQuery Export, FCM arka ucu tarafından mesaj kabulü ve cihazdaki SDK'da mesaj teslimi hakkında bağımsız mesaj günlükleri sunar (FCM Mimarisinin 2. ve 4. adımları). Bu veriler, tek tek mesajların kabul edilip teslim edilmesini sağlamak için yararlıdır. Bir sonraki bölümde BigQuery verilerini dışa aktarma hakkında daha fazla bilgi edinebilirsiniz.

Buna karşılık Firebase Cloud Messaging Data API, özellikle Android Taşıma 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. Özellikle iletilerin bu aktarım sırasında neden geciktiği veya atıldığıyla ilgili trendleri göstermek açısından kullanışlıdır.

Bazı durumlarda, aşağıdaki nedenlerle iki veri kümesi tam olarak eşleşmeyebilir:

  • 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
  • Yüksek hacimli trafiği yönetme biçimimize yönelik optimizasyonlar nedeniyle mesaj sonuçlarının bir kısmı eksik.

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 gecikir. Örneğin, 20 Ocak'ta, 9 Ocak-15 Ocak arasındaki veriler kullanılabilir olacaktır. Ancak 16 Ocak veya sonrası için geçerli değildir. Ayrıca, veriler en iyi şekilde sağlanmıştır. Veri kesintisi durumunda FCM, sorunu düzeltmek için çalışır ve sorun çözüldükten 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 metriklerin amacı, geniş mesaj teslimi trendleri hakkında bilgi sağlamaktır. Ancak, tüm mesaj senaryolarını% 100 kapsamaz. Aşağıdaki senaryolarda, metriklere yansıtılmayan bilinen sonuçlar yer alı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 mesajlar

Etkin olmayan cihazlara gönderilen mesajlar, kullandıkları veri yoluna bağlı olarak veri kümesinde görünebilir veya görünmeyebilir. Bu durum, droppedDeviceInactive ve pending alanlarında yanlış sayıma yol açabilir.

Belirli kullanıcı tercihlerine sahip cihazlara mesajlar

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

Yuvarlama ve Minimum Değerler

FCM, hacimlerin yeterince yüksek 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, verileri BigQuery SQL kullanarak analiz etmenize, başka bir bulut sağlayıcıya aktarmanıza veya özel ML modellerinizde kullanmak istediğiniz verileri kullanmanıza olanak tanır. BigQuery'ye aktarma işlemi, mesaj türüne veya mesajın API ya da Notifications oluşturucu aracılığıyla gönderilmesine bakılmaksızın, mesajlar için mevcut tüm verileri içerir.

Aşağıdaki FCM SDK minimum sürümlerine sahip cihazlara gönderilen mesajlarda, uygulamanız için mesaj teslimi verilerinin dışa aktarılmasını etkinleştirebilirsiniz:

  • 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

Android ve iOS için veri dışa aktarmayı etkinleştirme hakkında ayrıntılı bilgiyi aşağıda bulabilirsiniz.

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

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

    • Bildirim oluşturucuyu açın, ardından sayfanın alt kısmında BigQuery'ye Erişin'i tıklayın.

    • Firebase konsolundaki Entegrasyonlar sayfasında, BigQuery kartında 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 verilerini dışa aktarmayı etkinleştirdiğinizde:

  • Firebase, verilerinizi BigQuery'ye aktarır. Dışa aktarma işlemi için verilerin ilk yayılmasının 48 saat kadar sürebileceğini unutmayın.

  • Veri kümesi oluşturulduktan sonra konumu değiştirilemez ancak veri kümesini farklı bir konuma kopyalayabilir veya veri kümesini farklı bir konuma manuel olarak taşıyabilirsiniz (yeniden oluşturabilirsiniz). Daha fazla bilgi için Veri kümesi konumunu değiştirme bölümüne bakın.

  • Firebase, Firebase projenizdeki verilerinizi BigQuery'ye düzenli olarak senkronize eder. Bu günlük dışa aktarma işlemleri Pasifik Saati ile 04:00'te başlar ve genellikle 24 saat içinde biter.

  • Varsayılan olarak, projenizdeki tüm uygulamalar BigQuery'ye, daha sonra projeye eklediğiniz tüm uygulamalar ise otomatik olarak BigQuery'ye bağlanır. Hangi uygulamaların veri göndereceğini yönetebilirsiniz.

BigQuery Export'u devre dışı bırakmak için Firebase konsolunda projenizin bağlantısını kaldırın.

Mesaj teslimi verilerini dışa aktarmayı etkinleştir

FCM SDK 8.6.0 veya sonraki bir sürüme sahip iOS cihazlar, uygulamalarının mesaj gönderme verilerini dışa aktarma özelliğini etkinleştirebilir. FCM, hem uyarı hem de arka plan bildirimleri için verileri dışa aktarmayı destekler. Bu seçenekleri etkinleştirmeden önce, BigQuery veri dışa aktarma bölümünde açıklandığı gibi, projeniz için FCM-BiqQuery bağlantısını oluşturmanız gerekir.

Uyarı bildirimleri için teslim verilerini dışa aktarmayı etkinleştir

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

Aşağıdaki çağrı, alınan her bildirim için 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

Gönderme isteklerini HTTP v1 API kullanarak oluşturuyorsanız yük nesnesinde mutable-content = 1 değerini belirttiğinizden emin olun.

Arka plan bildirimleri için iletim verilerini dışa aktarmayı etkinleştir

Uygulama ön veya arka plandayken alınan arka plan mesajları için ana uygulamanın veri mesajı işleyicisinin içindeki 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ın veya etkin olmayan kayıtların hedeflenmesinin bu istatistiklerin bazılarını şişirebileceğini unutmayın.

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

_BÖLÜM SÜRESİ ZAMAN DAMGASI Bu yapay sütun, verilerin yüklendiği günün başlangıcı için bir zaman damgası (UTC) 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 mesaj kimliği, bazı durumlarda genel olarak benzersiz olmayabilir.
ornek_kimliği DİZE Mesajın gönderildiği uygulamanın benzersiz kimliği (varsa). Bu değer, örnek kimliği veya Firebase kurulum kimliği olabilir.
mesaj_türü DİZE Mesajın türü. Bildirim mesajı veya Veri mesajı olabilir. Konu, bir konunun veya kampanyanın gönderdiği orijinal mesajı tanımlamak için kullanılır. Sonraki mesajlar ise bir bildirim veya veri mesajıdır.
sdk_platformu DİZE Alıcı uygulamanı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ılabilen bir ileti grubunu tanımlar. Bir cihaz bağlanmadığında, yalnızca belirli bir daraltma anahtarına sahip son mesaj nihai teslim için sıraya alınır
öncelik TAM SAYI Mesajın ö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üreyle (saniye cinsinden) saklanması gerektiğini belirtir
konu DİZE Mesajın gönderildiği konunun adı (varsa)
toplu_kimlik TAM SAYI Toplu kimlik, bir konuya gönderilen belirli bir mesaj gibi, alakalı mesajlardan oluşan bir grubu tanımlar
etkinlik DİZE Etkinliğin türü. Olası değerler:
  • MESSAGE_KABUL EDİLDİ: Mesaj FCM sunucusu tarafından alındı ve istek geçerli;
  • MESSAGE_DELIVERED: Mesaj, uygulamanın cihazdaki FCM SDK'sına teslim edildi. Varsayılan olarak bu alan dağıtılmaz. Etkinleştirmek için setDeliveryMetricsExportToBigQuery(boolean) bölümünde sağlanan talimatları uygulayın.
  • MISSING_REGISTRATIONS: istek eksik kayıt nedeniyle reddedildi;
  • UNAUTHORIZED_REGISTRATION: Gönderenin kayda gönderme yetkisi bulunmadığından 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: Yetersiz kota nedeniyle mesaj gönderme isteği reddedildi;
  • INVALID_REGISTRATION: mesaj gönderme isteği, geçersiz kayıt nedeniyle reddedildi;
  • INVALID_PACKAGE_NAME: mesaj gönderme isteği, geçersiz paket adı nedeniyle reddedildi;
  • INVALID_APNS_CREDENTIAL: mesaj gönderme isteği, geçersiz APNS sertifikası nedeniyle reddedildi.
  • INVALID_PARAMETERS: mesaj gönderme isteği, geçersiz parametreler nedeniyle reddedildi;
  • PAYLOAD_TOO_LARGE: Mesaj gönderme isteği, sınırı aşan 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 analiz amacıyla mesajı işaretlemek için analiz etiketi, mesajı gönderirken ayarlanabilir.

Dışa aktarılan verilerle ne yapabilirsiniz?

Aşağıdaki bölümlerde, dışa aktarılan FCM verilerinizle BigQuery'de çalıştırabileceğiniz sorgulara örnekler 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ı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 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ğılma süresini hesaplama

Çıkış zamanı, orijinal isteğin alındığı zamandır. Bitiş zamanı ise tek bir örneği hedefleyen son bağımsız 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 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 mesaj 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;