FCM iletileri hakkında

Firebase Cloud Messaging (FCM), çok çeşitli mesajlaşma seçenekleri ve özellikleri sunar. Bu sayfadaki bilgilerin amacı, farklı FCM mesajı türlerini ve bunlarla neler yapabileceğinizi anlamanıza yardımcı olmaktır.

Mesaj türleri

FCM ile istemcilere iki tür mesaj gönderebilirsiniz:

  • Bazen "gösterilen mesajlar" olarak düşünülen bildirim mesajları. Bunlar FCM SDK'sı tarafından otomatik olarak işlenir.
  • İstemci uygulaması tarafından işlenen veri mesajları.

Bildirim mesajları, önceden tanımlanmış bir dizi kullanıcı tarafından görülebilen anahtarlar 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ı veri yükü içerebilir. Her iki mesaj türü için de maksimum yük 4.096 bayttır. 1.000 karakterlik bir sınırı zorunlu kılan Firebase konsolundan mesaj gönderme durumları hariçtir.

Senaryoyu kullan Nasıl gönderilir?
Bildirim mesajı FCM SDK, arka planda çalışırken istemci uygulaması adına mesajı son kullanıcı cihazlarına gösterir. Aksi takdirde, bildirim alındığında uygulama ön planda çalışıyorsa davranışı, uygulamanın kodu belirler. Bildirim mesajlarında, önceden tanımlanmış bir dizi kullanıcı tarafından görülebilen 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 ya da HTTP v1 API'yi kullanın. notification anahtarını ayarla. İsteğe bağlı veri yükü olabilir. Her zaman daraltılabilir.

    Bazı bildirim görüntüleme örneklerine göz atın ve istek yüklerini gönderin.

  2. Bildirim oluşturucuyu kullanın: Mesaj Metni, Başlık vb. girip gönderin. Özel veriler sağlayarak isteğe bağlı veri yükü ekleyin.
Veri mesajı Veri mesajlarının işlenmesinden istemci uygulaması sorumludur. Veri mesajlarında, ayrılmış anahtar adları olmayan özel anahtar/değer çiftleri bulunur (aşağıya bakın). Cloud Functions veya uygulama sunucunuz gibi güvenilir bir ortamda, Admin SDK veya 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 otomatik olarak bildirim görüntülemesini istiyorsanız bildirim mesajlarını kullanın. Mesajları kendi istemci uygulaması kodunuzla işlemek istediğinizde veri mesajlarını kullanın.

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

Bildirim mesajları

Test etmek 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 sunar.

Yönetici SDK'sını veya FCM protokollerini kullanarak programatik olarak bildirim mesajları göndermek için notification anahtarını, bildirim mesajının kullanıcı tarafından görülebilen kısmı için önceden tanımlanmış gerekli anahtar/değer seçenekleri kümesiyle ayarlayın. Örneğin, IM uygulamasındaki JSON biçimli bir bildirim mesajını burada görebilirsiniz. Kullanıcı, cihazında "Portekiz - Danimarka" başlığı ve "harika eşleşme!" yazan bir mesaj görebilir.

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

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

Bildirim mesajları oluşturmak amacıyla 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 uygun anahtarı özel anahtar/değer çiftlerinizle ayarlayın.

Örneğin, yukarıdakiyle aynı IM uygulamasında bulunan JSON biçimli bir mesajı burada görebilirsiniz. Burada bilgiler ortak data anahtarında kapsüllenir ve istemci uygulamasının içeriği yorumlaması beklenir:

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

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

Veri mesajları için şifreleme

Android Taşıma Katmanı (FCM mimarisi bölümüne bakın) noktadan noktaya şifreleme kullanır. İhtiyaçlarınıza bağlı olarak, veri mesajlarına uçtan uca şifreleme eklemeye karar verebilirsiniz. FCM uçtan uca bir çözüm sunmamaktadır. Ancak Kılcal veya DTLS gibi harici çözümler mevcuttur.

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

