了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

FCM mesajları hakkında

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

Mesaj türleri

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

  • Bildirim mesajları, bazen "ekran mesajları" olarak düşünülür. Bunlar, FCM SDK 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 anahtar içerir. Buna karşın 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. 1024 karakterlik bir sınır uygulayan Firebase konsolundan mesaj gönderirken, her iki mesaj türü için maksimum yük 4000 bayttır.

Kullanım senaryosu Nasıl gönderilir
Bildirim mesajı FCM SDK, arka planda çalışırken istemci uygulaması adına mesajı son kullanıcı cihazlarına görüntüler. Aksi takdirde, bildirim alındığında uygulama ön planda çalışıyorsa, davranışı uygulamanın kodu belirler. Bildirim mesajları, önceden tanımlanmış bir dizi kullanıcı tarafından görülebilen anahtara ve özel anahtar/değer çiftlerinden oluşan isteğe bağlı bir veri yüküne sahiptir.
  1. Cloud Functions veya uygulama sunucunuz gibi güvenilir bir ortamda Admin SDK veya FCM Server Protocols kullanın : notification anahtarını ayarlayın. İsteğe bağlı veri yüküne sahip olabilir. Her zaman katlanabilir.

    Bildirimleri görüntüleme ve istek yüklerini gönderme ile ilgili bazı örneklere bakın.

  2. Bildirim oluşturucuyu kullanın : Mesaj Metni, Başlık vb. Girin ve gönderin. Özel veriler sağlayarak isteğe bağlı veri yükü ekleyin.
Veri mesajı İstemci uygulaması, veri mesajlarının işlenmesinden sorumludur. Veri mesajları, ayrılmış anahtar adları olmayan yalnızca özel anahtar-değer çiftlerine sahiptir (aşağıya bakın). Cloud Functions veya uygulama sunucunuz gibi güvenilir bir ortamda Admin SDK veya FCM Server Protocols kullanın : Yalnızca data anahtarını ayarlayın.

Uygulamanız arka planda çalışırken FCM SDK'nın bir bildirimi otomatik olarak görüntülemesini istediğinizde 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, FCM bildirim yükünün görüntülenmesini ve istemci uygulaması veri yükünün üstesinden gelir.

Bildirim mesajları

Test etmek veya pazarlama ve yeniden kullanıcı 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 analitik tabanlı A/B testi sağlar.

Admin SDK veya FCM protokollerini kullanarak programlı 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 gerekli önceden tanımlanmış anahtar/değer seçenekleri kümesiyle ayarlayın. Örneğin, burada bir IM uygulamasında JSON biçimli bir bildirim mesajı var. Kullanıcı, "Portekiz - Danimarka" başlıklı bir mesaj ve "harika maç!" metnini görmeyi bekleyebilir. cihazda:

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

Uygulama arka plandayken bildirim mesajları bildirim tepsisine gönderilir. Ön plandaki uygulamalar için mesajlar bir geri arama işlevi tarafından işlenir.

Bina bildirim mesajları için kullanılabilen önceden tanımlı anahtarların tam listesi için başvuru 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ı IM uygulamasında yer alan JSON biçimli bir mesaj buradadır; 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 örnek, mesajı alan tüm platformlardaki istemciler tarafından yorumlanan üst düzey veya ortak data alanının kullanımını gösterir. Her platformda, istemci uygulaması veri yükünü bir geri arama işlevinde alır.

Veri mesajları için şifreleme

Android Taşıma Katmanı (bkz. FCM mimarisi ) 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 sağlamaz. Ancak Capillary veya DTLS gibi harici çözümler mevcuttur.

İsteğe bağlı veri yükü ile bildirim mesajları

Hem programlı 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. Bildirimler oluşturucusunda , Gelişmiş seçeneklerdeki Özel veri alanlarını kullanın.

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

  • Uygulamalar arka plandayken , bildirim tepsisindeki bildirim yükünü 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 mevcut olduğu bir mesaj nesnesi alır.

İşte hem notification anahtarını hem de data anahtarını içeren JSON biçimli bir mesaj:

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

Bir mesajı platformlar arasında özelleştirme

Hem Firebase Admin SDK hem de FCM v1 HTTP protokolü, mesaj isteklerinizin message nesnesinde bulunan tüm alanları ayarlamasına izin verir. Bu içerir:

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

Platforma özgü bloklar, mesajların alındığında doğru bir şekilde ele alınmasını sağlamak için farklı platformlar için özelleştirme esnekliği sağlar. FCM arka ucu, belirtilen tüm parametreleri hesaba katacak ve mesajı her platform için özelleştirecektir.

