İleti teslimini anlama

Devam eden mesaj teslimi hatalarını gidermek için FCM sorun gidericisini kullanın ve mesajınızı görememenizin farklı nedenlerini anlamak için bu blog yayınına göz atın. 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 genel değerlendirmesi hakkında bilgi edinmenize yardımcı olacak üç araç seti de sunar:

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

Verileri BigQuery platformuna aktarma ve Firebase konsolundaki Raporlar sekmesi özelliklerinin çalışması için Google Analytics gerekir. Google Analytics özelliğini Firebase konsolunun Ayarlar > Entegrasyonlar sekmesinden etkinleştirebilirsiniz. Toplu Yayın 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 teslimi raporları

Firebase konsolunda DevOps ve Etkileşim > Mesajlaşma > Raporlar sekmesine giderek Android veya Apple platformu FCM SDK'larına gönderilen mesajlarla ilgili aşağıdaki verileri görüntüleyin. Bu verilere, Bildirim Oluşturucu ve FCM API'leri kullanılarak gönderilen mesajlar da dahildir:

  • Gönderilenler: Veri mesajı veya bildirim mesajı, teslimat için sıraya alınmıştır ya da teslimat için APN'ler gibi bir üçüncü taraf hizmetine başarıyla iletilmiştir. Gönderim istatistiklerinin birkaç saat gecikebileceğini unutmayın. Daha fazla bilgi için mesajın kullanım ö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ü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 analiz 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. message nesnesinde veya platforma özel AndroidFcmOptions ya da ApnsFcmOptions alanlarında fcmOptions.analyticsLabel alanını ayarlayarak HTTP v1 API kullanılarak gönderilen tüm mesajlara 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 üzerinde etiket eklenen iletiler raporlanmaz.

Firebase Console mesajlaşma Raporlar sekmesinde, mevcut tüm etiketlerin listesinde arama yapabilir ve görüntülenen istatistikleri filtrelemek için bunları 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, gecikme olmadan teslim edilen mesajların yüzdesi ve Android Taşıma Katmanı'nda geciken veya bırakılan mesajların sayısı yer alır. Bu verileri değerlendirmek, ileti teslimindeki 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 bölümüne bakın.

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

Veriler nasıl dökümlenir?

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 yöntemimizdeki sınırlamalar ve metrikleri birleştirdiğimiz 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 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çermeyeceğini unutmayın.

Mesaj Sonucu Yüzdeleri

MessageOutcomePercents nesnesinde yer alan alanlar, mesaj isteklerinin sonuçları hakkında 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. Bu sorunu azaltmak için uygulamanızın onDeletedMessages çağrıları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ı ve mesaj gönderme hızınızı ayarlamanız gerektiğini açıkça gösterir.

Mesaj Analizi Yüzdeleri

Bu nesne, tüm mesaj gönderimleri hakkında ek bilgi 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. Daha fazla bilgi için mesaj önceliğiyle ilgili dokümanlarımızı inceleyin.

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'ya mesajların teslimi hakkında bilgi sağlar. Bu taşıma sırasında iletilerin 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.
  • Toplu metrikler yuvarlanır.
  • Gizlilik eşiğinin altındaki metrikleri sunmayız.
  • Yoğun trafiği yönetme şeklimizdeki optimizasyonlar nedeniyle mesaj 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-15 Ocak tarihleri arasındaki veriler kullanılabilir ancak 16 Ocak veya sonraki tarihlere 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ını% 100 kapsamazlar. Aşağıdaki senaryolar, metriklere yansıtılmayan bilinen sonuçlardır.

Süresi dolan 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 aktarma işlemi, mesaj türünden veya mesajın API ya da Bildirim Oluşturucu kullanılarak gönderilip gönderilmediğinden bağımsız olarak mesajlarla ilgili 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 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 sürümler

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, ardından sayfanın alt kısmındaki BigQuery'ye eriş'i tıklayın.

    • Settings (Ayarlar) > Integrations (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 hizmetine 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 ile bağlantılıdır ve projeye daha sonra eklediğiniz tüm uygulamalar otomatik olarak BigQuery ile bağlantılıdı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 cihazlar, uygulamalarının mesaj teslim verilerini dışa aktarma özelliğini etkinleştirebilir. 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 Yeni Gönderilen Bildirimlerdeki İçeriği Değiştirme ile ilgili belgelerine bakın.

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.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şleyicisinde 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 20.1.0 veya sonraki sürümlerin yüklü olduğu Android cihazlar, uygulamalarının mesaj teslim verilerini dışa aktarma özelliğini etkinleştirebilir. Veri dışa aktarma, 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 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 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 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. 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ı (UTC olarak) için 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ği ve zaman damgasından oluşturulan mesaj kimliği, bazı durumlarda dünya genelinde benzersiz olmayabilir.
instance_id DİZE Mesajın gönderildiği uygulamanın benzersiz kimliği (varsa). Bu, bir ö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ı olmadığında, nihai teslimat için yalnızca belirli bir daraltma anahtarına sahip son mesaj sıraya alınır.
öncelik TAM SAYI Mesajın önceliği. 5 "normal" önceliği, 10 ise "yüksek" önceliği ifade eder.
ttl TAM SAYI Bu parametre, cihaz çevrimdışıysa mesajın FCM depolama alanında ne kadar süre (saniye cinsinden) tutulması gerektiğini 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: Mesaj gönderme isteği, mesajı gönderen gönderen kimliği ile uç nokta için beyan edilen kimlik 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 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: Mesaj 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: 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, dışa aktarılan FCM verileriniz için BigQuery'de çalıştırabileceğiniz sorgu örnekleri verilmiştir.

Uygulamaya göre gönderilen mesaj 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 mesajla ilgili etkinlikleri izlemek için bu sorguyu değiştirerek AND message_id != '' yerine AND message_id = <your message id>; yazın.

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

Dağıtım başlangıç zamanı, orijinal isteğin alındığı zamandır. Bitiş zamanı ise tek bir örneği hedefleyen son 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üzdesi

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