Hem programatik olarak hem de Firebase konsolu aracılığıyla, isteğe bağlı özel anahtar/değer çiftleri yükü içeren bildirim mesajları gönderebilirsiniz. Bildirim oluşturucuda, Gelişmiş seçenekler'deki Özel veri alanlarını kullanın.

Hem bildirim hem de veri yüklerini içeren mesajları alırken uygulama davranışı, uygulamanın arka planda mı yoksa ön planda mı olduğuna (temel olarak uygulamanın alındığı anda etkin olup olmadığına) bağlıdır.

  • Uygulamalar arka planda çalışırken bildirim yükünü bildirim tepsisinde alır ve veri yükünü yalnızca kullanıcı bildirime dokunduğunda işler.
  • Ön plandayken uygulamanız her iki yükün de kullanılabilir olduğu bir mesaj nesnesi alır.

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

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

Mesajları platformlar genelinde özelleştirme

Hem Firebase Admin SDK hem FCM v1 HTTP protokolü, mesaj isteklerinizin message nesnesindeki tüm alanları ayarlamasına olanak tanır. Bu hizmet ve özellikler arasında aşağıdakiler bulunmaktadır:

  • mesajı alan tüm uygulama örnekleri tarafından yorumlanacak ortak bir alan kümesi.
  • AndroidConfig ve WebpushConfig gibi platforma özgü alan grupları yalnızca belirtilen platformda çalışan uygulama örnekleri tarafından yorumlanır.

Platforma özgü engellemeler, mesajları farklı platformlar için özelleştirme esnekliği sağlar. Böylece mesajların alındığında doğru bir şekilde ele alınırlar. FCM arka ucu, belirtilen tüm parametreleri dikkate alır ve mesajı her bir platform için özelleştirir.

Ortak alanlar ne zaman kullanılır?

Genel alanları şu durumlarda kullanabilirsiniz:

  • Apple, Android ve web gibi tüm platformlarda 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ğıdakileri yapmak istediğinizde platforma özgü alanları kullanın:

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

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

Belirli teslimat seçeneklerine sahip iletiler gönderiyorsanız, bunları ayarlamak için platforma özel alanları kullanın. İsterseniz her platform için farklı değerler belirtebilirsiniz. Ancak, platformlar arasında temelde aynı değeri ayarlamak istediğinizde bile platforma özel alanları kullanmanız gerekir. Bunun nedeni, her platformun değeri biraz farklı yorumlayabilmesidir. Örneğin, geçerlilik süresi Android'de saniye cinsinden geçerlilik süresi, Apple'da ise geçerlilik bitiş tarihi olarak ayarlanır.

Örnek: platforma özel teslim 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. Bununla birlikte, platforma özel bazı geçersiz kılmalar da gönderir. İstekle ilgili daha ayrıntılı bilgi vermek gerekirse:

  • APN'lerin (Apple platformları) mesaj önceliğini düşük bir ayara ayarlarken, Android ve Web platformları için uzun geçerlilik süresi belirler
  • Android ve Apple'da (sırasıyla click_action ve category) bildirime dokunan bir kullanıcının bildirime dokunmasının sonucunu tanımlayan 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"
       }
     }
   }
 }

Mesaj gövdesinde platforma özgü bloklarda bulunan anahtarlarla ilgili tüm ayrıntılar için HTTP v1 referans belgelerine bakın. Mesaj gövdesini içeren gönderme istekleri oluşturma hakkında daha fazla bilgi için Gönderme İstekleri Oluşturma bölümüne bakın.

Teslimat seçenekleri

FCM, Android cihazlara gönderilen mesajlar için belirli bir teslim seçeneği grubu, Apple platformları ve web'de de benzer seçeneklere olanak tanır. Örneğin, "daraltılabilir" ileti davranışı, Android'de FCM collapse_key, Apple'da apns-collapse-id ve JavaScript/Web'de Topic ile desteklenir. Ayrıntılar için bu bölümdeki açıklamalara ve ilgili referans belgelere bakın.