Ortak alanlar ne zaman kullanılır?

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

  • 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 özgü alanlar ne zaman kullanılır?

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

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

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öndermek için, biri Apple ve diğeri web için olmak üzere iki ayrı alan grubu kullanmanız gerekir.

Belirli teslim seçeneklerine sahip iletiler gönderirken, bunları ayarlamak için platforma özel alanları kullanın. İsterseniz platform başına farklı değerler belirleyebilirsiniz. Ancak, temelde aynı değeri platformlar arasında ayarlamak istediğinizde bile, platforma özel alanları kullanmanız gerekir. Bunun nedeni, her platformun değeri biraz farklı yorumlayabilmesidir; örneğin, Android'de yaşam süresi saniye cinsinden bir son kullanma süresi olarak ayarlanırken, Apple'da bir son kullanma tarihi olarak ayarlanır .

Örnek: platforma özgü teslimat seçeneklerine sahip 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 aynı zamanda platforma özgü bazı geçersiz kılmalar da gönderir. Özellikle, istek:

  • APN'lerin (Apple platformları) mesaj önceliğini düşük bir ayara ayarlarken, Android ve Web platformları için uzun bir kullanım süresi belirler
  • sırasıyla Android ve Apple'da bildirime bir kullanıcı dokunuşunun sonucunu tanımlamak için uygun tuşları ayarlar - sırasıyla click_action ve category .
{
  "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 anahtarlarla ilgili tüm ayrıntılar 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 bkz. Gönderme İstekleri Oluşturma .

Teslim seçenekleri

FCM, Android cihazlara gönderilen mesajlar için belirli bir dizi teslim seçeneği sağlar ve Apple platformları ile web'de benzer seçeneklere izin verir. Örneğin, "daraltılabilir" mesaj davranışı, Android'de FCM'nin collapse_key aracılığıyla, Apple'da apns-collapse-id aracılığıyla ve JavaScript/Web'de Topic aracılığıyla desteklenir. Ayrıntılar için bu bölümdeki açıklamalara ve ilgili başvuru belgelerine bakın.

Daraltılamaz ve daraltılamaz mesajlar

Daraltılamaz bir mesaj, her bir mesajın cihaza teslim edildiğini gösterir. Verileri almak üzere sunucuyla bağlantı kurmak için mobil uygulamaya içeriksiz bir "ping" gönderme gibi daraltılabilir bir mesajın aksine, daraltılamaz bir mesaj bazı yararlı içerikler sunar.

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

Android için, çökmeden saklanabilen 100 mesajlık bir sınır vardır. Sınıra ulaşılırsa, saklanan tüm mesajlar atılır. Cihaz tekrar çevrimiçi olduğunda, sınıra ulaşıldığını belirten özel bir mesaj alır. Uygulama daha sonra, genellikle uygulama sunucusundan tam senkronizasyon isteyerek durumu düzgün bir şekilde işleyebilir.

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

Daraltılabilir mesajların yaygın kullanım durumları, bir mobil uygulamaya sunucudan verileri senkronize etmesini söylemek için kullanılan mesajlardır. Bir örnek, kullanıcıları en son skorla güncelleyen bir spor uygulaması olabilir. Yalnızca en son ileti önemlidir.

Bir mesajı Android'de 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 biri farklı bir kapatma anahtarına sahip, cihaz başına dört farklı daraltılabilir mesajı aynı anda depolayabilir. Bu sayıyı aşarsanız, FCM yalnızca dört kapatma anahtarını tutar ve hangilerinin tutulacağı konusunda hiçbir garanti vermez.

Yükü olmayan konu mesajları varsayılan olarak daraltılabilir. Bildirim mesajları her zaman daraltılabilir ve collapse_key parametresini yok sayar.

Hangisini kullanmalıyım?

Uygulamanızın daraltılamaz mesajlar kullanması gerekmediği sürece, daraltılabilir mesajlar performans açısından daha iyi bir seçimdir. Ancak daraltılabilir mesajlar kullanıyorsanız, FCM'nin herhangi bir zamanda kayıt belirteci başına FCM tarafından yalnızca en fazla dört farklı kapatma anahtarının kullanılmasına izin verdiğini unutmayın. Bu sayıyı aşmamalısınız, aksi takdirde öngörülemeyen sonuçlara neden olabilir.

Kullanım senaryosu Nasıl gönderilir
katlanamaz Her mesaj, istemci uygulaması için önemlidir ve teslim edilmesi gerekir. Bildirim mesajları dışında, tüm mesajlar varsayılan olarak daraltılamaz.
katlanabilir Daha eski, ilgili bir mesajı istemci uygulamasıyla ilgisiz hale getiren daha yeni bir mesaj olduğunda, FCM eski mesajın yerini alır. Örneğin: sunucudan bir veri senkronizasyonu başlatmak için kullanılan mesajlar veya süresi geçmiş bildirim mesajları. Mesaj isteğinizde uygun parametreyi ayarlayın:
  • Android'de collapseKey
  • Apple'da apns-collapse-id
  • Web'deki 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 öncelik. Davranış platformlar arasında biraz farklılık gösterse de, normal ve yüksek öncelikli mesajların teslimi şu şekilde çalışır:

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

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

Bir dergi abonesine yeni içeriğin indirilebileceğini bildirmek için FCM HTTP v1 protokolü aracılığıyla gönderilen normal öncelikli mesaja bir örnek:

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

Bir mesajın ömrünü ayarlama

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

Bu olduğunda, FCM mesajı saklar ve mümkün olan en kısa sürede iletir. Çoğu durumda bu iyi olsa da, gecikmiş bir mesajın asla teslim edilemeyeceği bazı uygulamalar vardır. Örneğin, mesaj gelen bir arama veya görüntülü sohbet bildirimi ise, arama sonlandırılmadan önce yalnızca kısa bir süre için anlamlıdır. Ya da mesaj bir etkinliğe davet ise, etkinlik sona erdikten sonra alınırsa bir işe yaramaz.

Android ve Web/JavaScript'te, bir mesajın maksimum kullanım ömrünü belirleyebilirsiniz. Değer, 0 ile 2.419.200 saniye (28 gün) arasında bir süre olmalıdır ve FCM'nin mesajı depoladığı ve teslim etmeye çalıştığı maksimum süreye karşılık gelir. Bu alanı içermeyen istekler, varsayılan olarak maksimum dört haftalık süreye sahiptir.

İşte bu özelliğin bazı olası kullanımları:

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

Bir mesajın kullanım ömrünü belirtmenin diğer bir avantajı da, FCM'nin hiçbir zaman 0 saniyelik yaşam süresi değeri olan mesajları kısıtlamamasıdır. Başka bir deyişle, FCM "şimdi ya da asla" iletilmesi gereken mesajlar için en iyi çabayı garanti eder. 0'lık bir time_to_live değerinin, hemen teslim edilemeyen iletilerin atıldığı anlamına geldiğini unutmayın. Ancak, bu tür mesajlar hiçbir zaman saklanmadığından, bildirim mesajları göndermek için en iyi gecikmeyi bu 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"
      }
    }
  }
}

