Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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. Gibi güvenilen bir ortamda Bulut Fonksiyonlar veya uygulama sunucusu kullanmak Admin SDK veya FCM Sunucu Protokoller Set: notification tuşu. İsteğe bağlı veri yüküne sahip olabilir. Her zaman katlanabilir.

    Bazı Bkz ekran bildirimleri örneklerini ve gönderme isteği yükleri.

  2. Kullanım Bildirimler besteci : 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). Gibi güvenilen bir ortamda Bulut Fonksiyonlar veya uygulama sunucusu kullanmak Admin SDK veya FCM Sunucu Protokoller Set: data sadece anahtar.

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 nişan için için şunları yapabilirsiniz Firebase konsolunu kullanarak bildirim mesajları göndermek . Firebase konsol analitik tabanlı sağlar test A / B hassaslaştıracağınız yardımına ve pazarlama mesajları geliştirmek.

Admin SDK ya FCM protokollerini kullanarak programlı göndermek bildirim mesajlarının için set notification bildirim mesajının kullanıcı tarafından görülen kısmı için anahtar-değer seçeneklerinin gerekli önceden tanımlanmış set ile anahtar. Ö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.

Bilgi ortak kapsüllü halinde yukarıda belirtilen Örneğin, burada da aynı IM uygulamasında JSON biçimli mesajdır data içeriğini yorumlamak bekleniyor tuşu ve istemci uygulaması:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}

Üst düzey ya da ortak Yukarıdaki örnek gösterir kullanım data mesajı alan tüm platformlar üzerinde istemciler tarafından yorumlanır alan. Her platformda, istemci uygulaması veri yükünü bir geri arama işlevinde alır.

Veri mesajları için şifreleme

Android Taşıma Katmanı (bkz FCM mimarisini ) 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. Bununla birlikte, bu şekilde mevcut dış çözümler vardır Kapiller veya DTLS .

İ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. Gelen bildirimler besteci , Gelişmiş seçeneklerinde Özel veri alanları 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 planda, uygulamalar bildirim tepsisinde bildirim yükü alır ve kullanıcı bildirimini dokunduğunda yalnızca veri taşıma kapasitesine sahiptir zaman.
  • Ne zaman ön planda, uygulama mevcut hem yükleri ile bir mesaj nesnesi alır.

İşte hem içeren JSON biçimli mesajdır notification tuşu ve data anahtarı:

{
  "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 ve FCM v1 HTTP protokolü hem mesajınız istekleri mevcut tüm alanları belirlemesine izin message nesnesi. Bu içerir:

  • alanların ortak bir dizi iletisi tüm uygulama örnekleri tarafından yorumlanmalıdır.
  • gibi alanlarda, platforma özel setleri AndroidConfig ve WebpushConfig , belirtilen platformda çalışan uygulamaya örnekleri sadece 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 alanın yanı sıra platforma özgü alanlarını Gönder

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 ile mesaj göndermek zaman teslimat seçenekleri , kullanım platforma özel alanlar bunları ayarlamak için. İ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. Her platformu biraz farklı örneğin, süre-canlı saniyede bir son kullanma süresi olarak Android'de ayarlanır değeri yorumlayabilir çünkü iOS'ta bir son kullanma tarihi olarak belirlenir iken, buna bağlıdı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
  • - Android ve iOS'ta bildiriminde bir kullanıcı musluğu sonucunu tanımlamak için uygun anahtarlarını ayarlar click_action ve category sırasıyla.
{
  "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"
       }
     }
   }
 }

Bkz HTTP v1 referans belgeleri ileti gövdesinde platforma özgü bloklar halinde mevcut tuşları tam ayrıntı için. , Mesaj gövdesi ihtiva bkz gönderme isteklerini oluşturma hakkında daha fazla bilgi için Yapı Gönder İstekleri .

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

Olmayan bir katlanabilir mesajı, her bir mesaj bir cihaza teslim edilmesini göstermektedir. 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.

Bir katlanabilir mesajı henüz cihaza teslim edilecek takdirde, yeni bir mesaj ile değiştirilebilir 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. 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:
  • collapseKey Android'de
  • apns-collapse-id iOS'ta
  • Topic Web'de
  • 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 varsayılan öncelik veri mesajlarının . 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.

    Uygulamanız için bir arka plan veri senkronizasyonu istekleri Android'de normal öncelikli mesajı aldıktan sonra istediğiniz gibi bir görevi zamanlayabilirsiniz WorkManager ağ kullanılabilir olduğunda bunu işlemek için.

  • 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, böyle olmayan bir model algılarsa, mesajlarınızın önceliği kaldırılabilir. Android P tanıtıldı uygulaması bekleme kova uygulamanızı kullanarak veya bir bildirim görüntüleyen kullanıcının sonuçlanmayan uygulamanıza gönderebilir FCM yüksek öncelikli mesaj sayısını sınırlar. 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 in-app içeriği için senkronizasyonu gerekiyorsa, bir görev zamanlayabilirsiniz WorkManager arka planda olduğunu işlemek için.

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. Bir unutmayın time_to_live hemen teslim edilemez 0 vasıta mesajlarının değeri atılır. 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, lütfen her gönderenin sahip olun gönderen kimliği . 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 işte burada collapse_key bayrak bir rol oynar: zaten aynı daraltma anahtarına (ve kayıt belirteci) saklanır ve teslimat için bekleyen bir mesaj varsa, eski mesajı atılır ve yeni mesaj, eski yerini (alır 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. Sürece varsayılan zaman aşımı, dört haftadır time_to_live bayrak ayarlanır.

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

    Android veya iOS'ta mesajların iletimine ilişkin daha fazla ayrıntı almak için, bkz FCM raporlama gösterge tablosu ileti sayısı Android için (kullanıcılar tarafından görülen bildirimler) "gösterim" için verileriyle birlikte gönderilen ve iOS ve Android cihazlarda açılan kayıtları, 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 buna gönderilen son veri mesajının dört hafta içinde bağlanıyorsa, müşteriniz aldığı onDeletedMessages () geri arama. 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. Gelecek girişimleri bir o cihaz sonuçlarına bir mesaj göndermek için NotRegistered hata.

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 daraltma

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 mesajlar için, 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ı

Biz sınırlamak memba mesajlar memba hedef sunucularını aşırı yüklenmesini önlemek için proje başına 1.500.000 / dakikada.

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ısma .

Fan çıkışı daraltma

İleti fanout böyle konuları hem gruplarını hedef ya olduğu gibi birden fazla cihaz, bir mesaj göndererek işlemidir kullandığınızda Bildirimler besteci hedef gruplarına ve kullanıcı segmentlerine.

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 kaybederek 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. Eğer bir IP kısıtlaması olması gerekir Ancak, sen listelenen tüm IP adreslerini AllowList gerektiğini goog.json . 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 portlar:

  • 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.clients.google.com
  • device-provisioning.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 mevcuttur Firebase konsol Ayarları bölmesinde.
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 Eğer mevcut senin Firebase projesini oluştururken benzersiz bir sayısal değer yarattı Bulut Mesajlaşma Firebase konsol Ayarları bölmesinin sekme. Gönderici kimliği, istemci uygulamasına mesaj gönderebilen her 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. Belirteçleri oluşturmak ve döndürme erişim için açıklanan adımları izleyin Yetki Gönder Talepleri .
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. Sen içinde görebilirsiniz Bulut Mesajlaşma Firebase konsol Ayarları bölmesinin sekme.

Önemli: Do müşteri kodunuza sunucu anahtarı hiçbir yerinde içermez. 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.