Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

FCM mesajları hakkında

Firebase Bulut Mesajlaşma (FCM) çok çeşitli mesajlaşma seçenekleri ve özellikleri 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 "görüntülü mesajlar" olarak düşünülür. Bunlar FCM SDK tarafından otomatik olarak ele alınır.
  • İstemci uygulaması tarafından işlenen veri mesajları.

Bildirim mesajları, önceden tanımlanmış kullanıcı tarafından görülebilir anahtarlar içerir. Veri mesajları, 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. 1024 karakter sınırlaması uygulayan Firebase konsolundan mesaj gönderme dışında her iki mesaj türü için maksimum yük 4KB'dir.

Senaryo 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ış kullanıcı tarafından görülebilir anahtarlar ve isteğe bağlı özel anahtar / değer çiftleri veri yükü bulunur.
  1. Bulut İşlevleri veya uygulama sunucunuz gibi güvenilir bir ortamda Yönetici SDK'sını veya FCM Sunucusu Protokollerini kullanın : notification anahtarını ayarlayın. İsteğe bağlı veri yükü olabilir. Daima katlanabilir.
  2. Bildirimler bestecisini kullanma : Mesaj Metnini, Başlığı vb. Girin ve gönderin. Özel veriler sağlayarak isteğe bağlı veri yükü ekleyin.
Veri mesajı Veri mesajlarının işlenmesinden müşteri uygulaması sorumludur. Veri mesajlarında yalnızca ayrılmış anahtar adı olmayan özel anahtar / değer çiftleri bulunur (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 : Yalnızca data anahtarını ayarlayın.

FCM'nin istemci uygulamanız adına bir bildirim görüntülemesini istemesini istiyorsanız bildirim mesajlarını kullanın. İstemci uygulamanızdaki mesajları 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 gibi durumlarda, FCM bildirim yükünü görüntülerken istemci uygulaması veri yükünü işler.

Bildirim mesajları

Test etmek veya pazarlama ve kullanıcının yeniden katılımı 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 testi sağlar.

Yönetici SDK'sını 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 önceden tanımlanmış gerekli anahtar / değer seçenekleri kümesi ile ayarlayın. Örneğin, IM uygulamasında JSON biçimli bir bildirim mesajı. Kullanıcı "Portugal vs. Denmark" başlıklı bir mesaj ve "great match!" cihazda:

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

Bildirim mesajları uygulama arka planda olduğunda bildirim tepsisine teslim edilir. Ön plandaki uygulamalar için mesajlar bir geri arama işlevi tarafından işlenir.

Bildirim iletileri oluşturmak için kullanılabilecek önceden tanımlanmış anahtarların tam listesi için başvuru belgelerine bakın:

Veri mesajları

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

Örneğin, yukarıdaki aynı IM uygulamasında JSON biçimli bir mesaj, burada bilgilerin ortak data anahtarında kapsüllendiği 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, istemcinin iletiyi alan tüm platformlarda yorumladığı en ü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. :

İsteğe bağlı veri yükü olan bildirim iletileri

Hem programlı olarak hem de Firebase konsolu aracılığıyla, isteğe bağlı özel anahtar / değer çiftleri yükü içeren bildirim iletileri gönderebilirsiniz. Bildirimler bestecisinde Gelişmiş seçeneklerindeki Özel veri alanlarını kullanın.

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

  • Arka planda olduğunda , uygulamalar bildirim tepsisindeki bildirim yükünü alır ve yalnızca kullanıcı bildirime dokunduğunda veri yükünü işler.
  • Ön planda olduğunda, uygulamanız her iki yükü de içeren bir mesaj nesnesi alır.

Hem notification anahtarını hem de data anahtarını içeren JSON biçimli bir mesaj şunlardır:

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

Platformlar arasında bir mesajı özelleştirme

Firebase Yönetici SDK'sı ve FCM v1 HTTP protokolü, ileti isteklerinizin message nesnesinde bulunan tüm alanları ayarlamasına izin verir. Bu içerir:

  • iletiyi 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, farklı platformlar için mesajları, alındığında doğru şekilde işlenmelerini sağlamak için özelleştirme esnekliği sağlar. FCM arka ucu, belirtilen tüm parametreleri dikkate alacak ve her platform için mesajı özelleştirecektir.

Ortak alanlar ne zaman kullanılır?

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

  • Uygulama örneklerini tüm platformlarda hedefleme - iOS, 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ılır?

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

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

Ne zaman ortak alanları kullanmayın, sadece belirli platformlara değerleri göndermek istiyorum; platforma özgü alanları kullanın. Örneğin, yalnızca iOS'a ve web'e değil Android'e değil de bir bildirim göndermek için biri iOS ve diğeri web için olmak üzere iki ayrı alan kümesi kullanmanız gerekir.

Belirli dağıtım seçenekleriyle mesaj gönderirken, bunları ayarlamak için platforma özgü alanları kullanın. İsterseniz platform başına farklı değerler belirleyebilirsiniz. Ancak, platformlar arasında esasen aynı değeri ayarlamak isteseniz bile, platforma özgü alanları kullanmalısınız. Bunun nedeni, her platformun değeri biraz farklı yorumlayabilmesidir - örneğin, yaşam süresi Android'de saniyeler içinde bir sona erme süresi olarak ayarlanırken, iOS'ta bir sona erme tarihi olarak ayarlanır.

Örnek: platforma özgü yayınlanma seçeneklerine sahip bildirim mesajı

Aşağıdaki v1 gönderme isteği, tüm platformlara ortak bir bildirim başlığı ve içerik gönderir, ancak platforma özgü bazı geçersiz kılmalar da gönderir. Özellikle, istek:

  • APN'ler (iOS) mesaj önceliğini düşük bir ayara getirirken, Android ve Web platformları için uzun kullanım ömrü ayarlar
  • bir kullanıcının sırasıyla Android ve iOS - click_action ve category bildirimlerine dokunduğunda sonucu tanımlamak için 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"
       }
     }
   }
 }