Bir mesajın ömrü

Bir uygulama sunucusunun FCM'ye bir mesaj göndermesi ve geri bir mesaj kimliği alması, mesajın cihaza zaten teslim edildiği anlamına gelmez. Aksine, teslimat için kabul edildiği anlamına gelir. Kabul edildikten sonra iletiye ne olacağı birçok faktöre bağlıdır.

En iyi senaryoda, cihaz FCM'ye bağlıysa, ekran açıksa ve kısıtlama kısıtlaması yoksa mesaj hemen iletilir.

Cihaz bağlı ancak Doze modundaysa, cihaz Doze modundan çıkana kadar FCM tarafından düşük öncelikli bir mesaj saklanır. İşte burada collapse_key bayrağı bir rol oynar: aynı daraltma anahtarına (ve kayıt belirtecine) sahip ve teslim edilmeyi bekleyen bir mesaj zaten varsa, eski mesaj atılır ve yeni mesaj onun yerini alır (yani eski mesaj). mesaj yenisi tarafından daraltılır). Ancak, daraltma anahtarı ayarlanmazsa, hem yeni hem de eski mesajlar ileride teslim edilmek üzere saklanır.

Cihaz FCM'ye bağlı değilse, mesaj bir bağlantı kurulana kadar saklanır (yine daraltma anahtarı kurallarına uyularak). Bir bağlantı kurulduğunda, FCM bekleyen tüm mesajları cihaza iletir. Aygıt bir daha asla bağlanmazsa (örneğin, fabrika ayarlarına sıfırlanmışsa), mesaj sonunda zaman aşımına uğrar ve FCM depolama alanından atılır. time_to_live bayrağı ayarlanmadığı sürece varsayılan zaman aşımı dört haftadır.

