FCM mesajları hakkında

Firebase Cloud Messaging (FCM), çok çeşitli mesajlaşma seçenekleri ve özellikleri sunar. Bu sayfada yer alan bilgiler, farklı FCM mesaj türlerini ve bunlarla neler yapabileceğinizi anlamanıza yardımcı olmayı amaçlamaktadır.

Mesaj türleri

FCM ile müşterilere iki tür mesaj gönderebilirsiniz:

  • Bazen "görüntüleme mesajları" olarak da adlandırılan bildirim mesajları. Bunlar FCM SDK'sı tarafından otomatik olarak yönetilir.
  • İstemci uygulaması tarafından işlenen veri mesajları.

Bildirim mesajları, kullanıcı tarafından görülebilen önceden tanımlanmış bir anahtar grubu içerir. Buna karşılık veri mesajları, yalnızca kullanıcı tanımlı özel anahtar/değer çiftlerinizi içerir. Bildirim mesajları isteğe bağlı bir veri yükü içerebilir. Firebase konsolundan mesaj gönderirken (1.000 karakter sınırı uygulanır) hariç olmak üzere, her iki mesaj türü için maksimum yük 4.096 bayttır.

Kullanım senaryosu Gönderme
Bildirim mesajı FCM SDK, arka planda çalışırken istemci uygulaması adına mesajı son kullanıcı cihazlarında gösterir. Aksi takdirde, bildirim alındığında uygulama ön planda çalışıyorsa davranışı uygulamanın kodu belirler. Bildirim mesajlarında, kullanıcıların görebildiği önceden tanımlanmış anahtarlar ve özel anahtar/değer çiftlerinden oluşan isteğe bağlı veri yükü bulunur.
  1. Cloud Functions veya uygulama sunucunuz gibi güvenilir bir ortamda Admin SDK'yı veya HTTP v1 API'yi kullanın. notification tuşunu ayarlayın. İsteğe bağlı veri yükü olabilir. Her zaman daraltılabilir.

    Görüntüleme bildirimlerine ilişkin bazı örneklere bakın ve istek yüklerini gönderin.

  2. Bildirim oluşturucuyu kullanın: Mesaj Metni, Başlık vb. bilgileri girin ve gönderin. Özel veri sağlayarak isteğe bağlı veri yükü ekleyin.
Veri mesajı Veri mesajlarını işlemekten istemci uygulaması sorumludur. Veri mesajlarında, ayrılmış anahtar adları olmayan yalnızca özel anahtar/değer çiftleri bulunur (aşağıya bakın). Cloud Functions veya uygulama sunucunuz gibi güvenilir bir ortamda Yönetici SDK'sını veya FCM sunucu protokollerini kullanın. İsteği gönderirken data anahtarını ayarlayın.

FCM SDK'sının, uygulamanız arka planda çalışırken otomatik olarak bildirim görüntülemesini istiyorsanız bildirim mesajlarını kullanın. Mesajları kendi istemci uygulama kodunuzla işlemek istediğinizde veri mesajlarını kullanın.

FCM, isteğe bağlı bir veri yükü içeren bir bildirim mesajı gönderebilir. Bu gibi durumlarda bildirim yükünü FCM, istemci uygulaması ise veri yükünü gösterir.

Bildirim mesajları

Test için veya pazarlama ve kullanıcı yeniden etkileşimi için Firebase konsolunu kullanarak bildirim mesajları gönderebilirsiniz. Firebase konsolu, pazarlama mesajlarını hassaslaştırmanıza ve iyileştirmenize yardımcı olmak için analiz tabanlı A/B testi sağlar.

Yönetici SDK'sını veya FCM protokollerini kullanarak bildirim mesajlarını programatik olarak göndermek için notification anahtarını, bildirim mesajının kullanıcı tarafından görülebilen kısmı için gerekli önceden tanımlanmış anahtar/değer seçenekleri kümesiyle ayarlayın. Örneğin, bir mesajlaşma uygulamasında JSON biçiminde bir bildirim mesajı verilmiştir. Kullanıcı, cihazda "Portekiz - Danimarka" başlıklı ve "mükemmel maç" metnini içeren bir mesaj görebilir:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

Bildirim mesajları, uygulama arka plandayken bildirim tepsisine gönderilir. Ön plandaki uygulamalarda mesajlar bir geri çağırma işlevi tarafından işlenir.

Bildirim mesajları oluşturmak için kullanılabilen önceden tanımlanmış anahtarların tam listesi için HTTP v1 Protokolü bildirim nesnesi referans dokümanlarına bakın.

