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:

  • Bazen "ekran mesajları" olarak düşünülen bildirim mesajları. Bunlar FCM SDK tarafından otomatik olarak gerçekleştirilir.
  • İstemci uygulaması tarafından işlenen veri mesajları.

Bildirim mesajları, önceden tanımlanmış, kullanıcının görebileceği bir dizi anahtar içerir. Veri mesajları ise aksine 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. 1000 karakter sınırı uygulayan Firebase konsolundan mesaj gönderme durumu hariç, her iki mesaj türü için maksimum yük 4000 bayttır.

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örüntüler. Aksi halde bildirim alındığında uygulama ön planda çalışıyorsa uygulamanın kodu davranışı belirler. Bildirim mesajlarında, önceden tanımlanmış, kullanıcının görebileceği bir dizi anahtar ve özel anahtar/değer çiftlerinden oluşan isteğe bağlı bir 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 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 Metnini, Başlığını 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). Bulut İşlevleri veya uygulama sunucunuz gibi güvenilir bir ortamda Yönetici SDK'sını veya FCM Sunucu Protokollerini kullanın. Gönderme isteğinde data anahtarını ayarlayın.

Uygulamanız arka planda çalışırken FCM SDK'nın otomatik olarak bir bildirim görüntülemeyi iş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ünü içeren bir bildirim mesajı gönderebilir. Bu gibi durumlarda FCM, bildirim yükünün görüntülenmesini yönetir ve istemci uygulaması da veri yükünü yönetir.

Bildirim mesajları

Test etmek veya pazarlamak ve kullanıcıyı yeniden etkileşime geçirmek için Firebase konsolunu kullanarak bildirim mesajları gönderebilirsiniz . Firebase konsolu, pazarlama mesajlarını hassaslaştırmanıza ve geliştirmenize yardımcı olmak için analitik tabanlı A/B testleri sağlar.

Admin SDK'yı veya FCM protokollerini kullanarak bildirim mesajlarını programlı bir şekilde 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, burada bir IM uygulamasındaki JSON formatlı bir bildirim mesajı bulunmaktadır. Kullanıcı, "Portekiz vs. Danimarka" başlığını ve "harika maç!" metnini içeren bir mesaj görmeyi bekleyebilir. cihazda:

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

Uygulama arka planda olduğunda bildirim mesajları bildirim tepsisine iletilir. Ön plandaki uygulamalar için mesajlar bir geri arama işleviyle işlenir.

Bildirim mesajları oluşturmaya yönelik ö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ı IM uygulamasında JSON biçimli bir mesaj var; burada bilgiler ortak data anahtarında kapsülleniyor ve istemci uygulamasının içeriği yorumlaması bekleniyor:

{
  "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östermektedir. Her platformda istemci uygulaması, veri yükünü bir geri arama işleviyle alır.

Veri mesajları için şifreleme

Android Aktarım 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 sunmaz. Ancak Kapiler veya DTLS gibi harici çözümler de mevcuttur.

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

Hem programlı olarak hem de Firebase konsolu aracılığıyla, isteğe bağlı özel anahtar/değer çiftleri yükünü 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üklerini 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 verinin de mevcut olduğu bir mesaj nesnesi alır.

Burada hem notification anahtarını 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"
    }
  }
}

Bir mesajı platformlar arasında özelleştirme

Firebase Yönetici SDK'sı ve FCM v1 HTTP protokolünün her ikisi de mesaj isteklerinizin, message nesnesindeki mevcut tüm alanları ayarlamasına olanak tanır. 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 özel bloklar, mesajların alındığında doğru şekilde işlenmesini sağlamak amacıyla farklı platformlar için mesajları özelleştirme esnekliği sağlar. FCM arka ucu belirtilen tüm parametreleri dikkate alacak ve mesajı her platform için özelleştirecektir.

Ortak alanlar ne zaman kullanılmalı?

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

  • Tüm platformlardaki uygulama örneklerini hedefleme (Apple, Android ve web)
  • 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ılmalı?

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

Değerleri yalnızca belirli platformlara 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 biri Apple ve diğeri web için olmak üzere iki ayrı alan kümesi kullanmanız gerekir.