Daraltılamayan ve daraltılamayan iletiler

Daraltılamaz mesajı, her bir mesajın cihaza teslim edildiğini gösterir. Daraltılamaz mesaj, veri getirmesi için sunucuyla iletişime geçmek üzere mobil uygulamaya içerik barındırmayan "ping" gibi daraltılabilir bir mesajın aksine bazı faydalı içerikler sunar.

Daraltılamaz mesajların tipik kullanım örnekleri, sohbet mesajları veya kritik mesajlardır. Örneğin, bir IM uygulamasında her mesajı teslim etmek istersiniz, çünkü her mesajın içeriği farklıdır.

Android'de, daraltma olmadan depolanabilecek mesaj sayısı 100 ile sınırlıdır. Bu 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. Daha sonra uygulama, genellikle uygulama sunucusundan tam senkronizasyon isteyerek durumu uygun 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 bir kullanım alanı, mobil uygulamaya sunucudaki verileri senkronize etmesini bildirmek için kullanılan mesajlardır. Kullanıcıları en son skorla güncelleyen bir spor uygulaması buna örnek olarak gösterilebilir. Yalnızca en yeni mesaj alakalıdır.

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 konsolunda kayıtlı uygulama paketi adıdır. FCM sunucusu, her cihaz için farklı bir daraltma anahtarına sahip dört farklı daraltılabilir mesajı aynı anda depolayabilir. Bu sayıyı aşarsanız FCM yalnızca dört daraltma anahtarı tutar ve hangilerinin tutulacağına dair herhangi bir garanti vermez.

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

Hangisini kullanmalıyım?

Daraltılabilir mesajlar, uygulamanızın daraltılamaz mesajlar kullanmak zorunda olmadığı sürece performans açısından daha iyi bir seçenektir. Ancak daraltılabilir mesajlar kullanıyorsanız FCM'nin, herhangi bir zamanda FCM tarafından kayıt jetonu başına 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 öngörülemeyen sonuçlara yol açabilir.

Senaryoyu kullan Nasıl gönderilir?
Daraltılamaz İstemci uygulaması için her mesaj önemlidir ve teslim edilmelidir. Bildirim mesajları hariç tüm mesajlar varsayılan olarak daraltılamaz.
Katlanabilir Eski ve ilgili bir mesajın istemci uygulamasıyla alakasız olmasına yol açan daha yeni bir mesaj olduğunda FCM, eski mesajı değiştirir. Örneğin: sunucudan bir veri senkronizasyonu başlatmak için kullanılan mesajlar veya eski 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)

İletinin önceliğini ayarlama

Aşağı akış mesajlarına dağıtım ö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 mesajların dağıtımı şu şekilde işler:

  • Normal öncelikli. Normal öncelikli mesajlar, uygulama ön plandayken hemen gönderilir. Arka planda görüntülenen uygulamalarda teslimat gecikebilir. Yeni e-posta bildirimleri, kullanıcı arayüzünüzü senkronize tutma veya uygulama verilerini arka planda senkronize etme gibi zaman açısından daha az hassas olan iletiler için normal teslim önceliğini seçin.

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

Burada, bir dergi abonesine yeni içeriğin indirilmeye hazır olduğunu bildirmek için FCM HTTP v1 protokolü aracılığıyla gönderilen normal öncelikli bir mesaj örneği 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:

Bir iletinin kullanım süresini belirleme

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

Böyle bir durumda FCM mesajı depolar ve mümkün olur olmaz teslim eder. Bu çoğu durumda bir sorun teşkil etmese de geç mesajların asla teslim edilmeyeceği bazı uygulamalar da mevcuttur. Örneğin, mesaj, gelen bir arama veya görüntülü sohbet bildirimiyse arama sonlandırılmadan önce kısa süreliğine bir anlam ifade eder. Mesaj bir etkinlik davetiyesi ise etkinlik sona erdikten sonra alınmışsa bir anlamı olmaz.

