Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

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 - iOS, 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

Ne zaman ortak alanları kullanmayın, sadece belirli platformlara değerleri göndermek istiyorum; platforma özel alanları kullanın. Örneğin, yalnızca iOS ve web'e bildirim göndermek, ancak Android'e göndermemek için, biri iOS 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ı yorumlayabilmesidir; örneğin, yaşama süresi Android'de saniye cinsinden bir sona erme süresi olarak, iOS'ta ise bir sona erme tarihi olarak ayarlanı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 (iOS) 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 iOS'ta 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 iOS ve web'de benzer seçeneklere izin verir. Örneğin, "katlanabilir" mesajı davranış FCM aracılığıyla Android'de desteklenir collapse_key aracılığıyla iOS'ta, apns-collapse-id ve üzeri JavaScript / Web'de Topic . 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 katlanabilir gibi bir mesaj işaretlemek için, dahil collapse_key mesajı payloadındaki parametreyi. 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.

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. Bununla birlikte, daraltılabilir mesajlar kullanıyorsanız, FCM'nin herhangi bir zamanda kayıt belirteci başına FCM bağlantı sunucusu 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 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:
  • collapseKey Android'de
  • apns-collapse-id
  • Web'deki Topic
  • collapse_key eski protokollerinde (tüm platformlar)

Bir mesajın önceliğini ayarlama

Android'de aşağı akış mesajlarına teslim önceliği atamak için iki seçeneğiniz vardır: normal ve yüksek öncelik. Normal ve yüksek öncelikli mesajların teslimi şu şekilde çalışır:

  • Normal öncelik. Bu, veri mesajları için varsayılan önceliktir. Normal öncelikli mesajlar, uygulama ön plandayken hemen teslim edilir. Cihaz Doze durumundayken, 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 zamana duyarlı mesajlar için normal teslim önceliğini seçin.

    Android'de uygulamanız için bir arka plan veri senkronizasyonu talep eden normal bir öncelikli mesaj aldığınızda, ağ kullanılabilir olduğunda bunu işlemek için WorkManager ile bir görev planlayabilirsiniz.

  • Yüksek öncelik. FCM, yüksek öncelikli mesajları hemen iletmeye çalışır ve FCM hizmetinin gerektiğinde uyuyan bir cihazı uyandırmasına ve bazı sınırlı işlemleri (çok sınırlı ağ erişimi dahil) çalıştırmasına izin verir. Yüksek öncelikli mesajlar genellikle uygulamanızla veya uygulamanızın bildirimleriyle kullanıcı etkileşimi ile sonuçlanmalıdır. FCM, bunların olmadığı bir model algılarsa, mesajlarınızın önceliği kaldırılabilir. Android P, uygulamanıza gönderebileceğiniz ve kullanıcının uygulamanızı kullanmasına veya bir bildirim görüntülemesine neden olmayan yüksek öncelikli FCM mesajlarının sayısını sınırlayan uygulama bekleme paketleri sundu. Yüksek öncelikli bir mesaja yanıt olarak, kullanıcının görebileceği şekilde bir bildirim görüntülenirse, uygulama bekleme paketi kotanız bu mesaj tarafından tüketilmez.

    Android mobil popülasyonunun küçük bir kısmı yüksek gecikmeli ağlarda olduğundan, bir bildirim görüntülemeden önce sunucularınıza bağlantı açmaktan kaçının. İzin verilen işlem süresi bitmeden sunucuyu geri aramak, yüksek gecikmeli ağlardaki 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 eşitleme yapmanız gerekiyorsa, bunu arka planda halletmek için WorkManager ile bir görev planlayabilirsiniz.

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 time_to_live 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:

Bu öngörülemeyen sonuçları olabilir gibi, tek bir belirteç isteğine birden gönderen kimliklerini katmayan emin olun. 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 iOS'ta mesajların teslimi 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 panosuna bakın. 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 eden yaymaların bazıları 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 5229 ve 5230'u 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üncelliğini kaybederek kullanıcılarınızın deneyimini etkileyebilir. İdeal olarak, 5228-5230 numaralı bağlantı noktalarını IP kısıtlaması olmadan beyaz listeye alın. Ancak, bir IP kısıtlamanız olması gerekiyorsa, goog.json içinde listelenen tüm IP adreslerini beyaz listeye almalısınız . 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.

Gelen mesajlar için açılacak portlar:

  • 5228
  • 5229
  • 5230
  • 443

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

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

  1. IP kısıtlaması yok
  2. Varsayılan etki alanları için tüm IP adresleri.

    Bu adreslerin güncel bir listesini almak için varsayılan alanlar için IP adresleri bölümünde açıklanan talimatları izleyin.

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önderen 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, iOS ve tarayıcı anahtarları FCM tarafından reddedilir.