İleti teslimini anlama

Devam eden mesaj yayınlama hatalarıyla ilgili sorunları gidermek için FCM sorun gidericisini kullanın ve mesajınızı görememenizin farklı nedenlerini anlamak için bu blog yayınını inceleyin. FCM'yi etkileyen devam eden hizmet kesintileri olup olmadığını belirlemek için FCM durum kontrol panelini de ziyaret edebilirsiniz.

FCM, mesajlaşma başarısı ve stratejisinin kapsamlı değerlendirmesi hakkında bilgi edinmenize yardımcı olmak için üç araç seti de sunar:

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

Verileri BigQuery'ye aktarma ve Firebase konsolundaki Raporlar sekmesi işlevlerini kullanmak için Google Analytics gerekir. Google Analytics özelliğini Firebase konsolunun Ayarlar > Entegrasyonlar sekmesinden etkinleştirebilirsiniz. Birleştirilmiş Teslimat Verileri'nin çalışması için Google Analytics gerekmez.

Bu sayfadaki istatistiklerin çoğunun raporlanmasında, analiz verilerinin gruplandırılması nedeniyle 24 saate kadar gecikmeler olabileceğini unutmayın.

İleti teslim raporları

Firebase konsolunda DevOps & Engagement (DevOps ve Etkileşim) > Messaging (Mesajlaşma) > Reports (Raporlar) sekmesine gidin. Bildirim Oluşturucu ve FCM API'leri kullanılarak gönderilenler de dahil olmak üzere Android veya Apple platformu FCM SDK'lerine gönderilen mesajlarla ilgili aşağıdaki verileri görüntüleyebilirsiniz:

  • Gönderildi (Sends): Veri mesajı veya bildirim mesajı, teslimat için sıraya alınmış ya da teslimat amacıyla APNs gibi bir üçüncü taraf hizmetine başarıyla iletilmiştir. Gönderim istatistiklerinin birkaç saat gecikebileceğini unutmayın. Daha fazla bilgi için ileti ö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üyse kullanılabilir.
  • Gösterim sayısı (yalnızca Android cihazlardaki bildirim mesajları için kullanılabilir): Uygulama arka plandayken cihazda gösterilen bildirimlerin sayısıdır.
  • Açma: 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 etiketli veri mesajları için kullanılabilir. Etiketler hakkında daha fazla bilgi edinmek için İletilere Analytics etiketleri ekleme başlıklı makaleyi inceleyin.

Mesaj raporlarını görüntülerken, gösterilen veriler için bir tarih aralığı belirleyebilir ve verileri CSV dosyası olarak dışa aktarabilirsiniz. Ayrıca şu ölçütlere göre de filtreleme yapabilirsiniz:

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

İletilere analiz etiketleri ekleme

İletileri etiketlemek, özel analizler için çok kullanışlıdır. Bu sayede, teslimat istatistiklerini etiketlere veya etiket gruplarına göre filtreleyebilirsiniz. HTTP v1 API kullanılarak gönderilen iletilere, message nesnesindeki fcmOptions.analyticsLabel alanını veya platforma özel AndroidFcmOptions ya da ApnsFcmOptions alanlarını ayarlayarak etiket ekleyebilirsiniz.

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

  • -
  • ~
  • %

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

FirebaseKonsol mesajlaşma Raporları sekmesinde, mevcut tüm etiketlerin listesinde arama yapabilir ve görüntülenen istatistikleri filtrelemek için etiketleri tek tek veya birlikte uygulayabilirsiniz.

FCM Veri API'si kullanılarak birleştirilmiş yayın verileri

Firebase Cloud Messaging Veri API'si, Android uygulamalarını hedefleyen mesaj isteklerinin sonuçlarını anlamanıza yardımcı olabilecek bilgileri almanıza olanak tanır. API, bir projedeki veri toplama özelliğinin etkinleştirildiği tüm Android cihazlardan birleştirilmiş veriler sağlar. Bu bilgiler arasında, iletilerin gecikmeden teslim edilme yüzdesinin yanı sıra Android Aktarım Katmanı'nda kaç iletinin geciktiği veya bırakıldığıyla ilgili ayrıntılar yer alır. Bu verileri değerlendirmek, ileti teslimiyle ilgili genel trendleri ortaya çıkarabilir ve gönderme isteklerinizin performansını artırmanın etkili yollarını bulmanıza yardımcı olabilir. Raporlardaki tarih aralığı kullanılabilirliği hakkında bilgi için Birleştirilmiş veri zaman çizelgeleri başlıklı makaleyi inceleyin.