Android'de 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'nin mesajı depolayıp iletmeye çalıştığı maksimum süreye karşılık gelir. Bu alanı içermeyen isteklerin süresi, varsayılan olarak en fazla dört haftadır.

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

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

Bir mesajın kullanım ömrünü belirtmenin bir başka avantajı da FCM'nin, geçerlilik süresi 0 saniye olan mesajlara daraltılabilir mesaj kısıtlaması uygulamamasıdır. FCM, "şimdi ya da hiçbir zaman" teslim edilmesi gereken iletilerin en iyi şekilde işlenmesini sağlar. time_to_live değerinin 0 olması, hemen teslim edilemeyen iletilerin silineceği anlamına gelir. Ancak bu tür mesajlar hiçbir zaman depolanmadığından bildirim mesajlarının gönderilmesi için en iyi gecikmeyi sağlar.

TTL içeren bir istek örneğini aşağıda bulabilirsiniz:

{
  "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"
      }
    }
  }
}

Bir mesajın kullanım süresi

Bir uygulama sunucusunun FCM'ye mesaj yayınlaması ve mesaj kimliğini geri alması, mesajın zaten cihaza teslim edildiği anlamına gelmez. Daha çok, ürünün teslim edilmek üzere kabul edildiği anlamına gelir. Kabul edildikten sonra iletiye ne olduğu birçok faktöre bağlıdır.

En iyi durum senaryosunda, cihaz FCM'ye bağlıysa ekran açıktır ve kısıtlama yoksa mesaj hemen teslim edilir.

Cihaz bağlı ancak Doz modundaysa cihaz Doz'dan çıkana kadar FCM tarafından düşük öncelikli bir mesaj saklanır. Bu noktada collapse_key işaretinin rolü de vardır: Aynı daraltma anahtarına (ve kayıt jetonuna) sahip bir mesaj zaten depolanıyorsa ve teslim edilmeyi bekliyorsa eski mesaj silinir ve yeni mesaj yerini alır (yani eski mesaj yenisi tarafından daraltılır). Ancak, kapatma anahtarı ayarlanmazsa hem yeni hem de eski iletiler gelecekte teslim edilmek üzere depolanır.

Cihaz FCM'ye bağlı değilse mesaj, bağlantı kurulana kadar depolanır (aynı şekilde daraltma anahtarı kuralları uyarınca). Bir bağlantı kurulduğunda FCM bekleyen tüm mesajları cihaza teslim eder. Cihaz tekrar bağlanmazsa (örneğin, fabrika ayarlarına sıfırlandıysa) mesaj zaman aşımına uğrar ve FCM depolama alanından silinir. time_to_live işareti ayarlanmadığı sürece varsayılan zaman aşımı dört haftadır.

Bir iletinin teslimiyle ilgili daha ayrıntılı bilgi edinmek için:

    Android veya Apple platformlarında mesajların teslimiyle ilgili daha fazla bilgi edinmek için, Android uygulamaları için "gösterimler" (kullanıcıların gördüğü bildirimler) verileriyle birlikte Apple ve Android cihazlarda gönderilen ve açılan mesajların sayısını kaydeden FCM raporlama kontrol panelini inceleyin.

Doğrudan kanal mesajlaşması etkinleştirilmiş Android cihazlarda, cihaz bir aydan uzun bir süre FCM'ye bağlanmamışsa FCM mesajı yine 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. Daha sonra uygulama, genellikle uygulama sunucusundan tam senkronizasyon isteyerek durumu uygun bir şekilde ele alabilir.

Son olarak, FCM cihaza bir mesaj göndermeye çalıştığında ve uygulama kaldırıldığında, FCM bu mesajı hemen siler ve kayıt jetonunu geçersiz kılar. İleride bu cihaza mesaj gönderme denemeleri NotRegistered hatasına neden olur.

Kısıtlama ve ölçeklendirme