Veri mesajları

İstemci uygulamasına veri yükü göndermek için özel anahtar/değer çiftlerinizle uygun anahtarı ayarlayın.

Örneğin, yukarıdakiyle aynı IM uygulamasında, bilgilerin ortak data anahtarına kapsüllenerek istemci uygulamasının içeriği yorumlaması beklenen JSON biçimli bir mesajı aşağıda bulabilirsiniz:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}

Yukarıdaki örnekte, üst düzey veya ortak data alanının kullanımı gösterilmektedir. Bu alan, mesajı alan tüm platformlardaki istemciler tarafından yorumlanır. İstemci uygulaması, her platformda veri yükünü bir geri çağırma işlevinde alır.

Veri mesajları için şifreleme

Android Taşıma Katmanı (FCM mimarisine bakın) noktadan noktaya şifreleme kullanır. İhtiyaçlarınıza bağlı olarak veri mesajlarına uçtan uca şifreleme ekleyebilirsiniz. FCM uçtan uca bir çözüm sunmaz. Ancak kılcal veya DTLS gibi harici çözümler de mevcuttur.

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

İsteğe bağlı özel anahtar/değer çiftleri yükü içeren bildirim mesajlarını hem programatik olarak hem de Firebase konsolu üzerinden gönderebilirsiniz. Bildirim derleyicisinde, Gelişmiş seçenekler bölümündeki Özel veriler alanlarını kullanın.

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

  • Arka plandayken 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 bulabilirsiniz:

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

Mesajları platformlar arasında özelleştirme

Hem Firebase Admin SDK hem de FCM v1 HTTP protokolü, mesaj isteklerinizin message nesnesindeki tüm alanları ayarlamasına izin verir. Bunlardan bazıları:

  • Mesajın alındığı tüm uygulama örnekleri tarafından yorumlanacak ortak bir alan grubu.
  • AndroidConfig ve WebpushConfig gibi platforma özel alan kümeleri, yalnızca belirtilen platformda çalışan uygulama örnekleri tarafından yorumlanır.

Platforma özel engeller, mesajların alındığında doğru şekilde ele alınmasını sağlamak için farklı platformlar için özelleştirme esnekliği sunar. FCM arka ucu, belirtilen tüm parametreleri dikkate alır ve mesajı her platform için özelleştirir.

Ortak alanlar ne zaman kullanılır?

Aşağıdaki durumlarda ortak alanları kullanın:

  • Apple, Android ve web dahil tüm platformlarda uygulama örneklerini hedefleme
  • Konular için mesaj gönderme

Platformdan bağımsız olarak tüm uygulama örnekleri aşağıdaki ortak alanları yorumlayabilir:

Platforma özgü alanlar ne zaman kullanılır?

Aşağıdakileri yapmak istediğinizde platforma özel alanları kullanın:

  • Alanları yalnızca belirli platformlara gönderme
  • Ortak alanlara ek olarak platforma özgü alanları gönderme

Yalnızca belirli platformlara değer göndermek istediğinizde ortak alanları kullanmayın, platforma özgü alanları kullanın. Örneğin, yalnızca Apple platformlarına ve web'e, Android'e değil bildirim göndermek için biri Apple, diğeri web için olmak üzere iki ayrı alan grubu kullanmanız gerekir.

Belirli dağıtım seçenekleri içeren iletiler gönderirken bunları ayarlamak için platforma özgü alanları kullanın. İsterseniz platform başına farklı değerler belirtebilirsiniz. Ancak platformlar arasında temelde aynı değeri ayarlamak istediğinizde bile platforma özgü alanları kullanmanız gerekir. Bunun nedeni, her platformun değeri biraz farklı şekilde yorumlayabilmesidir. Örneğin, Android'de ömrü sona erme süresi saniye cinsinden son kullanma süresi olarak ayarlanırken Apple'da son kullanma tarihi olarak ayarlanır.

Örnek: Platforma özel yayınlama seçenekleri içeren bildirim mesajı