Bir mesajın teslimi hakkında daha fazla fikir edinmek için:

    Mesajların Android veya Apple platformlarında teslim edilmesiyle ilgili daha fazla bilgi edinmek için Apple ve Android cihazlarda gönderilen ve açılan mesajların sayısını ve "gösterimler" (kullanıcılar tarafından görülen bildirimler) verilerini kaydeden FCM raporlama panosuna bakın. Android uygulamaları.

Doğrudan kanal mesajlaşmasının etkinleştirildiği Android cihazlarda, cihaz bir aydan uzun bir süredir FCM'ye 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 aramasını alır. Uygulama daha sonra, genellikle uygulama sunucusundan tam senkronizasyon isteyerek durumu düzgün bir şekilde işleyebilir.

Son olarak, FCM cihaza bir mesaj iletmeye çalıştığında ve uygulama kaldırıldığında, FCM bu mesajı hemen siler ve kayıt belirtecini geçersiz kılar. Gelecekte bu cihaza mesaj gönderme girişimleri NotRegistered hatasıyla sonuçlanır.

Kısıtlama ve ölçeklendirme

Amacımız, FCM yoluyla gönderilen her mesajı her zaman iletmektir. Ancak, her mesajın iletilmesi bazen kötü bir genel kullanıcı deneyimine yol açar. Diğer durumlarda, FCM'nin tüm gönderenler için ölçeklenebilir bir hizmet sunmasını sağlamak için sınırlar sağlamamız gerekir.

Daraltılabilir mesaj azaltma