Belirli teslimat seçeneklerine sahip mesajlar gönderirken bunları ayarlamak için platforma özel alanları kullanın. İsterseniz platform başına farklı değerler belirleyebilirsiniz. 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, yaşam süresi Android'de saniye cinsinden bir sona erme süresi olarak ayarlanırken, Apple'da bir son kullanma tarihi olarak ayarlanır.

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

  • APN'lerin (Apple platformları) mesaj önceliğini düşük bir ayara ayarlarken Android ve Web platformları için uzun bir yaşam süresi belirler
  • Android ve Apple'da bir kullanıcının bildirime dokunmasının sonucunu tanımlamak için uygun tuşları ayarlar (sırasıyla click_action 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 anahtarlara ilişkin 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 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'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 referans belgelere bakın.

Daraltılamaz ve daraltılabilir mesajlar

Daraltılamaz bir mesaj, her bir mesajın cihaza iletildiğini belirtir. Daraltılamaz bir mesaj, verileri almak üzere sunucuyla iletişim kurmak için mobil uygulamaya gönderilen içeriksiz bir "ping" gibi daraltılabilir bir mesajın aksine, bazı yararlı içerikler sunar.

Daraltılamaz mesajların bazı tipik kullanım durumları sohbet mesajları veya kritik mesajlardır. Örneğin, bir IM uygulamasında her mesajın farklı içeriğe sahip olması nedeniyle her mesajı iletmek istersiniz.

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

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

Daraltılabilir mesajların yaygın kullanım durumları, bir 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 bir örnek olabilir. Yalnızca en son mesaj önemlidir.

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 biri farklı bir daraltma anahtarına sahip olan, cihaz başına dört farklı daraltılabilir mesajı aynı anda depolayabilir. Bu sayıyı aşarsanız, FCM yalnızca dört daraltma 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ılamayan mesajları kullanmasına gerek olmaması koşuluyla, daraltılabilir mesajlar performans açısından daha iyi bir seçimdir. Bununla birlikte, daraltılabilir mesajlar kullanıyorsanız, FCM'nin herhangi bir zamanda kayıt jetonu başına FCM tarafından yalnızca en fazla dört farklı daraltma 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.

Senaryoyu kullan Nasıl gönderilir
Katlanamaz Her mesaj müşteri uygulaması için önemlidir ve iletilmesi gerekir. Bildirim mesajları dışında hiçbir mesaj varsayılan olarak daraltılamaz.
Katlanabilir Daha eski, ilgili 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'deki Topic
  • eski protokollerde collapse_key (tüm platformlar)

Bir mesajın önceliğini ayarlama

Aşağı akış iletilerine 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:

  • Normal öncelik. Uygulama ön planda olduğunda normal öncelikli mesajlar hemen iletilir. Arka planda çalışan uygulamalar için teslimat gecikebilir. Yeni e-posta bildirimleri, kullanıcı arayüzünüzü senkronize tutmak veya uygulama verilerini arka planda senkronize etmek gibi zamana duyarlı olmayan mesajlar için normal dağıtım önceliğini seçin.

  • Yüksek öncelik. FCM, cihaz Doze modunda olsa bile yüksek öncelikli mesajları anında iletmeye çalışır. Yüksek öncelikli mesajlar zamana duyarlı, kullanıcı tarafından görülebilen içerikler 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 mesajın bir örneği:

{
  "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 özel 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 kapatılabilir, çevrimdışı olabilir 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.

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

Android ve Web/JavaScript'te bir mesajın maksimum ömrünü belirleyebilirsiniz. Değer, 0 ila 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 tabidir.

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

  • Görüntülü sohbet gelen çağrılar
  • Süresi dolan davet etkinlikleri
  • Takvim etkinlikleri

Bir mesajın ömrünü belirtmenin diğer bir avantajı, FCM'nin, yaşam süresi değeri 0 saniye olan mesajlara daraltılabilir mesaj kısıtlaması uygulamamasıdır. FCM, "şimdi ya da asla" iletilmesi gereken mesajların en iyi şekilde ele alınmasını sağlar. time_to_live değerinin 0 olması, hemen teslim edilemeyen iletilerin silineceği anlamına geldiğini unutmayın. Ancak bu tür mesajlar hiçbir zaman saklanmadığı için bildirim mesajlarının gönderilmesi için en iyi gecikme süresi sağlanır.

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 bir mesaj kimliğini geri alması, mesajın zaten cihaza iletildiği anlamına gelmez. Daha ziyade teslimat için kabul edildiği anlamına gelir. Kabul edildikten sonra mesaja ne olacağı birçok faktöre bağlıdır.

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

Cihaz bağlıysa ancak Doze'daysa, cihaz Doze'dan çıkana kadar FCM tarafından düşük öncelikli bir mesaj saklanır. Ve collapse_key bayrağının rol oynadığı yer burasıdır: aynı daraltma anahtarına (ve kayıt belirtecine) sahip depolanmış ve teslim edilmeyi bekleyen bir mesaj zaten varsa, eski mesaj atılır ve onun yerini yeni mesaj alır (yani eski mesaj). mesaj yeni mesaj tarafından daraltılmıştır). Ancak daraltma anahtarı ayarlanmazsa hem yeni hem de eski mesajlar gelecekte 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. Cihaz bir daha asla 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 bayrağı ayarlanmadığı sürece varsayılan zaman aşımı dört haftadır.

