FCM mesajları hakkında

Firebase Bulut Mesajlaşma (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 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 karakter sınırını zorlayan Firebase konsolundan mesaj gönderme durumu dışında, her iki mesaj türü için maksimum yük 4000 bayttır.

senaryoyu kullan Nasıl gönderilir
bildirim mesajı FCM, mesajı istemci uygulaması adına son kullanıcı cihazlarına otomatik olarak görüntüler. Bildirim mesajlarında önceden tanımlanmış bir dizi kullanıcı tarafından görülebilen anahtar ve isteğe bağlı özel anahtar/değer çiftlerinden oluşan bir veri yükü bulunur.
  1. Cloud Functions veya uygulama sunucunuz gibi güvenilir bir ortamda Yönetici SDK'sını veya FCM Sunucu Protokollerini kullanın: notification anahtarını ayarlayın. İsteğe bağlı veri yüküne sahip olabilir. Her zaman katlanabilir.

    Görüntüleme bildirimlerinin bazı örneklerine bakın ve istek yüklerini gönderin.

  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 iletileri, 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, Yönetici SDK'sını veya FCM Sunucu Protokollerini kullanın: Yalnızca data anahtarını ayarlayın.

FCM'nin istemci uygulamanız adına bir bildirim görüntülemeyi işlemesini istediğinizde bildirim mesajlarını kullanın. İstemci uygulamanızdaki mesajları 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 işler ve istemci uygulaması veri yükünü işler.

bildirim mesajları

Test 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 analitik tabanlı A/B testi sağlar.

Yönetici SDK'sını veya FCM protokollerini kullanarak bildirim mesajlarını programlı olarak göndermek için, bildirim mesajının kullanıcı tarafından görülebilen kısmı için gerekli önceden tanımlanmış anahtar/değer çifti seçenekleriyle notification anahtarını ayarlayın. Örneğin, bir IM uygulamasındaki JSON biçimli bir bildirim mesajı burada. Kullanıcı, "Portekiz vs. Danimarka" başlıklı 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 plandayken bildirim mesajları bildirim tepsisine teslim edilir. Ön plandaki uygulamalar için mesajlar bir geri arama işlevi tarafından işlenir.

Bildirim mesajları oluşturmak için kullanılabilen önceden tanımlanmış 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 JSON biçimli bir mesaj aşağıda verilmiştir; 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östermektedir. Her platformda, istemci uygulaması veri yükünü bir geri arama işlevinde 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 sağlamaz. Ancak, Kapiler 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ı bir özel anahtar/değer çifti yükü içeren bildirim mesajları gönderebilirsiniz. Bildirim oluşturucusunda, Gelişmiş seçeneklerdeki Özel veri alanlarını kullanın.

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

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

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

Firebase Admin SDK ve FCM v1 HTTP protokolünün her ikisi de mesaj isteklerinizin message nesnesindeki 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 özel bloklar, alındığında doğru şekilde işlenmelerini sağlamak için mesajları farklı platformlar için ö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ılır?

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

  • Tüm platformlarda 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 özel 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 özel alanları kullanın. Örneğin, Android'e değil, yalnızca Apple platformlarına ve web'e bildirim göndermek için, biri Apple için diğeri web için olmak üzere iki ayrı alan grubu 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 özel alanlar kullanmanız gerekir. Bunun nedeni, her platformun değeri biraz farklı şekilde yorumlayabilmesidir; örneğin, yaşam süresi Android'de saniye cinsinden sona erme süresi olarak, Apple'da ise bir sona erme tarihi olarak ayarlanmıştır.

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

  • APNs (Apple platformları) mesaj önceliğini düşük bir ayara ayarlarken, Android ve Web platformları için uzun bir yaşam süresi belirler
  • Bir kullanıcının Android ve Apple'daki bildirime dokunmasının 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övdesinde platforma özel bloklarda bulunan anahtarlarla ilgili tüm ayrıntılar için HTTP v1 başvuru 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 teslimat seçenekleri seti sağlar ve Apple platformlarında ve web'de benzer seçeneklere izin verir. Örneğin, "daraltılabilir" mesaj davranışı Android'de FCM'nin crash_key aracılığıyla, Apple'da apns- collapse_key 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ılabilir mesajlar

Daraltılamaz bir mesaj, her bir mesajın cihaza teslim edildiğini belirtir. Verileri almak için sunucuyla iletişim kurmak için mobil uygulamaya içeriksiz bir "ping" gibi daraltılabilir bir mesajın aksine, daraltılamaz bir mesaj bazı yararlı içerikler iletir.

Kapatılamayan 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ği olduğu için her mesajı teslim etmek istersiniz.

Android için, çökmeden saklanabilecek 100 mesaj 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 bir eşitleme talep ederek durumu düzgün bir şekilde halledebilir.

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

Daraltılabilir mesajların yaygın bir kullanım durumu, 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 mesaj alakalıdır.

Android'de bir mesajı collapse_key olarak işaretlemek için, mesaj yüküne crash_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 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ğına dair hiçbir garanti vermez.

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

Hangisini kullanmalıyım?

Uygulamanızın daraltılamaz mesajlar kullanması gerekmemesi koşuluyla, 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 maksimum 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 istemci uygulaması için önemlidir ve iletilmesi gerekir. Bildirim mesajları dışında, tüm mesajlar varsayılan olarak daraltılamaz.
katlanabilir İstemci uygulamasıyla alakasız daha eski, ilgili bir mesaj oluşturan 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 güncel olmayan bildirim mesajları. Mesaj isteğinizde uygun parametreyi ayarlayın:
  • Android'de collapseKey
  • 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:

  • Normal öncelik. Normal öncelikli mesajlar, uygulama ön plandayken hemen teslim edilir. Arka plana sahip uygulamalar için 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ı mesajlar için normal teslim önceliğini seçin.

  • Yüksek öncelik. FCM, cihaz Doze modunda olsa bile yüksek öncelikli mesajları hemen iletmeye ç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 mesajın bir örneği aşağıda verilmiştir:

{
  "message":{
    "topic":"subscriber-updates",
    "notification":{
      "body" : "This week's edition is now available.",
      "title" : "NewsMagazine.com",
    },
    "data" : {
      "volume" : "3.21.15",
      "contents" : "http://www.news-magazine.com/world-week/21659772"
    },
    "android":{
      "priority":"normal"
    },
    "apns":{
      "headers":{
        "apns-priority":"5"
      }
    },
    "webpush": {
      "headers": {
        "Urgency": "high"
      }
    }
  }
}

Mesaj önceliğini ayarlama konusunda platforma özel daha fazla ayrıntı için:

Bir mesajın ömrünü ayarlama

FCM genellikle mesajları gönderildikten hemen sonra iletir. Ancak bu her zaman mümkün olmayabilir. Örneğin, platform Android ise cihaz kapalı, çevrimdışı olabilir veya başka bir şekilde kullanılamayabilir. 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.

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 edilemeyebileceği bazı uygulamalar vardır. Örneğin, mesaj bir gelen 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. Veya mesaj bir etkinliğe davet ise, etkinlik sona erdikten sonra alınması işe yaramaz.

Android ve Web/JavaScript'te bir mesajın maksimum kullanım süresini belirtebilirsiniz. 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 iletmeye ç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 davetiye etkinlikleri
  • Takvim etkinlikleri

Bir mesajın ömrünü belirtmenin bir başka avantajı da, FCM'nin yaşama süresi değeri 0 saniye olan mesajları hiçbir zaman 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 time_to_live değerinin, hemen teslim edilemeyen iletilerin atılacağı anlamına geldiğini unutmayın. Ancak, bu tür mesajlar hiçbir zaman saklanmadığından, bildirim mesajlarının gönderilmesi için en iyi gecikmeyi sağlar.

TTL içeren bir istek örneği:

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

Birden çok göndericiden mesaj alma

FCM, birden fazla tarafın aynı istemci uygulamasına mesaj göndermesine izin verir. Örneğin, istemci uygulamasının birden çok katkıda bulunan bir makale toplayıcı olduğunu ve her birinin yeni bir makale yayınladıklarında bir mesaj gönderebilmesi gerektiğini varsayalım. Bu ileti, istemci uygulamasının makaleyi indirebilmesi için bir URL içerebilir. Tüm gönderme etkinliğini tek bir yerde merkezileştirmek yerine, FCM size bu katkıda bulunanların her birinin kendi mesajlarını göndermesine izin verme yeteneği verir.

Bu özelliği etkinleştirmek için her gönderenin gönderen kimliğine sahip olduğunuzdan emin olun. Kayıt istenirken, istemci uygulaması, belirtilen platform için belirteç alma yöntemini kullanarak, hedef kitle alanında her seferinde farklı bir gönderen kimliğiyle belirteci birden çok kez getirir:

Tek bir belirteç isteğine birden çok gönderen kimliği eklemediğinizden emin olun, çünkü bunun sonuçları tahmin edilemez olabilir. Her aramayı, gönderen kimliği başına bir kez olmak üzere ayrı yapın.

Son olarak, kayıt jetonunu ilgili göndericilerle paylaşın ve onlar da kendi kimlik doğrulama anahtarlarını kullanarak istemci uygulamasına mesaj gönderebilecekler.

100 çoklu gönderici sınırı olduğunu unutmayın.

Bir mesajın ömrü

Bir uygulama sunucusu FCM'ye bir mesaj gönderdiğinde ve bir mesaj kimliği geri aldığında, mesajın zaten cihaza teslim edildiği anlamına gelmez. Aksine, 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ısma kısıtlaması yoksa mesaj hemen iletilir.

Cihaz bağlıysa ancak Doze durumundaysa, cihaz Doze bitene kadar FCM tarafından düşük öncelikli bir mesaj saklanır. Ve burada collapse_key bayrağı bir rol oynar: aynı daraltma anahtarına (ve kayıt belirtecine) sahip bir mesaj zaten depolanmış ve teslim edilmeyi bekliyorsa, eski mesaj atılır ve onun yerini yeni mesaj alır (yani eski mesaj yenisi tarafından daraltılır). Ancak, daraltma anahtarı ayarlanmazsa, hem yeni hem de eski iletiler 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 uyarak). 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 sonunda zaman aşımına uğrar ve FCM deposundan atılır. time_to_live bayrağı ayarlanmadıkça varsayılan zaman aşımı dört haftadır.

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

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

