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.

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 tarafından otomatik olarak işlenir.
  • İstemci uygulaması tarafından işlenen veri mesajları.

Bildirim mesajları, kullanıcı tarafından görülebilen önceden tanımlanmış bir dizi anahtar 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önderilmesi dışında, her iki mesaj türü için maksimum yük 4.096 bayttır. Bu durumda 1.000 karakter sınırı uygulanır.

Senaryoyu kullanma Nasıl gönderilir?
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 tarafından belirlenir. Bildirim mesajları, kullanıcının görebileceği önceden tanımlanmış bir anahtar grubuna ve isteğe bağlı olarak özel anahtar/değer çiftlerinden oluşan bir veri yüküne sahiptir.
  1. Cloud Functions gibi güvenilir bir ortamda veya uygulama sunucunuzda Yönetici SDK'sını ya da HTTP v1 API'sini kullanın. notification anahtarını ayarlayın. İsteğe bağlı veri yükü olabilir. Her zaman daraltılabilir.

    Görüntüleme bildirimleri ve istek yükleriyle ilgili bazı örneklere göz atın.

  2. Bildirim oluşturucu: Mesaj Metni, Başlık vb. bilgileri girip gönderin. Özel veriler sağlayarak isteğe bağlı veri yükü ekleyin.
Veri mesajı İstemci uygulaması, veri mesajlarını işlemekle sorumludur. Veri mesajları yalnızca ayrılmış anahtar adları olmayan özel anahtar/değer çiftlerine sahiptir (aşağıya bakın). Cloud Functions gibi güvenilir bir ortamda veya uygulama sunucunuzda Yönetici SDK'sını ya da FCM Sunucu Protokolleri'ni kullanın. Gönderme isteğinde data anahtarını ayarlayın.

Uygulamanız arka planda çalışırken FCM SDK'sının bildirimi otomatik olarak göstermesini istediğinizde bildirim mesajlarını kullanın. İletileri kendi istemci uygulamanızın koduyla 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, FCM bildirim yükünün gösterilmesini, istemci uygulaması ise veri yükünü işler.

Bildirim mesajları

Test, pazarlama ve kullanıcıları yeniden etkileme amacıyla Firebase konsolunu kullanarak bildirim mesajları gönderebilirsiniz. Firebase konsolu, pazarlama mesajlarını iyileştirmenize ve geliştirmenize yardımcı olmak için analizlere dayalı A/B testi sunar.

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 grubuyla ayarlayın. Örneğin, bir anlık mesajlaşma uygulamasında JSON biçimli bir bildirim mesajı aşağıda verilmiştir. Kullanıcı, cihazında "Portekiz - Danimarka" başlıklı ve "Harika maç!" metinli bir mesaj görmeyi bekleyebilir:

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

Bildirim iletileri, uygulama arka plandayken bildirim tepsisine teslim edilir. Ön plandaki uygulamalarda mesajlar, 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 belgelerine bakın.

Veri mesajları

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

Örneğin, yukarıdakiyle aynı anlık mesajlaşma uygulamasında, bilgilerin ortak data anahtarı içinde kapsüllendiği ve istemci uygulamasının içeriği yorumlamasının beklendiği JSON biçimli bir mesajı aşağıda görebilirsiniz:

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

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

Veri mesajları için şifreleme

Android Taşıma Katmanı (FCM mimarisine bakın) nokta nokta ş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 Capillary veya DTLS gibi harici çözümler de mevcuttur.

İ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 bölümündeki Gelişmiş seçenekler'de Ö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"
    }
  }
}

Platformlar arası mesaj özelleştirme

Hem Firebase Admin SDK hem de FCM v1 HTTP protokolü, mesaj isteklerinizin message nesnesinde bulunan tüm alanları ayarlamasına olanak tanır. Bunlardan bazıları:

  • Mesajı alan tüm uygulama örnekleri tarafından yorumlanacak ortak bir alan kümesi.
  • Yalnızca belirtilen platformda çalışan uygulama örnekleri tarafından yorumlanan AndroidConfig ve WebpushConfig gibi platforma özel alan kümeleri.

Platforma özel bloklar, farklı platformlar için mesajları özelleştirme esnekliği sunarak alındığında doğru şekilde işlenmelerini sağlar. 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:

  • Tüm platformlardaki (Apple, Android ve web) uygulama örneklerini hedefleme
  • Konulara mesaj gönderme

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

Platforma özel alanlar ne zaman kullanılır?

Aşağıdaki işlemleri yapmak istediğinizde platforma özgü 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 bildirim göndermek ancak Android'e göndermemek için iki ayrı alan grubu kullanmanız gerekir (biri Apple, diğeri web için).