Bir mesajın iletilmesine ilişkin daha fazla bilgi edinmek için:

    Mesajların Android veya Apple platformlarında teslimi hakkında 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şmanın etkin olduğu Android cihazlarda, cihaz bir aydan uzun bir süre boyunca FCM'ye bağlı değilse FCM mesajı yine de kabul eder ancak hemen iptal eder. Cihaz, gönderdiğiniz son veri mesajından sonraki dört hafta içinde bağlanırsa istemciniz onDeletedMessages() geri aramasını alır. Uygulama daha sonra genellikle uygulama sunucusundan tam senkronizasyon isteyerek durumu düzgün bir şekilde ele alabilir.

Son olarak, FCM cihaza bir mesaj iletmeyi denediğinde ve uygulama kaldırıldığında, FCM bu mesajı hemen atar ve kayıt jetonunu geçersiz kılar. Gelecekte söz konusu cihaza mesaj gönderme girişimleri NotRegistered hatasıyla sonuçlanır.

Kısıtlama ve ölçeklendirme

Amacımız her zaman FCM aracılığıyla gönderilen her mesajı iletmektir. Ancak her mesajın iletilmesi bazen genel kullanıcı deneyiminin kötü olmasına neden olur. Diğer durumlarda, FCM'nin tüm gönderenler için ölçeklenebilir bir hizmet sunmasını sağlamak amacıyla sınırlar sağlamamız gerekir.

Daraltılabilir mesaj azaltma

Yukarıda açıklandığı gibi daraltılabilir mesajlar, birbirinin üzerine 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ı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 senkronizasyon yapabilmesi için bir sonraki e-posta senkronizasyon isteğini birkaç dakika geciktirebiliriz. Bu kısıtlama, 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 modelleri gerektiriyorsa daraltılamayan mesajlar doğru seçim olabilir. Bu tür mesajlar için pil maliyetini azaltmak amacıyla bu tür mesajların içeriğine mutlaka yer verin.

Daraltılabilir mesajları, her 3 dakikada bir 1 mesaj yeniden doldurulacak şekilde, cihaz başına uygulama başına 20 mesajlık bir seriyle sınırlandırıyoruz.

XMPP sunucusu kısıtlaması

FCM XMPP sunucularına bağlanabileceğiniz hızı proje başına dakikada 400 bağlantıyla sınırlandırıyoruz. Bu, mesajın iletilmesi açısından bir sorun olmamalıdır ancak sistemin istikrarını sağlamak açısından önemlidir. FCM her proje için paralel olarak 2500 bağlantıya izin verir.

XMPP ile yukarı akış mesajlaşma 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/dakika ile sınırlandırır.

Kötü uygulama davranışı nedeniyle pilin tükenmesine karşı koruma sağlamak için cihaz başına yukarı akış mesajlarını 1.000/dakika ile sınırlandırıyoruz.

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şime girmesi gibi kısa süreli trafik artışlarına izin vermek içindir. Bu sınır, gönderme mantığındaki hataların, cihazın pilinin yanlışlıkla tükenmesini önler.

İOS için oran APN sınırlarını aştığında bir 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.

Mesaj gönderme oranları için bkz. Fanout Kısıtlaması .

Yayılma azaltma