Hedefimiz, FCM aracılığıyla gönderilen her iletiyi her zaman teslim etmektir. Ancak, her mesajın teslim edilmesi bazen genel kullanıcı deneyimini olumsuz etkiler. Diğer durumlarda, FCM'nin tüm gönderenlere ölçeklenebilir bir hizmet sağlayabilmesi için sınırlar belirlememiz gerekir.

Daraltılabilir ileti kısıtlama

Yukarıda açıklandığı gibi, daraltılabilir mesajlar üst üste daraltılacak şekilde tasarlanmış içeriksiz bildirimlerdir. Bir geliştiricinin aynı mesajı bir uygulamaya çok sık tekrarlaması durumunda, kullanıcının pili üzerindeki etkiyi azaltmak için mesajları geciktiririz (kısıtlarız).

Örneğin, tek bir cihaza çok sayıda yeni e-posta senkronizasyon 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 kısıtlama, kullanıcının yaşadığı pil etkisini sınırlandırmak amacıyla yapılır.

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

Daraltılabilir mesajlar, her cihaz için uygulama başına 20 mesaj olacak şekilde sınırlandırılır ve her 3 dakikada bir 1 mesaj yeniden doldurulur.

XMPP sunucusu kısıtlaması

FCM XMPP sunucularına bağlanabileceğiniz hızı proje başına dakikada 400 bağlantıyla sınırlıyoruz. Bu, ileti teslimi için bir sorun olmamalıdır, 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 yukarı akış mesajlaşması için FCM, yukarı akış hedef sunucularının aşırı yüklenmesini önlemek amacıyla yukarı akış mesajlarını proje başına 1.500.000 ile sınırlandırır.

Pil tüketimini kötü uygulama davranışlarından korumak amacıyla,yayın öncesi mesaj sayısını cihaz başına 1.000 ile sınırlandırıyoruz.

Tek bir cihaza maksimum mesaj hızı

Android için tek bir cihaza dakika başına 240 mesaj ve saatte 5.000 mesaj gönderebilirsiniz. Bu yüksek eşiğin, kullanıcıların sohbet üzerinden hızla etkileşimde bulunması gibi kısa vadeli trafik artışlarına izin vermesi amaçlanmıştır. Bu sınır, gönderme mantığındaki hataların yanlışlıkla bir cihazdaki pilin boşalmasına yol açmasını önler.

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

Konu mesajı sınırı

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

İleti gönderme ücretleri için Fanout Kısıtlama'ya bakın.

Fanout sınırlama

Mesaj dağılımı, konuları ve grupları hedeflediğinizde ya da kitleleri veya kullanıcı segmentlerini hedeflemek için Bildirim oluşturucuyu kullandığınızda olduğu gibi, birden fazla cihaza mesaj gönderme işlemidir.

Mesaj yayılımı anlık değildir ve bu nedenle bazen eş zamanlı olarak devam eden birden fazla aralığa sahip olabilirsiniz. Proje başına eşzamanlı mesaj dizisi sayısını 1.000 ile sınırlandırıyoruz. Bunun ardından ek dağıtım isteklerini reddedebilir veya devam etmekte olan dağıtım işlemlerinin bir kısmı tamamlanana kadar isteklerin yayılmasını erteleyebiliriz.

Gerçek ulaşılabilir dağılma oranı, aynı anda dağılma isteği talep eden projelerin sayısından etkilenir. Tek bir proje için 10.000 QPS'lik dağılma oranı yaygın değildir ancak bu sayı bir garanti değildir ve sistem üzerindeki toplam yükün bir sonucudur. Mevcut dağıtım kapasitesinin dağılma talepleri arasında değil projeler arasında bölüştürüldüğünü göz önünde bulundurmak önemlidir. Projenizde devam eden iki dağılma varsa her bir yayılma oranı mevcut dağılma oranının yalnızca yarısını görür. Yayın hızınızı en üst düzeye çıkarmanın önerilen yolu, aynı anda yalnızca bir aktif yayılma sürecinin devam etmesidir.

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