İleti gövdesindeki platforma özgü bloklarda bulunan tuşlar hakkında ayrıntılı bilgi 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 dağıtım seçenekleri kümesi sunar ve iOS ve web'de benzer seçeneklere izin verir. Örneğin, "daraltılabilir" mesaj davranışı Android'de apns-collapse-id collapse_key , iOS'ta apns-collapse-id ve JavaScript / Web'de Topic üzerinden 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ılamayan bir mesaj, her bir mesajın cihaza iletildiğini gösterir. Daraltılamayan bir mesaj, veri almak için sunucuya başvurmak üzere mobil uygulamaya içeriksiz "ping" gibi daraltılabilir bir mesajın aksine bazı yararlı içerik sunar.

Daraltılamayan mesajların bazı tipik kullanım durumları sohbet mesajları veya kritik mesajlardır. Örneğin, bir sohbet uygulamasında her iletinin farklı içeriği olduğundan, her iletiyi teslim etmek istersiniz.

Android için, daraltılmadan 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 senkronizasyon isteğinde bulunarak durumu düzgün bir şekilde işleyebilir.

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

Daraltılabilir mesajların yaygın kullanım örnekleri, bir mobil uygulamaya sunucudan veri senkronize etmesini bildirmek için kullanılan mesajlardır. Bir örnek, kullanıcıları en son skorla güncelleyen bir spor uygulamasıdır. Yalnızca en son mesaj önemlidir.

Bir iletiyi Android'de daraltılabilir olarak işaretlemek için ileti yüküne collapse_key parametresini ekleyin. FCM, herhangi bir zamanda uygulama sunucusu tarafından Android cihazı başına maksimum dört farklı daraltma anahtarının kullanılmasına izin verir. Başka bir deyişle, FCM sunucusu aynı anda her biri farklı bir daraltma anahtarına sahip dört farklı daraltılabilir mesajı saklayabilir. Bu sayıyı aşarsanız, FCM yalnızca dört daraltma tuşunu tutar ve hangilerinin tutulacağı konusunda hiçbir garanti vermez.

Hangisini kullanmalıyım?

Daraltılabilir iletiler, uygulamanızın daraltılamayan iletiler kullanması gerekmediği sürece performans açısından daha iyi bir seçimdir. Ancak, daraltılabilir iletiler kullanıyorsanız, FCM'nin herhangi bir zamanda her belirteçte FCM bağlantı sunucusu tarafından 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.

Senaryo kullan Nasıl gönderilir
Sigara katlanabilir Her mesaj istemci uygulaması için önemlidir ve iletilmesi gerekir. Bildirim iletileri dışında, tüm iletiler varsayılan olarak daraltılamaz.
katlanır İstemci uygulamasıyla ilgili olmayan eski ve ilgili bir iletiyi görüntüleyen daha yeni bir ileti olduğunda, FCM eski iletinin yerini alır. Örneğin: sunucudan veri senkronizasyonu başlatmak için kullanılan mesajlar veya eski bildirim mesajları. Mesaj isteğinizde uygun parametreyi ayarlayın:
  • collapseKey Android'de
  • apns-collapse-id
  • Web Topic
  • eski protokollerde (tüm platformlar) collapse_key