Aşağıdaki v1 gönderme isteği, tüm platformlara ortak bir bildirim başlığı ve içeriği gönderir ancak platforma özgü bazı geçersiz kılma işlemleri de gönderir. Daha ayrıntılı olarak belirtmek gerekirse,

  • APN'lerin (Apple platformları) mesaj önceliğini düşük bir ayara ayarlarken Android ve Web platformları için uzun bir geçerlilik süresi belirler.
  • kullanıcının Android ve Apple'da (sırasıyla click_action ve category) bildirime dokunmasının sonucunu tanımlamak için uygun tuşları ayarlar.
{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
     "android":{
       "ttl":"86400s",
       "notification"{
         "click_action":"OPEN_ACTIVITY_1"
       }
     },
     "apns": {
       "headers": {
         "apns-priority": "5",
       },
       "payload": {
         "aps": {
           "category": "NEW_MESSAGE_CATEGORY"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }

İleti gövdesinde platforma özgü bloklarda kullanılabilen anahtarlarla ilgili tüm ayrıntılar için HTTP v1 referans dokümanlarına bakın. İleti gövdesini içeren gönderme istekleri oluşturma hakkında daha fazla bilgi için Gönderme İstekleri Oluşturma başlıklı makaleyi inceleyin.

Teslimat seçenekleri

FCM, Android cihazlara gönderilen mesajlar için belirli bir dizi yayınlama seçeneği sunar ve Apple platformlarında ve web'de benzer seçeneklere olanak tanır. Örneğin, "daraltılabilir" mesaj davranışı Android'de FCM'nin collapse_key özelliği, Apple'da apns-collapse-id özelliği ve JavaScript/Web'de Topic özelliği aracılığıyla desteklenir. Ayrıntılar için bu bölümdeki açıklamalara ve ilgili referans belgelerine göz atın.

Daraltılamayan ve daraltılabilir mesajlar

Daraltılamaz mesaj, her bir mesajın cihaza teslim edildiğini belirtir. Daraltılamayan bir mesaj, verileri getirmek üzere sunucuyla iletişime geçmek için mobil uygulamaya içeriksiz bir "ping" gibi daraltılabilir mesajın aksine bazı faydalı içerikler sunar.

Daraltılamayan mesajların tipik kullanım alanlarından bazıları sohbet mesajları veya kritik mesajlardır. Örneğin, bir mesajlaşma uygulamasında her ileti farklı içeriklere sahip olduğundan her iletiyi yayınlamak istersiniz.

Android için, daraltılmaksızın depolanabilecek mesaj sayısı sınırı 100'dür. Sınıra ulaşılırsa depolanan tüm mesajlar silinir. Cihaz tekrar çevrimiçi olduğunda sınıra ulaşıldığını belirten özel bir mesaj alır. Uygulama, genellikle uygulama sunucusundan tam senkronizasyon isteğinde bulunarak durumu düzgün bir şekilde ele alabilir.

Daraltılabilir mesaj, henüz cihaza teslim edilmemişse yeni bir mesajla değiştirilebilecek bir mesajdır.

Daraltılabilir mesajların yaygın kullanım alanlarından biri, bir mobil uygulamaya sunucudaki verileri senkronize etmesini söylemek için kullanılan mesajlardır. Örneğin, kullanıcıları en son skorla güncelleyen bir spor uygulaması. Yalnızca en son mesaj alakalı olur.

Android'de bir mesajı daraltılabilir olarak işaretlemek için mesaj yüküne collapse_key parametresini ekleyin. Varsayılan olarak daraltma anahtarı, Firebase konsoluna kayıtlı uygulama paketi adıdır. FCM sunucusu, her biri farklı bir daraltma anahtarına sahip olmak üzere cihaz başına dört farklı daraltılabilir mesajı aynı anda saklayabilir. Bu sayıyı aşarsanız FCM yalnızca dört daraltma anahtarını saklar. Hangilerinin saklanacağı konusunda garanti verilmez.

Yük içermeyen konu mesajları varsayılan olarak daraltılabilir. Bildirim mesajları her zaman daraltılabilir ve collapse_key parametresi yoksayılır.

Hangisini kullanmalıyım?

Uygulamanızda daraltılamayan mesajlar kullanmak gerekmiyorsa daraltılabilir mesajlar performans açısından daha iyi bir seçenektir. Ancak, katlanabilen mesajlar kullanıyorsanız FCM'ün, kayıt jetonu başına FCM tarafından herhangi bir zamanda en fazla dört farklı daraltma anahtarının kullanılmasına izin verdiğini unutmayın. Bu sayıyı aşmamanız gerekir. Aksi takdirde, beklenmedik sonuçlarla karşılaşabilirsiniz.

Kullanım senaryosu Nasıl gönderilir?
Daraltılamaz Her mesaj istemci uygulaması için önemlidir ve gönderilmesi gerekir. Bildirim mesajları hariç tüm mesajlar varsayılan olarak daraltılamaz.
Daraltılabilir İlgili eski bir mesajı istemci uygulamasıyla alakasız hale getiren daha yeni bir mesaj olduğunda FCM, eski mesajın yerini alır. Örneğin: sunucudan veri senkronizasyonu başlatmak için kullanılan mesajlar veya güncel olmayan bildirim mesajları. Mesaj isteğinizde uygun parametreyi ayarlayın:
  • Android'de collapseKey
  • Apple'da apns-collapse-id
  • Web'de Topic
  • eski protokollerde collapse_key (tüm platformlar)

Bir mesajın önceliğini ayarlama

Aşağı akış mesajlarına teslim ö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 yayını şu şekilde gerçekleşir:

  • Normal öncelik. Normal öncelikli mesajlar, uygulama ön plandayken hemen gönderilir. Arka plandaki uygulamaların teslimi gecikebilir. Yeni e-posta bildirimleri, kullanıcı arayüzünüzün senkronize kalması veya uygulama verilerinin arka planda senkronize edilmesi gibi zamana duyarlı olmayan mesajlar için normal teslimat önceliğini seçin.

  • Yüksek öncelik. FCM, cihaz Uyku modunda olsa bile yüksek öncelikli mesajları hemen göndermeye çalışır. Yüksek öncelikli mesajlar, zamana duyarlı, kullanıcı tarafından görülebilen içerik içindir.

Bir derginin abonesini yeni içerik indirebileceği konusunda bilgilendirmek için FCM HTTP v1 protokolü üzerinden gönderilen normal öncelikli bir mesaj örneği aşağıda verilmiştir:

{
  "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 özel daha fazla ayrıntı için:

Yaşam için kritik kullanım alanları

FCM API'leri, acil durum uyarıları veya API'lerin kullanımının ya da arıza yapmasının ölüm, yaralanma veya çevresel zarara neden olabileceği diğer yüksek riskli etkinlikler (nükleer tesislerin işletilmesi, hava trafik kontrolü veya yaşam destek sistemleri gibi) için tasarlanmamıştır. Bu tür kullanımların tümü Bölüm 4. a. 7'de belirtilen şekilde yasal işlem başlatma hakkına sahiptir. Uygulamanızın Şartlar'a uygunluğunu yönetmek ve ihlal etmenizden kaynaklanan zararlar yalnızca sizin sorumluluğunuzdadır. Google, API'leri "olduğu gibi" sağlar ve size veya kullanıcılarınıza karşı herhangi bir yükümlülük veya başka bir sorumluluk üstlenmeden, API'leri ya da herhangi bir bölümünü, özelliğini veya bunlara erişiminizi herhangi bir nedenle ve herhangi bir zamanda kullanımdan kaldırma hakkını saklı tutar.

Bir mesajın geçerlilik süresini ayarlama

FCM genellikle iletileri 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 şekilde kullanılamıyor olabilir. FCM, bir uygulamanın aşırı kaynak tüketmesini ve pil ömrünü olumsuz yönde etkilemesini önlemek için iletileri kasıtlı olarak geciktirebilir.

Bu durumda FCM, mesajı depolar ve mümkün olan en kısa sürede iletir. Bu durum çoğu durumda sorun oluşturmasa da geç gönderilen mesajların hiçbir zaman teslim edilmediği bazı uygulamalar vardır. Örneğin, mesaj bir gelen arama veya görüntülü sohbet bildirimiyse yalnızca arama sonlandırılmadan önceki kısa bir süre boyunca anlamlı olur. Mesaj bir etkinlik davetiyesiyse etkinlik sona erdikten sonra alındığında bir işe yaramaz.

Android ve Web/JavaScript'te bir mesajın maksimum ö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 iletiyi saklayıp iletmeye çalıştığı maksimum süreye karşılık gelir. Bu alanı içermeyen istekler varsayılan olarak en fazla dört haftalık bir süreye sahiptir.

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

  • Görüntülü sohbet gelen aramaları
  • Süresi dolan davetiye etkinlikleri
  • Takvim etkinlikleri

Bir mesajın ömrünü belirtmenin bir başka avantajı da FCM'ün, ömrü 0 saniye olan mesajlara daraltılabilir mesaj azaltma işlemi uygulamamasıdır. FCM, "hemen veya hiç" teslim edilmesi gereken iletilerin en iyi şekilde işlenmesini sağlar. time_to_live değerinin 0 olması, hemen teslim edilemeyen mesajların silindiği anlamına gelir. Ancak bu tür mesajlar hiçbir zaman depolanmadığından, bildirim mesajları göndermek için en iyi gecikmeyi 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"
      }
    }
  }
}