Doğrudan kanal mesajlaşma özelliğinin etkinleştirildiği Android cihazlar için, cihaz bir aydan daha uzun bir süredir FCM'ye bağlanmadıysa, FCM mesajı kabul etmeye devam eder ancak mesajı hemen atar. Cihaz, kendisine 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 bir eşitleme talep ederek durumu düzgün bir şekilde halledebilir.

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

Kısma ve ölçekleme

Amacımız her zaman FCM aracılığıyla gönderilen her mesajı teslim etmektir. Ancak, her mesajın iletilmesi bazen genel olarak kötü bir kullanıcı deneyimiyle sonuçlanır. 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.

Katlanabilir mesaj azaltma

Yukarıda açıklandığı gibi, daraltılabilir mesajlar, birbiri üzerine çökecek ş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 eşitleme isteği gönderirseniz, cihazın daha düşük bir ortalama hızda eşitlenebilmesi için sonraki e-posta eşitleme isteğini birkaç dakika geciktirebiliriz. 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 patlama gönderme desenleri gerektiriyorsa, daraltılamayan mesajlar doğru seçim olabilir. Bu tür mesajlarda, pil maliyetini azaltmak için bu tür mesajlara içeriği eklediğinizden emin olun.

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

XMPP sunucusu daraltma

FCM XMPP sunucularına bağlanabileceğiniz hızı proje başına dakikada 400 bağlantı ile sınırlandırıyoruz. Bu, mesaj teslimi için bir sorun olmamalı, ancak sistemimizin kararlılığı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ı