Mesajın önceliğini ayarlama

Android'de sonraki iletilere dağıtım önceliği atamak için iki seçeneğiniz vardır: normal ve yüksek öncelik. Normal ve yüksek öncelikli mesajların iletimi şu şekilde çalışır:

  • Normal öncelik. Bu, veri mesajları için varsayılan önceliktir. Normal öncelikli mesajlar, uygulama ön planda olduğunda hemen teslim edilir. Cihaz Doze'deyken, pil tasarrufu 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 zaman duyarlı iletiler için normal yayınlanma önceliğini seçin.

    Android'de uygulamanız için arka plan veri senkronizasyonu isteyen normal bir öncelikli mesaj alırken, ağ kullanılabilir olduğunda bu görevi ele almak için WorkManager ile bir görev zamanlayabilirsiniz.

  • Yüksek öncelik. FCM, derhal yüksek öncelikli iletiler sağlamaya çalışır, bu da FCM hizmetinin gerektiğinde uyku aygıtını uyandırmasına ve bazı sınırlı işlemler (çok sınırlı ağ erişimi dahil) çalıştırmasına olanak tanır. Yüksek öncelikli mesajlar genellikle kullanıcının uygulamanızla veya bildirimleriyle etkileşime girmesine neden olur. FCM, içinde bulunmadıkları bir kalıp algılarsa, mesajlarınızın önceliği kaldırılabilir. Android P, uygulamanıza gönderebileceğiniz ve uygulamanızı kullanan veya bir bildirim görüntüleyen kullanıcıyla sonuçlanmayan FCM yüksek öncelikli mesaj sayısını sınırlayan uygulama bekleme bölümlerini tanıttı. Yüksek öncelikli bir mesaja yanıt olarak, kullanıcı tarafından görülebilecek bir şekilde bir bildirim görüntülenirse, uygulama bekleme grubu kotanız bu mesaj tarafından kullanılmaz.

    Android mobil popülasyonun küçük bir kısmı yüksek gecikmeli ağlarda olduğundan, bir bildirim görüntülemeden önce sunucularınızla bağlantı açmaktan kaçının. İzin verilen işlem süresinin bitiminden önce sunucuya geri çağrı yapmak, yüksek gecikmeli ağlarda bulunan kullanıcılar için riskli olabilir. Bunun yerine, bildirim içeriğini FCM mesajına ekleyin ve hemen görüntüleyin. Android'de ek uygulama içi içerik için senkronize etmeniz gerekiyorsa, bunu arka planda işlemek için WorkManager ile bir görev zamanlayabilirsiniz.

Bir dergi abonesine yeni içeriğin indirilebileceğini bildirmek için FCM HTTP v1 protokolü aracılığıyla gönderilen normal öncelikli iletiye 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:

Mesajın ömrünü ayarlama

FCM iletileri gönderildikten hemen sonra dağıtır. Ancak, bu her zaman mümkün olmayabilir. Örneğin, platform Android ise, cihaz kapatılabilir, çevrimdışı olabilir veya başka bir şekilde kullanılamaz. Veya FCM, bir uygulamanın aşırı kaynak tüketmesini ve pil ömrünü olumsuz etkilemesini önlemek için mesajları bilerek 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, geç mesajın asla iletilmeyeceği bazı uygulamalar vardır. Örneğin, mesaj gelen bir çağrı veya görüntülü sohbet bildirimiyse, çağrı sonlandırılmadan önce sadece kısa bir süre için anlamlıdır. Veya mesaj bir etkinliğe davetiyse, etkinlik sona erdikten sonra alınırsa 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ı sakladığı ve iletmeye çalıştığı maksimum süreye karşılık gelir. Bu alanı içermeyen istekler varsayılan olarak en fazla dört haftalık süredir.

Bu özellik için bazı olası kullanımlar şunlardır:

  • Görüntülü sohbet gelen çağrılar
  • Davetiye etkinliklerinin süresi doluyor
  • Takvim etkinlikleri

Bir mesajın ömrünü belirtmenin bir başka avantajı, FCM'nin hiçbir zaman 0 saniyelik yaşam süresi değerine sahip mesajları azaltmamasıdır. Başka bir deyişle, FCM "şimdi veya asla" iletilmesi gereken mesajlar için en iyi çabayı garanti eder. 0 time_to_live değerinin, hemen teslim edilemeyen iletilerin time_to_live 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 sağlar.