Mesajın kullanım ömrü

Bir uygulama sunucusu FCM adresine mesaj gönderip bir mesaj kimliği aldığında, mesajın cihaza teslim edildiği anlamına gelmez. Bunun yerine, teslimat için kabul edildiği anlamına gelir. Kabul edildikten sonra mesajın ne olacağı birçok faktöre bağlıdır.

En iyi senaryoda cihaz FCM ağına bağlıysa ekran açıktır ve kısıtlama kısıtlaması yoksa mesaj hemen teslim edilir.

Cihaz bağlı ancak Doze modundaysa düşük öncelikli bir mesaj, cihaz Doze modundan çıkana kadar FCM tarafından saklanır. collapse_key işareti burada devreye girer: Aynı daraltma anahtarına (ve kayıt jetonuna) sahip, saklanmış ve dağıtılmasını bekleyen bir mesaj varsa eski mesaj atılır ve yeni mesaj onun yerini alır (yani eski mesaj yeni mesaj tarafından daraltılır). Ancak daraltma anahtarı ayarlanmazsa hem yeni hem de eski mesajlar gelecekte yayınlanmak üzere depolanır.

Cihaz FCM'e bağlı değilse mesaj, bağlantı kurulana kadar saklanır (yine daraltma anahtarı kurallarına uyulur). Bağlantı kurulduğunda FCM bekleyen tüm mesajları cihaza iletir. Cihaz tekrar bağlanmazsa (örneğin, fabrika ayarlarına sıfırlandıysa) zaman aşımı nedeniyle mesaj silinir ve FCM depolama alanından kaldırılır. time_to_live işareti ayarlanmadığı sürece varsayılan zaman aşımı dört haftadır.