API, belirli bir uygulama için kullanılabilen tüm verileri sağlar. API referans belgelerine göz atın.

Veriler nasıl ayrıştırılır?

Yayın verileri uygulamaya, tarihe ve analiz etiketine göre ayrılır. API'ye yapılan bir çağrı; tarih, uygulama ve analiz etiketinin her 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

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

Kabul Edilen Mesaj Sayısı

Veri kümesine dahil edilen tek sayı, Android cihazlara teslim için FCM tarafından kabul edilen mesajların sayısıdır. Tüm yüzdelerde bu değer payda olarak kullanılır. Bu sayının, cihazlarında kullanım ve teşhis bilgilerinin toplanmasını devre dışı bırakan kullanıcılara yönelik mesajları içermeyeceğini unutmayın.

Mesaj Sonucu Yüzdeleri

MessageOutcomePercents nesnesine dahil edilen alanlar, mesaj isteklerinin sonuçlarıyla ilgili bilgi sağlar. Kategorilerin tümü birbirini hariç tutar. "İletilerim teslim ediliyor mu?" ve "İletilerin bırakılmasına ne sebep oluyor?" gibi soruları yanıtlayabilir.

Örneğin, droppedTooManyPendingMessages alanının yüksek bir değere sahip olması, uygulama örneklerinin FCM tarafından belirlenen 100 bekleyen mesaj sınırını aşan miktarda daraltılamayan mesaj aldığını gösterebilir. Bunu önlemek için uygulamanızın onDeletedMessages aramalarını 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üncellemeniz, eski jetonları kaldırmanız ve konulara aboneliklerini iptal etmeniz gerektiğinin bir işareti olabilir. Bu alandaki en iyi uygulamalar için FCM kayıt jetonlarını yönetme başlıklı makaleyi inceleyin.

Yayınlama performansı yüzdeleri

DeliveryPerformancePercents nesnesindeki alanlar, başarıyla teslim edilen mesajlar 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 sıklığını ayarlamanız gerekir.

Mesaj Analizi Yüzdeleri

Bu nesne, tüm ileti gönderimleri hakkında ek bilgiler sağlar. priorityLowered alanı, önceliği HIGH değerinden NORMAL değerine düşürülen kabul edilen mesajların 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österdiğinizden emin olun. İleti önceliğiyle ilgili dokümanımızı inceleyerek daha fazla bilgi edinin.

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

BigQuery Export, FCM arka ucu tarafından mesaj kabulü ve cihazdaki SDK'da mesaj teslimi ile ilgili ayrı mesaj günlükleri sağlar (FCM Mimarisi'nin 2. ve 4. adımları). Bu veriler, her bir iletinin kabul edildiğinden ve teslim edildiğinden emin olmak için yararlıdır. BigQuery verilerini dışa aktarma hakkında daha fazla bilgiyi sonraki bölümde bulabilirsiniz.

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ğu hakkında toplu ayrıntılar sağlar. Bu veriler, özellikle FCM arka uçlarından Android SDK'sına mesaj teslimi hakkında bilgi sağlar. Bu özellik, iletilerin bu aktarım sırasında neden geciktiği veya bırakıldığıyla ilgili trendleri göstermek için özellikle yararlıdır.

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

  • Toplu metrikler, tüm mesajların yalnızca bir kısmını örnekler.
  • Toplanan metrikler yuvarlanır.
  • Gizlilik eşiğinin altındaki metrikleri göstermeyiz.
  • Yoğun trafiği yönetme şeklimizdeki optimizasyonlar nedeniyle ileti sonuçlarının bir kısmı eksik.

API'nin sınırlamaları

Birleştirilmiş 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 gecikebilir. Örneğin, 20 Ocak'ta 9 Ocak-15 Ocak arasındaki veriler kullanılabilir ancak 16 Ocak veya sonrasına ait veriler kullanılamaz. Ayrıca, veriler en iyi sonuç hedeflenerek sağlanır. Veri kesintisi durumunda FCM, sorunu düzeltmek için ç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 teslimatındaki genel eğilimler hakkında bilgi vermeyi amaçlar. Ancak tüm mesaj senaryolarında% 100 kapsam sağlamazlar. Aşağıdaki senaryolar, metriklerde yansıtılmayan bilinen sonuçlardır.

Süresi dolmuş mesajlar

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