İşte 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önderenden mesaj alma

FCM, birden çok tarafın aynı istemci uygulamasına mesaj göndermesine izin verir. Örneğin, istemci uygulamasının birden çok katılımcısı olan bir makale toplayıcısı olduğunu ve her birinin yeni bir makale yayınladığında mesaj gönderebileceğini varsayalım. Bu mesaj, istemci uygulamasının makaleyi indirebilmesi için bir URL içerebilir. Tüm gönderme etkinliklerini 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 talebinde bulunurken, istemci uygulaması, belirtilen platform için token alma yöntemini kullanarak, her seferinde kitle alanında farklı bir gönderen kimliğiyle jetonu birden çok kez getirir:

Bu öngörülemeyen sonuçları olabilir gibi, tek bir belirteç isteğine birden gönderen kimliklerini katmayan emin olun. Her çağrıyı gönderici kimliği başına bir kez ayrı yapın.

Son olarak, kayıt jetonunu ilgili gönderenlerle paylaşın, kendi kimlik doğrulama anahtarlarını kullanarak istemci uygulamasına mesaj gönderebilirler.

100 birden fazla gönderici sınırı olduğunu unutmayın.

Mesajın ömrü

Bir uygulama sunucusu FCM'ye bir mesaj gönderdiğinde ve bir mesaj kimliği geri aldığında, mesajın cihaza zaten iletildiği anlamına gelmez. Aksine, teslimat için kabul edildiği anlamına gelir. Mesaj kabul edildikten sonra ne olacağı birçok faktöre bağlıdır.

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

Cihaz bağlı ancak Doze'de ise cihaz Doze'den çıkana kadar FCM tarafından düşük öncelikli bir mesaj kaydedilir. Ve burada collapse_key bayrağı bir rol oynar: depolanmış ve teslim edilmesini bekleyen aynı daraltma anahtarına (ve kayıt jetonuna) sahip bir mesaj varsa, eski mesaj atılır ve yeni mesaj yerini alır (yani, eski mesaj yenisi tarafından daraltılır). Ancak, daraltma tuşu ayarlanmamışsa, hem yeni hem de eski iletiler ileride teslim edilmek üzere saklanır.

Cihaz FCM'ye bağlı değilse, bir bağlantı kurulana kadar mesaj saklanır (yine daraltma anahtar kurallarına uyulur). 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ırlanmışsa), mesaj zaman aşımına uğrar ve FCM depolama alanından çıkarılır. time_to_live bayrağı ayarlanmadığı sürece varsayılan zaman aşımı dört haftadır.

Bir iletinin teslimiyle ilgili daha fazla bilgi edinmek için:

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

Doğrudan kanal mesajlaşmasının etkin olduğu Android cihazlarda, cihaz bir aydan fazla bir süredir FCM'ye bağlanmadıysa, FCM yine de mesajı kabul eder ancak hemen atar. Cihaz, kendisine gönderdiğiniz son veri mesajından sonraki dört hafta içinde bağlanırsa, istemciniz onDeletedMessages () geri çağrısını alır. Uygulama daha sonra, genellikle uygulama sunucusundan tam bir senkronizasyon isteğinde bulunarak 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 atar ve kayıt jetonunu geçersiz kılar. İleride bu cihaza mesaj gönderme girişimleri NotRegistered hatasıyla sonuçlanır.

Kısma ve ölçeklendirme

Hedefimiz her zaman FCM üzerinden gönderilen her mesajı iletmektir. Ancak, her iletiyi iletmek bazen kötü bir genel kullanıcı deneyimine neden olabilir. 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 üst üste daraltmak için tasarlanmış içeriksiz bildirimlerdir. Bir geliştiricinin aynı mesajı bir uygulamaya çok sık tekrarlaması durumunda, kullanıcının pili üzerindeki etkisini azaltmak için iletileri geciktiririz (kısaltırız).

Örneğin, tek bir cihaza çok sayıda yeni e-posta senkronizasyonu isteği gönderirseniz, cihazın daha düşük bir ortalama hızda senkronize edebilmesi için bir sonraki e-posta senkronizasyonu talebini birkaç dakika geciktirebiliriz. Bu azaltma kesinlikle kullanıcının yaşadığı pil etkisini sınırlamak için yapılır.

Kullanım durumunuz yüksek seri çekim gönderme desenleri gerektiriyorsa, daraltılamayan iletiler doğru seçim olabilir. Bu tür mesajlar için, pil maliyetini azaltmak amacıyla içeriği bu tür mesajlara eklediğinizden emin olun.