Bir iletinin teslimiyle ilgili daha fazla bilgi edinmek için:

    Android veya Apple platformlarında mesajların teslimatı hakkında daha fazla bilgi edinmek için Apple ve Android cihazlarda gönderilen ve açılan mesajların sayısının yanı sıra Android uygulamaları için "gösterim" (kullanıcı tarafından görüntülenen bildirimler) verilerini kaydeden FCMraporlama kontrol paneline bakın.

Doğrudan kanal mesajlaşma özelliğinin etkin olduğu Android cihazlarda, cihaz bir aydan uzun süredir FCM'e bağlanmamışsa 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 müşteriniz onDeletedMessages() geri çağırma işlevini alır. Uygulama, genellikle uygulama sunucusundan tam senkronizasyon isteğinde bulunarak durumu düzgün bir şekilde ele alabilir.

Son olarak, FCM cihaza mesaj göndermeye çalışırken uygulamanın yüklenmesi kaldırılırsa FCM bu mesajı hemen atar ve kayıt jetonunu geçersiz kılar. Bu cihaza mesaj gönderme denemeleri NotRegistered hatasıyla sonuçlanır.

Kısıtlama ve kotalar

Amacımız, FCM aracılığıyla gönderilen tüm iletileri her zaman teslim etmektir. Ancak her iletinin gönderilmesi bazen genel olarak kötü bir kullanıcı deneyimine yol açabilir. Diğer durumlarda ise FCM'nin tüm gönderenler için ölçeklenebilir bir hizmet sunmasını sağlamak amacıyla sınırlar belirlememiz gerekir. Bu bölümde açıklanan sınır ve kota türleri, bu önemli faktörleri dengelememize yardımcı olur.

Aşağı akış mesajı sınırlama

HTTP v1 API, aşağı akış mesajları için proje başına dakika başına kotalar sundu. Dakika başına 600.000 mesajlık varsayılan kota, FCM geliştiricilerinin %99'undan fazlasını kapsarken sistemin kararlılığını korur ve ani artış gösteren projelerin etkisini en aza indirir.

Ani trafik artışları, kota aşıldı hatalarına neden olabilir. Kota aşımı senaryosuna göre sistem, kota bir sonraki dakika doldurulana kadar HTTP durum kodu 429'u (QUOTA_EXCEEDED) sunar. 429 yanıtları, aşırı yüklenme durumlarında da döndürülebilir. Bu nedenle, 429'ları yayınlanan önerilere göre ele almanız önemle tavsiye edilir.