Belirli teslimat seçenekleriyle ileti gönderirken bu seçenekleri 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ı yorumlayabilmesidir. Örneğin, Android'de TTL, saniye cinsinden bir geçerlilik bitiş süresi olarak ayarlanırken Apple'da geçerlilik bitiş tarihi olarak ayarlanır.

Örnek: Platforma özel teslimat 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 özel bazı geçersiz kılmalar da gönderir. Özellikle istek:

  • Android ve web platformları için uzun bir TTL belirlerken APNs (Apple platformları) mesaj önceliğini düşük bir ayara getirir.
  • Android ve Apple'da kullanıcının bildirime dokunmasının sonucunu tanımlamak için uygun anahtarları ayarlar. Bu anahtarlar sırasıyla click_action ve category'dir.
{
  "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övdesindeki platforma özgü bloklarda bulunan anahtarlar hakkında ayrıntılı bilgi için HTTP v1 referans belgelerine 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 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 ve JavaScript/Web'de Topic üzerinden desteklenir. Ayrıntılar için bu bölümdeki açıklamaları ve ilgili referans belgelerini inceleyin.

Daraltılamayan ve daraltılabilen mesajlar

Daraltılamayan bir ileti, her bir iletinin cihaza teslim edildiğini gösterir. Daraltılamayan mesajlar, veri almak için sunucuyla iletişim kurmak üzere mobil uygulamaya gönderilen içeriksiz bir "ping" gibi daraltılabilen mesajları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 anlık mesajlaşma uygulamasında her mesaj farklı içeriklere sahip olduğundan tüm mesajları teslim etmek istersiniz.

Android'de, daraltılmadan saklanabilecek ileti sayısı 100 ile sınırlıdır. Sınıra ulaşılırsa depolanan tüm mesajlar silinir. Cihaz tekrar internete bağlandığında sınıra ulaşıldığını belirten özel bir mesaj alır. Uygulama daha sonra durumu uygun şekilde ele alabilir. Genellikle uygulama sunucusundan tam senkronizasyon isteğinde bulunur.

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

Daraltılabilir mesajların yaygın kullanım alanlarından biri, 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 ileti önemlidir.

Android'de bir mesajı daraltılabilir olarak işaretlemek için mesaj yüküne collapse_key parametresini ekleyin. Daraltma anahtarı, varsayılan olarak Firebase konsolunda kayıtlı uygulama paket adıdır. FCM sunucusu, cihaz başına dört farklı daraltılabilir mesajı aynı anda depolayabilir. Bu mesajların her biri farklı bir daraltma anahtarına sahiptir. Bu sayıyı aşarsanız FCM yalnızca dört daraltma anahtarını saklar. Hangi anahtarların saklanacağı garanti edilmez.

Yük içermeyen konu iletileri varsayılan olarak daraltılabilir. Bildirim mesajları her zaman daraltılabilir ve collapse_key parametresini yoksayar.

Hangisini kullanmalıyım?

Uygulamanızın daraltılamayan mesajlar kullanması gerekmiyorsa daraltılabilir mesajlar performans açısından daha iyi bir seçimdir. Ancak, daraltılabilir mesajlar kullanıyorsanız FCM'nın herhangi bir zamanda kayıt jetonu başına en fazla dört farklı daraltma anahtarı kullanmasına izin verildiğini unutmayın.FCM Bu sayıyı aşmamalısınız. Aksi takdirde, öngörülemeyen sonuçlar ortaya çıkabilir.

Senaryoyu kullanma Nasıl gönderilir?
Daraltılamaz Her mesaj, istemci uygulaması için önemlidir ve teslim edilmesi gerekir. Bildirim iletileri hariç tüm iletiler varsayılan olarak daraltılamaz.
Daraltılabilir Eski ve alakalı bir mesajı istemci uygulaması için 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 iletiler veya eski bildirim iletileri. İleti isteğinizde uygun parametreyi ayarlayın:
  • Android'de collapseKey
  • Apple'da apns-collapse-id
  • Web'de Topic
  • collapse_key eski protokollerde (tüm platformlar)

İ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ı tehdit eden 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önetmek ve uygunsuzluğunuzdan kaynaklanan zararların tümü yalnızca sizin sorumluluğunuzdadır. 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 şekilde 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 olur olmaz iletir. Bu durum çoğu durumda sorun olmasa 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 mesajı, 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öndermede 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 FCM tarafından düşük öncelikli bir mesaj 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 asla 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 mesaj sayısının yanı sıra Android uygulamaları için "gösterim" (kullanıcılar tarafından görülen bildirimler) verilerini kaydeder.

Doğrudan kanal mesajlaşmasının etkin olduğu Android cihazlarda, cihaz bir aydan uzun süredir FCM'a 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.

Kısıtlama ve kotalar

Hedefimiz, FCM üzerinden gönderilen her mesajı her zaman teslim etmektir. Ancak her mesajın teslim edilmesi bazen genel kullanıcı deneyiminin kötü olmasına neden olur. 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ırlaması

HTTP v1 API, aşağı akış mesajlaşma için proje başına dakika başına kotalar sunmuştur. Dakikada 600 bin mesajlık varsayılan kota, FCM geliştiricilerin% 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ı senaryosunda sistem, kota bir dakika içinde yeniden doldurulana kadar HTTP durum kodu 429'u (QUOTA_EXCEEDED) sunar. Aşırı yüklenme durumlarında da 429 yanıtları döndürülebilir. Bu nedenle, 429'ları yayınlanmış önerilere göre işlemeniz ö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şına belirlenir ancak bu dakikalar saatle uyumlu değildir.

İzleme kotası

Google Cloud Console'da kota, kullanım ve hataları 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 uyumlu değildir. Bu nedenle, trafik kotanın altında görünse bile 429 yanıtları sunulabilir.

Kota artışı isteme

Kota artışı istemeden önce şunlardan emin olun:

  • Kullanımınız, günlük olarak en az 5 dakika boyunca düzenli olarak kotanın% 80'i veya daha fazlası.
  • Özellikle yoğun trafik sırasında% 5'ten düşük bir istemci hatası oranına sahipsiniz.
  • Toplu mesaj göndermeyle ilgili en iyi uygulamalara uyuyorsanız.

Bu ölçütleri karşılıyorsanız% 25'e kadar kota artışı isteği gönderebilirsiniz. FCM, isteği karşılamak için her türlü pratik çabayı gösterecektir (artış garanti edilemez).

Yaklaşan bir lansman veya geçici etkinlik nedeniyle daha fazla aşağı akış mesajlaşma kotasına ihtiyacınız varsa isteğin işlenmesi için yeterli süre tanımak amacıyla kotanızı en az 15 gün önceden isteyin. Büyük istekler (>18 milyon ileti/dakika) için en az 30 gün önceden bildirimde bulunulması gerekir. Lansmanlar ve özel etkinlik istekleri, istemci hatası oranı ve en iyi uygulamalar şartlarına tabidir.

Ayrıca FCM kotaları ile ilgili SSS bölümüne bakın.

Konu mesajı sınırı

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

İleti gönderme hızları için Fanout Throttling başlıklı makaleyi inceleyin.

Fanout sınırlaması

İleti dağıtımı, konuları ve grupları hedeflediğinizde veya kitleleri ya da kullanıcı segmentlerini hedeflemek için Bildirim Oluşturucu'yu kullandığınızda olduğu gibi, bir iletiyi birden fazla cihaza gönderme işlemidir.

Mesaj dağıtımı anında gerçekleşmez. Bu nedenle, bazen aynı anda birden fazla dağıtım işlemi devam edebilir. Proje başına eşzamanlı mesaj dağıtımı sayısı 1.000 ile sınırlıdır. Bu sınıra ulaşıldıktan sonra ek dağıtım isteklerini reddedebilir veya devam eden dağıtımlardan bazıları tamamlanana kadar isteklerin dağıtımını erteleyebiliriz.

Gerçekleşebilecek fanout oranı, aynı anda fanout isteyen proje sayısından etkilenir. Tek bir proje için 10.000 sorgu/sn'lik bir dağıtım hızı yaygın olsa da bu sayı garanti edilmez ve sistemdeki toplam yükün sonucudur. Kullanılabilir dağıtım kapasitesinin, dağıtım istekleri arasında değil, projeler arasında bölündüğünü unutmayın. Bu nedenle, projenizde devam eden iki dağıtım varsa her dağıtım yalnızca kullanılabilir dağıtım hızının yarısını görür. Dağıtım hızınızı en üst düzeye çıkarmanın önerilen yolu, aynı anda yalnızca bir etkin dağıtımın devam etmesini sağlamaktır.

Daraltılabilir mesaj sınırlama

Yukarıda açıklandığı gibi, daraltılabilir mesajlar, birbirinin üzerinde daraltılmak üzere tasarlanmış, içerik içermeyen bildirimlerdir. Bir geliştirici, aynı mesajı bir uygulamaya çok sık gönderirse kullanıcının pili üzerindeki etkiyi azaltmak için mesajları geciktiririz (sınırlama).

Ö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 olabilmesi için bir sonraki e-posta senkronizasyonu isteğini birkaç dakika geciktirebiliriz. Bu sınırlama, kullanıcının yaşadığı pil etkisini sınırlamak için kesinlikle gereklidir.

Kullanım alanınızda yüksek hacimli toplu e-posta gönderme kalıpları gerekiyorsa daraltılamayan mesajlar doğru seçim olabilir. Bu tür mesajlarda pil maliyetini düşürmek için içeriği eklediğinizden emin olun.

Daraltılabilir mesajları, cihaz başına uygulama başına 20 mesajlık bir seriyle sınırlandırırız. 3 dakikada 1 mesaj yenilenir.

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

Android'de tek bir cihaza dakikada 240, saatte 5.000 mesaj gönderebilirsiniz. Bu yüksek eşik, kullanıcıların sohbet üzerinden hızlı etkileşimde bulunduğu gibi kısa süreli trafik artışlarına izin vermek için belirlenmiştir. Bu sınır, gönderme mantığındaki hataların cihazın pilini yanlışlıkla tüketmesini önler.

iOS'te hız, APNs sınırlarını aştığında hata döndürülür.

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

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

Ağınıza bağlanan cihazlar için FCM, IP aralığımız çok sık değiştiğinden ve güvenlik duvarı kurallarınız güncelliğini yitirerek kullanıcılarınızın deneyimini etkileyebileceğinden belirli IP'ler sağlamaz. İdeal olarak, izin verilenler listesine 5228-5230 ve 443 numaralı bağlantı noktalarını IP kısıtlaması olmadan ekleyin. Ancak IP kısıtlaması uygulamanı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. Kurallarınızı ayda bir kez güncellemeniz önerilir. Güvenlik duvarı IP kısıtlamalarının neden olduğu sorunlar genellikle aralıklı olarak 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 bu listeyi güncelleyeceğiz. Güvenlik duvarı kuralınız için alan adlarını kullanmak, güvenlik duvarı cihazınızda işe yarayabilir veya yaramayabilir.

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

  • 5228
  • 5229
  • 5230
  • 443

Açılacak 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 Çevirisi ve/veya Durumlu Paket İnceleme güvenlik duvarları:

Ağınızda Ağ Adresi Çevirisi (NAT) veya Durumlu Paket Denetimi (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 gönderilen anlık mesajlaşma bağlantısının güvenilir ve mümkün olduğunca sık kullanılabilir olmasını sağlamak için çeşitli adımlar atar. VPN kullanımı bu çalışmayı zorlaştırır.

VPN'ler, FCM'nin bağlantısını güvenilirliği ve pil ömrünü en üst düzeye çıkaracak şekilde ayarlaması için gereken temel bilgileri maskeler. Bazı durumlarda VPN'ler, uzun süreli bağlantıları aktif olarak keserek kaçırılan veya geciken mesajlar ya da yüksek pil tüketimi nedeniyle kötü bir kullanıcı deneyimine yol açar. VPN, bunu yapmamıza izin verecek şekilde yapılandırıldığında güvenilir ve pil dostu bir deneyim sağlamak için şifrelenmiş bir bağlantı (temel ağ kablosuz veya LTE üzerinden) kullanarak VPN'yi atlarız. FCM'nın atlanabilir VPN'leri kullanması, FCM push bildirimi kanalıyla sınırlıdır. Kayıt trafiği gibi diğer FCM trafiği, etkinse VPN'yi kullanır. FCM bağlantısı VPN'yi atladığında VPN'nin sağlayabileceği ek avantajları (ör. IP maskeleme) kaybeder.

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

VPN atlanabilir şekilde yapılandırılmamışsa Firebase Cloud Messaging, sunucuya bağlanmak için VPN ağını kullanır. Bu durum, mesajların geciktiği zaman aralıklarına ve Cloud Messaging, VPN bağlantısı üzerinden bağlantıyı sürdürmeye çalışırken daha fazla pil kullanımına neden olabilir.

Kimlik bilgileri

Hangi FCM özelliklerini uyguladığınıza bağlı olarak Firebase projenizden 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şması 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 sayısal değerdir. Firebase konsolunun Cloud Messaging sekmesindeki Firebase Ayarlar bölmesinde 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 yönelik istekleri yetkilendiren kısa ömürlü bir OAuth 2.0 jetonu. Bu jeton, Firebase projenize ait bir hizmet hesabıyla ilişkilendirilir. 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ı (**kullanımdan kaldırılan** eski protokoller için)

Uygulama sunucunuzun, Google hizmetlerine erişmesine (kullanımdan kaldırılan Firebase Cloud Messaging eski protokolleri aracılığıyla ileti gönderme dahil) yetki veren bir sunucu anahtarı.

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