Kuruluşunuzda internet trafiğini kısıtlayan bir güvenlik duvarı varsa ağınızdaki cihazların mesaj alabilmesi için bu güvenlik duvarını mobil cihazların FCM'ye 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ı kullanır.

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 olumsuz etkileyebileceğinden, ağınıza bağlanan cihazlar için FCM 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 bir IP kısıtlamasına sahip olmanı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ı her ay güncellemeniz önerilir. Güvenlik duvarı IP kısıtlamalarının neden olduğu sorunlar genellikle aralıklı olarak görülür 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 adlar kullanmaya başlarsak buradaki listeyi güncelleriz. Güvenlik duvarı kuralınız için alan adları kullanmanız güvenlik duvarı cihazınızda çalışabilir veya çalışmayabilir.

AçılacakTCP 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 Çevrimi ve/veya Durum Bilgili Paket Denetimi güvenlik duvarları:

Ağınızda Ağ Adresi Çevrimi (NAT) veya Durum Bilgili Paket Denetimi (SPI) kullanılıyorsa 5228-5230 bağlantı noktaları üzerindeki 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 yapılan push 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 uygular. VPN kullanmak bu çabayı karmaşık hale getirir.

VPN'ler, FCM'nin güvenilirliği ve pil ömrünü en üst düzeye çıkarmak için bağlantısını ayarlamak için ihtiyaç duyduğu temel bilgileri maskeler. Bazı durumlarda VPN'ler, uzun ömürlü bağlantıları aktif olarak koparlar. Bu da kaçırılan veya geciken mesajlar ya da yüksek pil maliyeti nedeniyle kötü bir kullanıcı deneyimine yol açar. VPN bunu yapmamızı sağlayacak şekilde yapılandırıldığında güvenilir, pil dostu bir deneyim sağlamak için VPN'yi şifrelenmiş bir bağlantı kullanarak (temel ağ kablosuz ağı veya LTE üzerinden) atlarız. FCM'nin atlanabilir VPN kullanımı, FCM Push Bildirimi kanalına özeldir. Diğer FCM trafiği (ör. kayıt trafiği) ise VPN'i kullanır (etkinse). FCM bağlantısı VPN'i atladığında, VPN'in sağlayabileceği ek avantajları (ör. IP maskeleme) kaybeder.

Farklı VPN'ler, atlanıp geçilemeyeceğini kontrol etmek için farklı yöntemlere sahiptir. Talimatlar için spesifik VPN'nizin 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. Cloud Messaging, VPN bağlantısı üzerinden bağlantıyı sürdürmek için çalıştığından bu durum, belirli bir süre boyunca mesajların gecikmesine neden olabilir ve daha fazla pil kullanımına neden olabilir.

Kimlik bilgileri

Hangi FCM özelliklerini uyguladığınıza bağlı olarak, Firebase projenizde aşağıdaki kimlik bilgilerini almanız gerekebilir:

Proje kimliği Firebase projeniz için FCM v1 HTTP uç noktasına yapılan isteklerde kullanılan benzersiz bir tanımlayıcı. Bu değer, Firebase konsolundaki 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 bir sayısal değer. Firebase konsolu Ayarlar bölmesinin Cloud Messaging sekmesinde bulunur. Gönderen kimliği, istemci uygulamasına mesaj gönderebilen tüm gönderenleri tanımlamak için kullanılır.
Erişim jetonu HTTP v1 API'ye 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ını oluşturmak ve dönüşümlü yayınlamak için İstek Gönderme İsteğini Yetkilendirme bölümünde açıklanan adımları uygulayın.
Sunucu anahtarı (**kullanımdan kaldırılmış** eski protokoller için)

Kullanımdan kaldırılan Firebase Cloud Messaging eski protokolleri aracılığıyla mesaj göndermek de dahil olmak üzere, uygulama sunucunuzu Google hizmetlerine erişim için yetkilendiren bir sunucu anahtarı.

Önemli: Sunucu anahtarını istemci kodunuzun herhangi 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.