Unutmayın:

  • Aşağı akış kotası, istekleri değil iletileri ölçer.
  • İstemci hataları (HTTP durum kodu 400-499) sayılır (429'lar hariç).
  • Kotalar dakika başınadır, ancak bu dakikalar saatle uyumlu değildir.

İzleme kotası

Kotayı, kullanımı ve hataları Google Cloud Console'da görüntüleyebilirsiniz:

  1. Google Cloud konsoluna gidin.
  2. API'ler ve hizmetler'i seçin.
  3. Tablo listesinden Firebase Cloud Messaging API'yi seçin.
  4. KOTA VE SİSTEM SINIRLARI'nı seçin.

NOT: Bu grafikler, kota dakikalarıyla tam olarak zaman açısından uyumlu değildir. Yani trafik kotanın altında göründüğünde 429 hataları yayınlanabilir.

Kota artışı isteme

Kota artışı istemeden önce aşağıdakilerden emin olun:

  • Kullanımınız, günde en az 5 dakika boyunca düzenli olarak kotanın %80'inden fazlaysa
  • Özellikle yoğun trafik sırasında istemci hata oranınız %5'in altındadır.
  • Geniş ölçekte mesaj göndermeyle ilgili en iyi uygulamaları takip edin.

Bu ölçütleri karşılıyorsanız %25'e varan kota artışı isteği gönderebilirsiniz. FCM, isteği yerine getirmek için gerekli tüm çabayı gösterir (artış garanti edilemez).

Yaklaşan bir lansman veya geçici etkinlik nedeniyle daha fazla yayın mesajı kotasına ihtiyacınız varsa isteğin işleme alınması için yeterli süre tanımak amacıyla kotanızı en az 15 gün önceden isteyin. Büyük istekler (dakikada 18 milyondan fazla ileti) için en az 30 gün önceden bildirim gönderilmesi gerekir. Lansman ve özel etkinlik istekleri, istemci hata oranı ve en iyi uygulamalar koşullarına tabi olmaya devam eder.

FCM kotaları ile ilgili SSS bölümünü de inceleyin.

Konu mesajı sınırı

Konu aboneliği ekleme/kaldırma hızı, proje başına 3.000 QPS ile sınırlıdır.

İleti gönderme hızları için Dağıtım Düzenleme başlıklı makaleyi inceleyin.

Çıkış sayısı kısıtlaması

Mesaj yayma işlemi, birden fazla cihaza mesaj gönderme işlemidir (ör. konuları ve grupları hedeflediğinizde ya da kitleleri veya kullanıcı segmentlerini hedeflemek için Bildirim oluşturucuyu kullandığınızda).

Mesaj dağıtımı anlık değildir. Bu nedenle, bazen aynı anda birden fazla dağıtım işlemi devam ediyor olabilir. Proje başına eşzamanlı mesaj dağıtım sayısını 1.000 ile sınırlandırırız. Bunun ardından, devam eden dağılma işlemlerinden bazıları tamamlanana kadar ek dağılma isteklerini reddedebilir veya isteklerin yayılımını erteleyebiliriz.

Gerçekleştirilebilen gerçek dağılım oranı, aynı anda dağılım isteğinde bulunan projelerin sayısından etkilenir. Tek bir proje için 10.000 istem/saniyelik bir dağıtım oranı yaygındır ancak bu sayı bir garanti değildir ve sistemdeki toplam yükün bir sonucudur. Mevcut dağıtım kapasitesinin, dağıtım istekleri arasında değil, projeler arasında bölündüğünü unutmayın. Dolayısıyla, projenizde devam eden iki dağıtım varsa her dağıtım, mevcut dağıtım oranının yalnızca yarısını görür. Yayma hızınızı en üst düzeye çıkarmanın önerilen yolu, aynı anda yalnızca bir etkin yayına sahip olmaktır.

Daraltılabilir mesaj azaltma

Yukarıda açıklandığı gibi, daraltılabilir mesajlar, birbirinin üzerine daraltılmak üzere tasarlanmış içeriksiz bildirimlerdir. Bir geliştiricinin bir uygulamada aynı mesajı çok sık tekrarlaması durumunda, kullanıcının pili üzerindeki etkiyi azaltmak için mesajları geciktirir (düzenleriz).

Örneğin, tek bir cihaza çok sayıda yeni e-posta senkronizasyonu isteği gönderirseniz cihazın daha düşük bir ortalama hızda senkronize edilebilmesi için bir sonraki e-posta senkronizasyonu isteğini birkaç dakika geciktirebiliriz. Bu sınırlama, yalnızca kullanıcının yaşadığı pil etkisini sınırlamak için yapılır.

Kullanım alanınız yüksek seri çekim gönderme kalıpları gerektiriyorsa daraltılamayan mesajlar doğru seçim olabilir. Bu tür mesajlarda, pil maliyetini azaltmak için içeriği bu mesajlara eklediğinizden emin olun.

Katlanabilir mesajları, cihaz başına uygulama başına 20 mesajlık bir paketle sınırlandırıyoruz. Bu paket 3 dakikada bir 1 mesajla yenilenir.

XMPP sunucusu sınırlama

FCM XMPP sunucularına bağlanma hızınızı proje başına dakikada 400 bağlantıyla sınırlandırırız. Bu durum, iletilerin teslim edilmesi açısından sorun oluşturmaz ancak sistemin kararlılığını sağlamak için önemlidir. FCM, her proje için paralel olarak 2.500 bağlantıya izin verir.

XMPP ile yayın mesajı için FCM, yayın hedef sunucularının aşırı yüklenmesini önlemek amacıyla yayın mesajlarını proje başına dakikada 1.500.000 ile sınırlandırır.

Kötü uygulama davranışından kaynaklanan pil tüketimine karşı koruma sağlamak için cihaz başına yukarı akış iletilerini dakikada 1.000 ile sınırlandırırız.

Tek bir cihaza gönderilen maksimum ileti hızı

Android için tek bir cihaza dakikada 240 ve saatte 5.000 mesaj gönderebilirsiniz. Bu yüksek eşik, kullanıcıların sohbet üzerinden hızlı bir şekilde etkileşimde bulunduğu durumlar gibi kısa süreli trafik artışlarına izin vermek içindir. Bu sınır, gönderme mantığıyla ilgili hataların cihazdaki pilin yanlışlıkla boşalmasını önler.

iOS için, hız APN sınırlarını aştığında hata döndürürüz.

FCM bağlantı noktaları ve güvenlik duvarınız

Kuruluşunuzda internete gelen veya internetten giden trafiği kısıtlayan bir güvenlik duvarı varsa ağınızdaki cihazların mesaj alabilmesi için mobil cihazların FCM'e bağlanmasına izin verecek şekilde yapılandırmanız gerekir. FCM genellikle 5228 bağlantı noktasını kullanır ancak bazen 443, 5229 ve 5230 bağlantı noktalarını da kullanır.

IP aralığımız çok sık değiştiği ve güvenlik duvarı kurallarınız güncelliğini yitirerek kullanıcılarınızın deneyimini etkileyebileceği için FCM, ağınıza bağlanan cihazlar için belirli IP'ler sağlamaz. İdeal olarak, IP kısıtlaması olmadan 5228-5230 ve 443 numaralı bağlantı noktalarını izin verilenler listesine ekleyin. Ancak IP kısıtlaması yapmanız gerekiyorsa goog.json dosyasında listelenen tüm IP adreslerini izin verilenler listesine eklemeniz gerekir. Bu büyük liste düzenli olarak güncellenir ve kurallarınızı aylık olarak güncellemeniz önerilir. Güvenlik duvarı IP kısıtlamalarından kaynaklanan sorunlar genellikle aralıklarla ortaya çıkar ve teşhis edilmesi zordur.

IP adresleri yerine izin verilenler listesine eklenebilecek bir dizi alan adı sunuyoruz. Bu ana makine adları aşağıda listelenmiştir. Ek ana makine adları kullanmaya başlarsak buradaki listeyi güncelleyeceğiz. Güvenlik duvarı kuralınız için alan adları kullanmak, güvenlik duvarı cihazınızda işe yarayabilir veya yaramayabilir.

Açılacağı TCP bağlantı noktaları:

  • 5228
  • 5229
  • 5230
  • 443

Açılacağı ana makine adları:

  • mtalk.google.com
  • mtalk4.google.com
  • mtalk-staging.google.com
  • mtalk-dev.google.com
  • alt1-mtalk.google.com
  • alt2-mtalk.google.com
  • alt3-mtalk.google.com
  • alt4-mtalk.google.com
  • alt5-mtalk.google.com
  • alt6-mtalk.google.com
  • alt7-mtalk.google.com
  • alt8-mtalk.google.com
  • android.apis.google.com
  • device-provisioning.googleapis.com
  • firebaseinstallations.googleapis.com

Ağ Adresi Dönüştürme ve/veya Durum Tabanlı Paket İncelemesi güvenlik duvarları:

Ağınızda Ağ Adresi Dönüşümü (NAT) veya Durum Tabanlı Paket İncelemesi (SPI) uygulanıyorsa 5228-5230 bağlantı noktaları üzerinden bağlantılarımız için 30 dakika veya daha uzun bir zaman aşımı uygulayın. Bu sayede, kullanıcılarınızın mobil cihazlarının pil tüketimini azaltırken güvenilir bağlantı sağlayabiliriz.

VPN etkileşimleri ve atlanabilirlik

Firebase Cloud Messaging, telefondan sunucuya push mesajlaşma bağlantısının güvenilir ve mümkün olduğunca sık kullanılabilmesi için çeşitli adımlar atar. VPN kullanımı bu çabayı karmaşıklaştırır.

VPN'ler, FCM'ün güvenilirliği ve pil ömrünü en üst düzeye çıkarmak için bağlantısını ayarlaması gereken temel bilgileri maskeler. Bazı durumlarda VPN'ler, uzun süreli bağlantıları etkin bir şekilde keserek kaçırılan veya geciken mesajlar ya da yüksek pil maliyeti nedeniyle kötü bir kullanıcı deneyimine neden olur. VPN buna izin verecek şekilde yapılandırıldığında, güvenilir ve pil dostu bir deneyim sağlamak için VPN'yi şifrelenmiş bir bağlantı (temel ağ kablosuz veya LTE üzerinden) kullanarak atlarız. FCM'ın atlanabilir VPN'leri kullanımı FCM Push Bildirimi kanalına özgüdür. Kayıt trafiği gibi diğer FCM trafiği, etkinse VPN'yi kullanır. FCM bağlantısı VPN'i atladığı zaman, VPN'nin sağlayabileceği IP maskeleme gibi ek avantajları kaybeder.

Farklı VPN'lerde, atlanıp atlanamayacağını kontrol etmek için farklı yöntemler bulunur. Talimatlar için kullandığınız VPN'nin dokümanlarına bakın.

VPN atlanabilir olacak şekilde yapılandırılmamışsa Firebase Cloud Messaging, sunucuya bağlanmak için VPN ağını kullanır. Bu durum, mesajların gecikmesine neden olabilir ve Cloud Messaging, VPN bağlantısı üzerinden bağlantıyı korumaya çalıştığından daha fazla pil kullanımına yol açabilir.

Kimlik bilgileri

Hangi FCM özelliklerini uyguladığınıza bağlı olarak Firebase projenizdeki aşağıdaki kimlik bilgilerine ihtiyacınız olabilir:

Proje kimliği FCM v1 HTTP uç noktasına yapılan isteklerde kullanılan, Firebase projenizin benzersiz tanımlayıcısı. Bu değer, Firebase konsolunun Ayarlar bölmesinde bulunur.
Kayıt jetonu

Her istemci uygulaması örneğini tanımlayan benzersiz bir jeton dizesi. Kayıt jetonu, tek cihaz ve cihaz grubu mesajlaşma için gereklidir. Kayıt jetonlarının gizli tutulması gerektiğini unutmayın.

Gönderen kimliği Firebase projenizi oluşturduğunuzda oluşturulan benzersiz bir sayısal değerdir. Firebase konsolunun Ayarlar bölmesinin Cloud Messaging sekmesinde bulunur. Gönderen kimliği, istemci uygulamasına mesaj gönderebilen her göndereni tanımlamak için kullanılır.
Erişim jetonu HTTP v1 API'sine yapılan istekleri yetkilendiren kısa ömürlü bir OAuth 2.0 jetonu. Bu jeton, Firebase projenize ait bir hizmet hesabıyla ilişkilendirilmiş. Erişim jetonları oluşturmak ve döndürmek için Gönderme İsteklerini Yetkilendirme bölümünde açıklanan adımları uygulayın.
Sunucu anahtarı (**desteği sonlandırılan** eski protokoller için)

Desteği sonlandırılan Firebase Cloud Messaging eski protokoller üzerinden ileti gönderme dahil olmak üzere, uygulama sunucunuzu Google hizmetlerine erişmek için yetkilendiren bir sunucu anahtarı.

Önemli: Sunucu anahtarını istemci kodunuzun hiçbir yerine eklemeyin. Ayrıca, uygulama sunucunuzu yetkilendirmek için yalnızca sunucu anahtarları kullandığınızdan emin olun. Android, Apple platformu ve tarayıcı anahtarları FCM tarafından reddediliyor.