Tek bir cihaza 240 mesaj/dakika ve 5.000 mesaj/saate 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 patlamalarına izin vermek içindir. Bu sınır, mantık göndermedeki hataların bir aygıttaki pilin yanlışlıkla boşalmasını önler.

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ırlandırıyoruz.

Kötü uygulama davranışından pilin bitmesine karşı koruma sağlamak için yukarı akış mesajlarını cihaz başına 1.000/dakika ile sınırlandırı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 bkz. Fanout Kısıtlama .

Fan çıkışı daraltma

Mesaj yayılımı, konuları ve grupları hedeflediğinizde veya 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 yayma sayısını 1.000 ile sınırlandırıyoruz. Bundan sonra, ek yayma isteklerini reddedebilir veya halihazırda devam etmekte olan bazı yayma işlemleri tamamlanana kadar isteklerin yayma işlemini erteleyebiliriz.

Gerçek ulaşılabilir yayma oranı, aynı anda yayma talebinde bulunan proje sayısından etkilenir. Tek bir proje için 10.000 QPS'lik bir dağıtım oranı nadir değildir, ancak bu sayı bir garanti değildir ve sistemdeki toplam yükün bir sonucudur. Kullanılabilir yayma kapasitesinin, dağıtma istekleri arasında değil, projeler arasında bölündüğünü unutmamak önemlidir. Dolayısıyla, projenizde devam eden iki yayma 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 genellikle 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 yitirerek kullanıcılarınızın deneyimini etkileyebilir. İdeal olarak, izin verilenler listesi bağlantı noktaları 5228-5230 ve 443, IP kısıtlaması olmadan. Ancak, bir IP kısıtlamanız olması gerekiyorsa, goog.json içinde 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
  • 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 Denetimi güvenlik duvarları:

Ağınız Ağ Adresi Çevirisi (NAT) veya Durum Bilgili Paket Denetimi (SPI) uyguluyorsa, 5228-5230 numaralı 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

Uyguladığınız FCM özelliklerine 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 konsolu Ayarlar bölmesinde bulunur.
Kayıt jetonu

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

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

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ı. Firebase projenizi oluşturduğunuzda sunucu anahtarını alırsınız. Bunu, Firebase konsolu Ayarlar bölmesinin Bulut Mesajlaşma sekmesinde görüntüleyebilirsiniz.

Ö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.