Etkin olmayan cihazlara gönderilen mesajlar

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

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ımımıza dahil edilmez.

Yuvarlama ve Minimum Değerler

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

BigQuery veri 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 ML modelleriniz için kullanmanıza olanak tanır. BigQuery'ye yapılan dışa aktarma işleminde, mesaj türü veya mesajın API ya da Bildirim Oluşturucu kullanılarak gönderilip gönderilmediğine bakılmaksızın mesajlarla ilgili tüm veriler yer alır.

Aşağıdaki FCM SDK minimum sürümlerine sahip cihazlara gönderilen mesajlar için uygulamanızın mesaj teslim 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'sı 12.14.0 veya sonraki bir sürüm

Başlamak için Firebase konsolunu kullanarak projenizi BigQuery hizmetine bağlayın:

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

    • DevOps ve Etkileşim > Mesajlaşma > Bildirim Oluşturucu'ya gidin ve sayfanın alt kısmındaki BigQuery'ye eriş'i tıklayın.

    • Ayarlar > Entegrasyonlar sekmesine gidin. Ardından BigQuery bölümünde Bağla'yı tıklayın.

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

  2. BigQuery özelliğini 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 aktarma işlemini etkinleştirdiğinizde:

  • Firebase, verilerinizi BigQuery'e aktarır. Dışa aktarılacak verilerin ilk yayılma işleminin tamamlanması 48 saati bulabilir.

  • 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şturma). 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 ile 04:00'te başlar ve genellikle 24 saat içinde tamamlanır.

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

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

İleti teslimi verilerini dışa aktarmayı etkinleştirme

iOS+

FCM SDK 8.6.0 veya sonraki sürümlerin yüklü olduğu iOS cihazlarda, uygulamaların mesaj teslimi verileri dışa aktarılabilir. FCM, hem uyarı hem de arka plan bildirimleri için veri dışa aktarmayı destekler. Veri dışa aktarma, uygulama düzeyinde varsayılan olarak devre dışıdır. Uygulama örneği düzeyinde programatik olarak etkinleştirmek, son kullanıcılardan mesaj teslim verilerini analiz etmek için izin 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.

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

Yalnızca uyarı bildirimleri, bildirim hizmeti uygulama uzantılarını tetikleyebildiğinden, uygulamanıza bir bildirim hizmeti uzantısı eklemeniz ve görüntüleme mesajı izlemeyi etkinleştirmek için bu API'yi bir hizmet uzantısı içinde çağırmanız gerekir. Apple'ın Modifying Content in Newly Delivered Notifications (Yeni Gönderilen Bildirimlerde İçeriği Değiştirme) başlıklı belgesini inceleyin.

Alınan her bildirim için aşağıdaki arama 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.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

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

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

Uygulama ön planda veya arka plandayken alınan arka plan mesajları için ana uygulamanın veri mesajı işleyicisindeki veri dışa aktarma API'sini çağırabilirsiniz. Bu çağrı, 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.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

FCM SDK'sı 20.1.0 veya sonraki sürümlere sahip Android cihazlar, uygulamalarının mesaj teslim verilerini dışa aktarma özelliğini etkinleştirebilir. Veri dışa aktarma özelliği varsayılan olarak uygulama düzeyinde devre dışıdır. Uygulama örneği düzeyinde programatik olarak etkinleştirildiğinde son kullanıcılardan mesaj teslimi verilerini analiz etme izni isteyebilirsiniz (ö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 projeniz için BigQuery bağlantısını BigQuery veri dışa aktarma bölümünde açıklandığı şekilde oluşturmanız gerekir.FCM

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

Çoğu durumda, mesaj teslimi verilerini 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);

Bir uygulama için yayın verilerini dışa aktarmayı etkinleştirme

Dışa aktarmayı uygulama düzeyinde etkinleştirmeyi tercih ederseniz setDeliveryMetricsExportToBigQuery yöntemini çağırmadığınızdan emin olun ve uygulama manifestinizdeki uygulama nesnesine aşağıdaki özelliği ekleyin:

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

Web

Web için FCM SDK'sı 12.14.0 veya sonraki sürümler, yayın verilerinin dışa aktarılmasına olanak tanır. Veri dışa aktarma, uygulama düzeyinde varsayılan olarak devre dışıdır. Uygulama örneği düzeyinde programatik olarak etkinleştirmek, son kullanıcılardan mesaj teslimat verilerini analiz etmek için izin 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. Son kullanıcı veri toplamaya izin verdiğinde veya veri toplamayı reddettiğinde uygulama, her uygulama örneği için deneysel etkinleştirme veya devre dışı bırakma işaretini aşağıdaki gibi ayarlamalıdır:

// userConsent holds the decision of the user to give big query export consent.
const userConsent = ...;

const messaging = getMessagingInSw(app);

experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, userConsent);

BigQuery'ye hangi veriler aktarılır?

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

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

_PARTITIONTIME ZAMAN DAMGASI Bu sözde sütun, verilerin yüklendiği günün başlangıcı için UTC cinsinden bir zaman damgası içerir. YYYYMMDD bölümü için bu sözde sütun, TIMESTAMP('YYYY-MM-DD') değerini içerir.
event_timestamp ZAMAN DAMGASI Sunucu tarafından kaydedilen etkinlik zaman damgası
project_number TAM SAYI Proje numarası, mesajı gönderen projeyi tanımlar.
message_id DİZE İleti kimliği, bir iletiyi tanımlar. Uygulama kimliğinden ve zaman damgasından oluşturulan mesaj kimliği, 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.
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 amacıyla kullanılır. Sonraki mesajlar bildirim veya veri mesajıdır.
sdk_platform DİZE Alıcı uygulamanın platformu
app_name DİZE Android uygulamaları için paket adı veya iOS uygulamaları için paket kimliği
collapse_key DİZE Daraltma anahtarı, daraltılabilecek bir mesaj grubunu tanımlar. Bir cihaz bağlı değilken, yalnızca belirli bir collapse_key'e sahip son mesaj, nihai teslimat için sıraya alınır.
öncelik TAM SAYI İletinin önceliği. 5 "normal" öncelik, 10 ise "yüksek" önceliktir.
ttl TAM SAYI Bu parametre, cihaz çevrimdışıysa iletinin FCM depolama alanında ne kadar süreyle (saniye cinsinden) saklanacağını belirtir.
konu DİZE Mesajın gönderildiği konunun adı (varsa)
bulk_id TAM SAYI Toplu kimlik, belirli bir konuya gönderilen mesajlar gibi bir grup ilgili mesajı tanımlar.
etkinlik DİZE Etkinliğin türü. Olası değerler:
  • MESSAGE_ACCEPTED: İleti, FCM sunucusu tarafından alındı ve istek geçerli.
  • MESSAGE_DELIVERED: Mesaj, cihazdaki uygulamanın FCM SDK'sına teslim edildi. Varsayılan olarak bu alan yayılmaz. Etkinleştirmek için setDeliveryMetricsExportToBigQuery(boolean) bölümündeki talimatları uygulayın.
  • MISSING_REGISTRATIONS: İstek, eksik bir kayıt nedeniyle reddedildi.
  • UNAUTHORIZED_REGISTRATION: Gönderenin kayda gönderme yetkisi olmadığı için mesaj reddedildi.
  • MESSAGE_RECEIVED_INTERNAL_ERROR: Mesaj isteği işlenirken belirtilmemiş bir hata oluştu.
  • MISMATCH_SENDER_ID: İleti gönderme isteği, iletiyi gönderen gönderen kimliği ile uç nokta için beyan edilen kimlik arasındaki uyuşmazlık nedeniyle reddedildi.
  • QUOTA_EXCEEDED: İleti gönderme isteği, kota yetersiz olduğu için reddedildi.
  • INVALID_REGISTRATION: Mesaj gönderme isteği, geçersiz bir 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 bir APNS sertifikası nedeniyle reddedildi.
  • INVALID_PARAMETERS: İleti gönderme isteği, geçersiz parametreler nedeniyle reddedildi.
  • PAYLOAD_TOO_LARGE: Mesaj gönderme isteği, yükün sınırdan büyük olması 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: İleti 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, dışa aktarılan FCM verileriniz için BigQuery'de çalıştırabileceğiniz sorgu örnekleri verilmiştir.

Uygulamaya göre gönderilen ileti sayısı

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

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 mesajlarının 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 iletilerle ilgili etkinlikleri izlemek için bu sorguyu AND message_id != '' yerine AND message_id = <your message id>; koyacak şekilde değiştirin.

Belirli bir konu veya kampanya için fanout süresini hesaplama

Yayın başlangıç zamanı, orijinal isteğin alındığı zamandır. Bitiş zamanı ise tek bir örneği hedefleyen son bireysel 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 hesaplama

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