Yukarıda açıklandığı gibi, daraltılabilir mesajlar, birbiri üzerine çökecek şekilde tasarlanmış, içerikten bağımsız bildirimlerdir. Bir geliştiricinin aynı mesajı bir uygulamada çok sık tekrar etmesi durumunda, kullanıcının pili üzerindeki etkiyi azaltmak için mesajları geciktiririz (kısırı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 olabilmesi için bir sonraki e-posta senkronizasyon talebini birkaç dakika erteleyebiliriz. Bu kısma, kesinlikle kullanıcının yaşadığı pil etkisini sınırlamak için yapılır.

Kullanım durumunuz yüksek seri gönderim kalıpları gerektiriyorsa, daraltılamaz mesajlar doğru seçim olabilir. Bu tür mesajlar için, pil maliyetini azaltmak için bu tür mesajlara içerik eklediğinizden emin olun.

Daraltılabilir mesajları, her 3 dakikada bir 1 mesaj doldurularak, cihaz başına uygulama başına 20 mesajlık bir patlama ile sınırlandırıyoruz.

XMPP sunucusu azaltma

FCM XMPP sunucularına bağlanabileceğiniz hızı, proje başına dakikada 400 bağlantıyla sınırlıyoruz. Bu, mesaj teslimi için bir sorun olmamalı, ancak sistemimizin istikrarını sağlamak için önemlidir.

FCM, her proje için paralel olarak 2500 bağlantıya izin verir.

Tek bir cihaza maksimum mesaj hızı

Android için tek bir cihaza dakikada 240 mesaja ve saatte 5.000 mesaja kadar gönderebilirsiniz. Bu yüksek eşik, kullanıcıların sohbet üzerinden hızlı bir şekilde etkileşim kurduğu zamanlar gibi kısa süreli trafik patlamalarına izin vermek içindir. Bu sınır, gönderme mantığındaki hataların yanlışlıkla bir aygıttaki pili boşaltmasını önler.

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

Yukarı akış mesaj sınırı

Yukarı akış hedef sunucularının aşırı yüklenmesini önlemek için yukarı akış mesajlarını proje başına 1.500.000/dakika ile sınırlıyoruz.

Kötü uygulama davranışından kaynaklanan pil tüketimine karşı koruma sağlamak için yukarı akış mesajlarını cihaz başına 1.000/dakika ile sınırlıyoruz.

Konu mesaj sınırı

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

Mesaj gönderme oranları için Fanout Throttling'e bakın.

Fan çıkışı azaltma

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

Mesaj yayılımı anlık değildir ve bu nedenle bazen aynı anda devam eden birden fazla yayılımınız olur. Proje başına eşzamanlı mesaj dağıtım sayısını 1.000 ile sınırlıyoruz. Bundan sonra, ek yayılım isteklerini reddedebilir veya halihazırda sürmekte olan yayılımlardan bazıları tamamlanana kadar isteklerin yayılımını erteleyebiliriz.

Ulaşılabilir gerçek dağıtım oranı, aynı anda dağıtım talebinde bulunan proje sayısından etkilenir. Tek bir proje için 10.000 QPS'lik bir yayılma oranı nadir değildir, ancak bu sayı bir garanti değildir ve sistemdeki toplam yükün bir sonucudur. Mevcut yayma kapasitesinin, yayma isteklerine göre değil, projeler arasında bölündüğünü not etmek önemlidir. Bu nedenle, projenizde devam etmekte olan iki yayma çıkışı varsa, her bir yayma, mevcut yayma oranının yalnızca yarısını görecektir. Yayılma hızınızı en üst düzeye çıkarmanın önerilen yolu, aynı anda yalnızca bir etkin yayılımın devam etmesidir.

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

Kuruluşunuzda İnternet'e gelen veya İnternet'ten gelen trafiği kısıtlamak için bir güvenlik duvarı varsa, ağınızdaki cihazların mesaj alabilmesi için mobil cihazların FCM'ye bağlanmasına izin verecek şekilde yapılandırmanız gerekir. FCM tipik olarak 5228 numaralı bağlantı noktasını kullanır, ancak bazen 443, 5229 ve 5230'u kullanır.

Ağınıza bağlanan cihazlar için, FCM belirli IP'ler sağlamaz çünkü IP aralığımız çok sık değişir ve güvenlik duvarı kurallarınız güncelliğini kaybederek kullanıcılarınızın deneyimini etkileyebilir. İ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ıtlamanız olması gerekiyorsa, goog.json'da listelenen tüm IP adreslerini izin verilenler listesine eklemelisiniz. Bu geniş liste düzenli olarak güncellenir ve kurallarınızı aylık olarak güncellemeniz önerilir. Güvenlik duvarı IP kısıtlamalarının neden olduğu sorunlar genellikle aralıklıdır ve teşhis edilmesi zordur.

IP adresleri yerine izin verilenler listesine alınabilecek bir dizi alan adı sunuyoruz. Bu ana bilgisayar adları aşağıda listelenmiştir. Ek ana bilgisayar adları kullanmaya başlarsak, listeyi burada güncelleyeceğiz. Güvenlik duvarı kuralınız için alan adlarını kullanmak, güvenlik duvarı cihazınızda işlevsel olabilir veya olmayabilir.

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

  • 5228
  • 5229
  • 5230
  • 443

Açılacak ana bilgisayar adları:

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

Ağ Adresi Çevirisi ve/veya Durum Bilgili Paket İnceleme güvenlik duvarları:

Ağınız Ağ Adresi Çevirisi (NAT) veya Durum Bilgili Paket İncelemesi (SPI) uyguluyorsa, 5228-5230 bağlantı noktaları üzerinden bağlantılarımız için 30 dakikalık veya daha uzun bir zaman aşımı uygulayın. Bu, kullanıcılarınızın mobil cihazlarının pil tüketimini azaltırken güvenilir bağlantı sağlamamızı sağlar.

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 projeniz için benzersiz bir tanımlayıcı. Bu değer , Firebase konsolunun Ayarlar bölmesinde bulunur.
Kayıt belirteci

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

Gönderen Kimliği Firebase konsol Ayarları bölmesinin Bulut Mesajlaşma sekmesinde bulunan, Firebase projenizi oluşturduğunuzda oluşturulan benzersiz bir sayısal değer. Gönderen kimliği, istemci uygulamasına mesaj gönderebilen her bir göndericiyi tanımlamak için kullanılır.
Erişim belirteci İstekleri HTTP v1 API'sine yetkilendiren kısa ömürlü bir OAuth 2.0 belirteci. Bu belirteç, Firebase projenize ait bir hizmet hesabıyla ilişkilidir. Erişim belirteçleri oluşturmak ve döndürmek için, Gönderme İsteklerini Yetkilendirme bölümünde açıklanan adımları izleyin.
Sunucu anahtarı (eski protokoller için)

Uygulama sunucunuzu, Firebase Cloud Messaging eski protokolleri aracılığıyla mesaj gönderme dahil olmak üzere Google hizmetlerine erişim için yetkilendiren bir sunucu anahtarı. Firebase projenizi oluşturduğunuzda sunucu anahtarını alırsınız. Firebase konsolu Ayarlar bölmesinin Bulut Mesajlaşma sekmesinde görüntüleyebilirsiniz.

Önemli: İstemci kodunuzun hiçbir yerine sunucu anahtarını dahil etmeyin. 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.