Daraltılabilir iletileri, her 3 dakikada bir 1 ileti doldurarak, cihaz başına uygulama başına 20 ileti patlamasıyla sınırlandırıyoruz.

XMPP sunucusu kısıtlama

FCM XMPP sunucularına bağlayabileceğiniz hızı, proje başına dakikada 400 bağlantı ile sınırlandırıyoruz. Bu mesaj iletimi için bir sorun olmamalı, ancak sistemimizin istikrarını sağlamak için önemlidir.

Her proje için FCM 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 / saat 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önderme hatalarının pili bir cihaza yanlışlıkla boşaltmasını önler.

Akış yukarı mesaj sınırı

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

Kötü uygulama davranışlarından kaynaklanan pil tüketimine karşı korumak için cihaz başına akış yukarı mesajlarını 1000 / 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 Throttling .

Fanout azaltma

İleti fanout, konuları ve grupları hedeflediğinizde veya kitleleri veya kullanıcı segmentlerini hedeflemek için Bildirimler bestecisini kullandığınız gibi birden fazla cihaza mesaj gönderme işlemidir.

İleti fanout anlık değildir ve bu nedenle arada sırada birden fazla fanoutunuz olur. Proje başına eşzamanlı ileti kesimi sayısını 1000 ile sınırlandırıyoruz. Bundan sonra, devam eden fanout'lar tamamlanana kadar ek fanout isteklerini reddedebilir veya isteklerin fanout'unu erteleyebiliriz.

Gerçek ulaşılabilir fanout oranı, aynı anda fanout isteyen proje sayısından etkilenir. Tek bir proje için 10.000 QPS'lik bir fanout oranı nadir değildir, ancak bu sayı bir garanti değildir ve sistemdeki toplam yükün bir sonucudur. Mevcut fanout kapasitesinin fanout talepleri arasında değil, projeler arasında bölündüğünü belirtmek önemlidir. Dolayısıyla, projenizde iki fanout varsa, her fanout mevcut fanout oranının sadece yarısını görecektir. Fanout hızınızı en üst düzeye çıkarmanın önerilen yolu, aynı anda yalnızca bir etkin fanoutun devam etmesidir.

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

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

Giden bağlantılar 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üncel olmayabilir ve kullanıcılarınızın deneyimini etkileyebilir. İdeal olarak, 5228-5230 numaralı bağlantı noktalarını IP kısıtlaması olmadan beyaz listeye alacaksınız. Ancak, bir IP kısıtlamanız olması gerekiyorsa, Google'ın 15169 ASN'sinde listelenen IPv4 ve IPv6 bloklarındaki tüm IP adreslerini beyaz listeye eklemelisiniz . Bu büyük bir listedir ve kurallarınızı aylık olarak güncellemeyi planlamalısınız. Güvenlik duvarı IP kısıtlamalarının neden olduğu sorunlar genellikle aralıklıdır ve teşhis edilmesi zordur.

Gelen mesajlar için açılacak bağlantı noktaları:

  • 5228
  • 5229
  • 5230
  • 443

Giden bağlantılara izin veren bağlantı noktaları:

Bunlardan biri (seçenek # 1 tercih edilir):

  1. IP kısıtlaması yok
  2. Google'ın 15169 numaralı ASN'sinde listelenen IP bloklarında bulunan tüm IP adresleri. Bunu en az ayda bir kez güncellemeyi unutmayın.

Ağ Adresi Çevirisi ve / veya Durumsal Paket Denetimi güvenlik duvarları:

Ağınız Ağ Adres Çevirisi (NAT) veya Durumsal Paket Denetimi (SPI) uygularsa, 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, 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.

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 konsolu Ayarlar bölmesinde bulunur.
Kayıt jetonu

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

gönderici kimliği Firebase konsolu Ayarlar bölmesinin Cloud Messaging 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 göndereni tanımlamak için kullanılır.
Erişim kodu HTTP v1 API'sine istekleri yetkilendiren kısa ömürlü bir OAuth 2.0 jetonu. Bu belirteç, Firebase projenize ait bir hizmet hesabıyla ilişkilendirilir. 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)

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

Önemli: Sunucu anahtarını istemci kodunuzda hiçbir yere dahil etmeyin. Ayrıca, uygulama sunucunuzu yetkilendirmek için yalnızca sunucu anahtarlarını kullandığınızdan emin olun. Android, iOS ve tarayıcı anahtarları FCM tarafından reddedilir.