FCM mesajları hakkında

Firebase Cloud Messaging (FCM), geniş bir mesajlaşma seçeneği ve özelliği yelpazesi sunar. Bu sayfadaki bilgiler, farklı FCM mesaj türlerini ve bu mesajlarla neler yapabileceğinizi anlamanıza yardımcı olmak için hazırlanmıştır.

İsteğe bağlı veri yükü içeren bildirim mesajları

Hem programatik olarak hem de Firebasekonsol üzerinden, özel anahtar/değer çiftlerinden oluşan isteğe bağlı bir yük içeren bildirim mesajları gönderebilirsiniz. Bildirim oluşturucu'da, Gelişmiş seçenekler'deki Özel veriler alanlarını kullanın.

Hem bildirim hem de veri yükleri içeren mesajlar alındığında uygulamanın davranışı, uygulamanın arka planda mı yoksa ön planda mı olduğuna (temelde, alındığı sırada etkin olup olmadığına) bağlıdır.

  • Arka planda çalışan uygulamalar, bildirim yükünü bildirim tepsisinde alır ve yalnızca kullanıcı bildirime dokunduğunda veri yükünü işler.
  • Ön plandayken uygulamanız, her iki yükün de bulunduğu bir mesaj nesnesi alır.

Hem notification anahtarını hem de data anahtarını içeren JSON biçimli bir mesaj aşağıda verilmiştir:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}

Teslimat seçenekleri

FCM, Android cihazlara gönderilen iletiler için belirli bir dizi teslimat seçeneği sunar ve Apple platformlarında ve web'de benzer seçeneklere izin verir. Örneğin, "daraltılabilir" mesaj davranışı Android'de FCM'ın collapse_key, Apple'da apns-collapse-id, JavaScript/Web'de ise Topic aracılığıyla desteklenir. Ayrıntılar için bu bölümdeki açıklamaları ve ilgili referans belgelerini inceleyin.

İletinin önceliğini ayarlama

Aşağı akış iletilerine teslimat önceliği atamak için iki seçeneğiniz vardır: normal ve yüksek öncelikli. Davranış platformlar arasında biraz farklılık gösterse de normal ve yüksek öncelikli iletilerin teslimi şu şekilde gerçekleşir:

  • Normal öncelik Normal öncelikli iletiler, uygulama ön plandayken hemen teslim edilir. Arka planda çalışan uygulamalarda teslimat gecikebilir. Yeni e-posta bildirimleri, kullanıcı arayüzünüzü senkronize tutma veya uygulama verilerini arka planda senkronize etme gibi daha az zamana duyarlı iletiler için normal teslimat önceliğini seçin.

  • Yüksek öncelikli. FCM, cihaz uyku modunda olsa bile yüksek öncelikli mesajları hemen teslim etmeye çalışır. Yüksek öncelikli mesajlar, zamana duyarlı ve kullanıcı tarafından görülebilen içerikler içindir.

FCM HTTP v1 protokolü üzerinden gönderilen ve dergi abonelerini yeni içeriklerin indirilebileceği konusunda bilgilendiren normal öncelikli bir mesaj örneğini aşağıda bulabilirsiniz:

{
  "message":{
    "topic":"subscriber-updates",
    "notification":{
      "body" : "This week's edition is now available.",
      "title" : "NewsMagazine.com",
    },
    "data" : {
      "volume" : "3.21.15",
      "contents" : "http://www.news-magazine.com/world-week/21659772"
    },
    "android":{
      "priority":"normal"
    },
    "apns":{
      "headers":{
        "apns-priority":"5"
      }
    },
    "webpush": {
      "headers": {
        "Urgency": "high"
      }
    }
  }
}

Mesaj önceliğini ayarlama hakkında platforma özgü daha fazla bilgi için:

Hayatı etkileyen kullanım alanları

FCM API'leri, acil durum uyarıları veya API'lerin kullanımının ya da arızasının ölüme, yaralanmaya veya çevresel zarara (ör. nükleer tesislerin işletilmesi, hava trafiği kontrolü ya da yaşam destek sistemleri) yol açabileceği diğer yüksek riskli faaliyetler için tasarlanmamıştır. Bu tür bir kullanım, Bölüm 4. a. 7 numaralı Hizmet Şartları maddesi uyarınca Uygulamanızın Şartlar'a uygunluğunu yönetmekten ve uygunsuzluğunuzdan kaynaklanan zararlardan yalnızca siz sorumlusunuz. Google, API'leri "olduğu gibi" sağlar ve herhangi bir nedenle, herhangi bir zamanda, size veya kullanıcılarınıza karşı bir sorumluluğu ya da yükümlülüğü olmaksızın API'leri ya da herhangi bir bölümünü veya özelliğini kullanımdan kaldırma ya da bunlara erişiminizi durdurma hakkını saklı tutar.

İletinin geçerlilik süresini ayarlama

FCM, iletileri genellikle gönderildikten hemen sonra teslim eder. Ancak bu her zaman mümkün olmayabilir. Örneğin, platform Android ise cihaz kapalı, çevrimdışı veya başka bir nedenle kullanılamıyor olabilir. Alternatif olarak, FCM, bir uygulamanın aşırı kaynak tüketmesini ve pil ömrünü olumsuz etkilemesini önlemek için iletileri kasıtlı olarak geciktirebilir.