Mesaj yayma, konuları ve grupları hedeflediğinizde veya hedef kitleleri veya kullanıcı segmentlerini hedeflemek için Bildirimler oluşturucusunu 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 zaman zaman aynı anda devam eden birden fazla yayılım olur. Proje başına eşzamanlı mesaj yayınlarının sayısını 1.000 ile sınırlandırıyoruz. Bundan sonra, ek yayma isteklerini reddedebilir veya halihazırda devam eden yaymalardan bazıları tamamlanana kadar isteklerin yayılımını erteleyebiliriz.

Gerçek ulaşılabilir yayılma oranı, aynı anda yayılma talebinde bulunan projelerin sayısından etkilenir. Bireysel bir proje için 10.000 QPS'lik yayılma oranı alışılmadık bir durum değildir ancak bu rakam bir garanti değildir ve sistemdeki toplam yükün bir sonucudur. Mevcut yayma kapasitesinin yayma talepleri arasında değil, projeler arasında bölündüğünü unutmamak önemlidir. Dolayısıyla, projenizde devam eden iki yayılım varsa, her bir yayılım mevcut yayılma oranının yalnızca yarısını görecektir. Yayma hızınızı en üst düzeye çıkarmanın önerilen yolu, aynı anda yalnızca bir aktif yaymanın devam etmesini sağlamaktır.

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

Kuruluşunuzda İnternet'e gelen veya İnternet'ten gelen trafiği kısıtlayan bir güvenlik duvarı varsa, ağınızdaki cihazların mesaj alabilmesi için bunu 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'u da 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 yitirerek kullanıcılarınızın deneyimini etkileyebilir. İdeal olarak, 5228-5230 ve 443 numaralı bağlantı noktalarını IP kısıtlaması olmaksızın izin verilenler listesine ekleyin. Ancak bir IP kısıtlamanız olması gerekiyorsa goog.json dosyasında listelenen tüm IP adreslerini izin verilenler listesine eklemelisiniz. Bu büyük liste düzenli olarak güncellenmektedir 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 eklenebilecek 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
  • 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 Durum Bilgili Paket İnceleme güvenlik duvarları:

Ağınız Ağ Adresi Çevirisi (NAT) veya Durum Bilgili Paket Denetimi (SPI) uyguluyorsa, 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, kullanıcılarınızın mobil cihazlarının pil tüketimini azaltırken güvenilir bağlantı sağlamamıza olanak tanır.

VPN etkileşimleri ve atlanabilirlik

Firebase Cloud Messaging, telefondan sunucuya 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 çabayı karmaşık hale getirir.

VPN'ler, güvenilirliği ve pil ömrünü en üst düzeye çıkarmak için FCM'nin bağlantısını ayarlaması gereken temel bilgileri maskeler. Bazı durumlarda VPN'ler uzun ömürlü bağlantıları aktif olarak keser ve bu da kaçırılan veya geciken mesajlar veya yüksek pil maliyeti nedeniyle kötü bir kullanıcı deneyimine neden olur. VPN bunu yapmamıza izin verecek şekilde yapılandırıldığında, güvenilir, pil dostu bir deneyim sağlamak için şifreli bir bağlantı (temel ağ wifi veya LTE üzerinden) kullanarak VPN'yi atlarız. FCM'nin atlanabilir VPN'leri kullanımı, FCM Anında Bildirim kanalına özeldir. 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 IP maskeleme gibi sağlayabileceği ek avantajları kaybeder.

Farklı VPN'lerin, bypass edilip edilemeyeceğini kontrol etmek için farklı yöntemleri olacaktır. Talimatlar için özel VPN'inizin belgelerine bakın.

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

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 Firebase projeniz için, FCM v1 HTTP uç noktasına yapılan isteklerde kullanılan benzersiz bir tanımlayıcı. Bu değer Firebase konsolunun Ayarlar bölmesinde mevcuttur.
Kayıt jetonu

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

Gönderen Kimliği Firebase projenizi oluşturduğunuzda oluşturulan ve Firebase konsolunun Ayarlar bölmesinin Bulut Mesajlaşma sekmesinde bulunan benzersiz bir sayısal değer. Gönderen kimliği, istemci uygulamasına mesaj gönderebilecek 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ş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ı (**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 sunucunuza Google hizmetlerine erişim yetkisi veren 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.