Bu durumda FCM, iletiyi depolar ve mümkün olan en kısa sürede teslim eder. Bu durum çoğu durumda sorun yaratmasa da bazı uygulamalarda geç gelen mesajlar hiç teslim edilmemiş gibi olabilir. Örneğin, mesaj gelen arama veya görüntülü sohbet bildirimi ise yalnızca arama sonlandırılmadan önceki kısa süre boyunca anlamlıdır. Ayrıca, bir etkinliğe davet içeren mesajlar etkinlik sona erdikten sonra alındığında işe yaramaz.

Android ve Web/JavaScript'te bir mesajın maksimum kullanım ömrünü belirtebilirsiniz. Değer, 0 ile 2.419.200 saniye (28 gün) arasında bir süre olmalıdır ve FCM'nın iletiyi saklayıp teslim etmeye çalıştığı maksimum süreyi ifade eder. Bu alanı içermeyen istekler varsayılan olarak dört haftalık maksimum süreye ayarlanır.

Bu özelliğin olası kullanım alanlarından bazıları şunlardır:

  • Gelen görüntülü sohbet aramaları
  • Süresi dolan davetiye etkinlikleri
  • Takvim etkinlikleri

Bir mesajın kullanım ömrünü belirtmenin bir diğer avantajı da FCM'nın, kullanım süresi değeri 0 saniye olan mesajlara daraltılabilir mesaj sınırlaması uygulamamasıdır. FCM, "hemen veya hiç" teslim edilmesi gereken iletilerin en iyi şekilde işlenmesini sağlar. 0 time_to_live değerinin, hemen teslim edilemeyen iletilerin silineceği anlamına geldiğini unutmayın. Ancak bu tür mesajlar hiçbir zaman depolanmadığı için bildirim mesajları gönderme konusunda en iyi gecikme süresini sağlar.

Aşağıda, TTL içeren bir istek örneği verilmiştir:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    },
    "apns":{
      "headers":{
        "apns-expiration":"1604750400"
      }
    },
    "android":{
      "ttl":"4500s"
    },
    "webpush":{
      "headers":{
        "TTL":"4500"
      }
    }
  }
}

İletinin kullanım ömrü

Bir uygulama sunucusu FCM adresine ileti gönderip ileti kimliği aldığında bu, iletinin cihaza teslim edildiği anlamına gelmez. Bu, e-postanın teslim için kabul edildiği anlamına gelir. Kabul edilen mesajın akıbeti birçok faktöre bağlıdır.

En iyi senaryoda, cihaz FCM'ya bağlıysa, ekran açıksa ve sınırlama kısıtlaması yoksa mesaj hemen teslim edilir.

Cihaz bağlı ancak uyku modundaysa cihaz uyku modundan çıkana kadar düşük öncelikli mesaj FCM tarafından depolanır. collapse_key işareti bu noktada devreye girer: Aynı daraltma anahtarına (ve kayıt jetonuna) sahip bir mesaj zaten depolanmış ve teslim edilmeyi bekliyorsa eski mesaj atılır ve yeni mesaj onun yerini alır (yani eski mesaj, yeni mesajla daraltılır). Ancak daraltma anahtarı ayarlanmamışsa hem yeni hem de eski mesajlar gelecekte teslim edilmek üzere saklanır.

Cihaz FCM'ya bağlı değilse mesaj, bağlantı kurulana kadar (daraltma anahtarı kurallarına uyularak) saklanır. Bağlantı kurulduğunda FCM, bekleyen tüm iletileri cihaza teslim eder. Cihaz bir daha hiç bağlanmazsa (örneğin, fabrika ayarlarına sıfırlanırsa) mesajın süresi dolar ve FCM depolama alanından silinir. time_to_live işareti ayarlanmadığı sürece varsayılan zaman aşımı süresi dört haftadır.

Bir iletinin teslimi hakkında daha fazla bilgi edinmek için:

    Android veya Apple platformlarında mesajların teslim edilmesiyle ilgili daha fazla bilgi edinmek için FCM raporlama kontrol paneline bakın. Bu kontrol paneli, Apple ve Android cihazlarda gönderilen ve açılan mesajların sayısını kaydeder. Ayrıca, Android uygulamaları için "gösterim" (kullanıcılar tarafından görülen bildirimler) verilerini de içerir.

Doğrudan kanal mesajlaşmasının etkin olduğu Android cihazlarda, cihaz bir aydan uzun süredir FCM'ya bağlanmadıysa FCM mesajı kabul eder ancak hemen siler. Cihaz, kendisine gönderdiğiniz son veri mesajından sonraki dört hafta içinde bağlanırsa istemciniz onDeletedMessages() geri çağırmasını alır. Uygulama daha sonra durumu uygun şekilde ele alabilir. Genellikle uygulama sunucusundan tam senkronizasyon isteğinde bulunur.

Son olarak, FCM cihaza bir ileti teslim etmeye çalıştığında ve uygulama kaldırılmışsa FCM bu iletiyi hemen siler ve kayıt jetonunu geçersiz kılar. İleride bu cihaza mesaj gönderme girişimleri NotRegistered hatasıyla sonuçlanır.