FCM iletileri hakkında

Firebase Cloud Messaging (FCM), çok çeşitli mesajlaşma seçenekleri ve özellikleri sunar. Bu sayfadaki bilgilerin amacı, farklı FCM mesajı türlerini ve bunlarla neler yapabileceğinizi anlamanıza yardımcı olmaktır.

Mesaj türleri

FCM ile, istemcilere iki tür mesaj gönderebilirsiniz:

  • Bildirim mesajları (bazen "mesajları göster" olarak da düşünülür.) Bunlar, FCM SDK'sı tarafından otomatik olarak işlenir.
  • İstemci uygulaması tarafından işlenen veri mesajları.

Bildirim mesajları, kullanıcıların görebildiği önceden tanımlanmış bir dizi anahtar içerir. Buna karşılık 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. Her iki mesaj türü için maksimum yük 4.096 bayttır. Ancak 1.000 karakter sınırını zorunlu kılan Firebase konsolundan mesaj gönderme durumları hariçtir.

Senaryoyu kullan Nasıl gönderilir?
Bildirim mesajı FCM SDK'sı, arka planda çalışırken istemci uygulaması adına son kullanıcı cihazlarına mesajı gösterir. Aksi takdirde, bildirim alındığında uygulama ön planda çalışıyorsa davranışı uygulamanın kodu belirler. Bildirim mesajlarında, kullanıcıların görebildiği önceden tanımlanmış bir dizi anahtar ve özel anahtar/değer çiftlerinden oluşan isteğe bağlı bir veri yükü bulunur.
  1. Cloud Functions veya uygulama sunucunuz gibi güvenilir bir ortamda Admin SDK'sını ya da HTTP v1 API'yi kullanın. notification tuşunu ayarlayın. İsteğe bağlı veri yükü olabilir. Her zaman daraltılabilir.

    Görüntüleme bildirimlerine ilişkin bazı örneklere bakın ve istek yüklerini gönderin.

  2. Bildirim oluşturucuyu kullanın: Mesaj Metni, Başlık vb. bilgileri girin ve gönderin. Özel veriler sağlayarak isteğe bağlı veri yükü ekleyin.
Veri mesajı Veri mesajlarını işlemekten istemci uygulaması sorumludur. Veri mesajları, ayrılmış anahtar adları olmayan yalnızca özel anahtar/değer çiftleri içerir (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. Gönderme isteğinde data anahtarını ayarlayın.

FCM SDK'sının, uygulamanız arka planda çalışırken otomatik olarak bildirim görüntülemesini istiyorsanız bildirim mesajlarını kullanın. Mesajları kendi istemci uygulama kodunuzla işlemek istediğinizde veri mesajlarını kullanın.

FCM, isteğe bağlı veri yükünü içeren bir bildirim mesajı gönderebilir. Bu gibi durumlarda, FCM bildirim yükünü görüntüleme işini ve istemci uygulaması da veri yükünü işler.

Bildirim mesajları

Test etmek 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 sunar.

Yönetici SDK'sını veya FCM protokollerini kullanarak programatik olarak bildirim mesajları göndermek için notification anahtarını, bildirim mesajının kullanıcının görebildiği kısmı için önceden tanımlanmış gerekli anahtar/değer çifti seçenekleri grubuyla ayarlayın. Örneğin, bir IM uygulamasında JSON biçimli bildirim mesajını burada görebilirsiniz. Kullanıcı, cihazda "Portekiz - Danimarka" başlığı ve "mükemmel eşleşme!" metnini içeren bir mesaj görebilir:

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

Bildirim mesajları, uygulama arka plandayken bildirim tepsisine gönderilir. Ön plandaki uygulamalar için mesajlar bir geri çağırma işleviyle işlenir.

Bildirim mesajları oluşturmak için kullanılabilen önceden tanımlanmış anahtarların tam listesi için HTTP v1 Protokolü bildirim nesnesi referans 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ıdakiyle aynı IM uygulamasında yer alan JSON biçimli bir mesajı burada görebilirsiniz. Bu mesajda bilgiler, ortak data anahtarında yer alır 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 örnekte, mesajı alan tüm platformlarda istemciler tarafından yorumlanan üst düzey veya ortak data alanının kullanımı gösterilmektedir. İstemci uygulaması, her platformda geri çağırma işleviyle veri yükünü alır.

Veri mesajları için şifreleme

Android Taşıma 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 Capillary veya DTLS gibi harici çözümler mevcuttur.

İsteğe bağlı veri yükü içeren bildirim mesajları

Hem programatik olarak hem de Firebase konsolu üzerinden, isteğe bağlı özel anahtar/değer çiftleri yükü içeren bildirim mesajları gönderebilirsiniz. Bildirim oluşturucu'da, Gelişmiş seçenekler'deki Özel veri alanlarını kullanın.

Hem bildirim hem de veri yükü içeren mesajlar alındığında uygulamanın davranışı, uygulamanın arka planda mı yoksa ön planda mı olduğuna (esasen gönderildiği sırada etkin olup olmadığına bağlıdır.)

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

Hem notification hem de data anahtarını içeren JSON biçimli bir mesaj aşağıda verilmiştir:

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

Mesajları platformlar arasında özelleştirme

Firebase Admin SDK'sı ve FCM v1 HTTP protokolü, mesaj isteklerinizin message nesnesindeki tüm alanları ayarlamasına izin verir. Bunlardan bazıları:

  • mesajı alan tüm uygulama örnekleri tarafından yorumlanacak ortak bir alan grubudur.
  • Yalnızca belirtilen platformda çalışan uygulama örnekleri tarafından yorumlanan AndroidConfig ve WebpushConfig gibi platforma özgü alan grupları.

Platforma özel engellemeler, alındıklarında doğru şekilde işlenmelerini sağlamak amacıyla size farklı platformlar için mesajları özelleştirme esnekliği sunar. FCM arka ucu, belirtilen tüm parametreleri dikkate alır ve mesajı her platform için özelleştirir.

Ortak alanlar ne zaman kullanılır?

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

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

Değerleri yalnızca belirli platformlara göndermek istediğinizde ortak alanları kullanmayın, platforma özel alanları kullanın. Örneğin, Android'e değil de yalnızca Apple platformlarına ve web'e bildirim göndermek isterseniz biri Apple, diğeri web için olmak üzere iki ayrı alan grubu kullanmanız gerekir.

Belirli teslim seçenekleriyle ileti gönderirken bunları ayarlamak için platforma özel alanları kullanın. İsterseniz her platform için farklı değerler belirtebilirsiniz. Ancak platformlar genelinde temelde aynı değeri ayarlamak isteseniz bile platforma özel alanları kullanmanız gerekir. Bunun nedeni, her platformun değeri biraz farklı yorumlayabilmesidir. Örneğin, geçerlilik süresi Android'de saniye cinsinden süre sonu olarak, Apple'da ise geçerlilik tarihi olarak ayarlanır.

Örnek: Platforma özel teslim seçenekleri içeren bildirim mesajı

Aşağıdaki v1 gönderme isteği, tüm platformlara ortak bildirim başlığı ve içeriği göndermenin yanı sıra platforma özel bazı geçersiz kılma işlemleri de gönderir. Özel olarak, istek:

  • APN'lerin (Apple platformları) mesaj önceliğini düşük bir ayara ayarlarken Android ve Web platformları için uzun bir geçerlilik süresi belirler.
  • kullanıcının Android ve Apple'da (sırasıyla click_action ve category) bildirime dokunmasının sonucunu 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"
       }
     }
   }
 }

Mesaj gövdesindeki platforma özgü bloklarda bulunan anahtarlar hakkında ayrıntılı bilgi için HTTP v1 referans belgelerine bakın. Mesaj gövdesini içeren gönderme istekleri oluşturma hakkında daha fazla bilgi için Gönderme İstekleri Oluşturma bölümüne bakın.

Teslimat seçenekleri

FCM, Android cihazlara gönderilen iletiler için belirli teslim seçenekleri sunar. Ayrıca, Apple platformlarında ve web'de de benzer seçeneklere olanak tanır. Örneğin, "daraltılabilir" mesaj davranışı Android'de FCM'nin collapse_key, Apple'da apns-collapse-id ve JavaScript/Web üzerinden Topic aracılığıyla desteklenir. Ayrıntılar için bu bölümdeki açıklamalara ve ilgili referans belgelerine göz atın.

Daraltılamayan ve daraltılabilir mesajlar

Daraltılamaz mesaj, her bir mesajın cihaza teslim edildiğini belirtir. Daraltılamayan mesajlar, veri getirmek üzere sunucuyla iletişim kurmak için mobil uygulamaya gönderilen içeriksiz bir "ping" gibi daraltılabilir mesajın aksine bazı faydalı içerikler sunar.

Daraltılamayan mesajların tipik kullanım alanlarından bazıları sohbet mesajları veya kritik mesajlardır. Örneğin, bir IM uygulamasında, her mesajın içeriği farklı olduğu için her mesajı iletmek istersiniz.

Android'de, daraltılmadan depolanabilecek mesaj sayısı 100 ile sınırlıdır. Bu sınıra ulaşılırsa depolanan tüm mesajlar silinir. Cihaz tekrar internete bağlandığında, bu sınıra ulaşıldığını belirten özel bir mesaj alır. Daha sonra uygulama, genellikle uygulama sunucusundan tam senkronizasyon isteğinde bulunarak durumu düzgün bir şekilde işleyebilir.

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

Daraltılabilir mesajların yaygın kullanım alanlarından biri, bir mobil uygulamaya sunucudaki verileri senkronize etmesini bildirmek için kullanılan mesajlardır. Kullanıcıları en son skorla güncelleyen bir spor uygulaması buna örnek olarak gösterilebilir. Yalnızca en son mesaj alakalıdır.

Android'de bir mesajı daraltılabilir olarak işaretlemek için mesaj yüküne collapse_key parametresini ekleyin. Varsayılan olarak daraltma anahtarı, Firebase konsolunda kayıtlı uygulama paketi adıdır. FCM sunucusu, aynı anda cihaz başına her biri farklı bir daraltma anahtarına sahip dört farklı daraltılabilir mesaj depolayabilir. Bu sayıyı aşarsanız FCM, yalnızca dört daraltma anahtarı kullanır ve hangilerinin saklanacağına dair bir garanti vermez.

Yük içermeyen konu mesajları varsayılan olarak daraltılabilir. Bildirim mesajları her zaman daraltılabilir ve collapse_key parametresini yoksayar.

Hangisini kullanmalıyım?

Uygulamanızda daraltılamayan mesajlar kullanmak gerekmiyorsa daraltılabilir mesajlar performans açısından daha iyi bir seçenektir. Ancak daraltılabilir mesajlar kullanıyorsanız FCM'nin herhangi bir zamanda FCM tarafından kayıt jetonu başına en fazla dört farklı daraltma anahtarının kullanılmasına izin verdiğini unutmayın. Bu sayıyı aşmamanız gerekir. Aksi takdirde, tahmin edilemeyen sonuçlara neden olabilir.

Senaryoyu kullan Nasıl gönderilir?
Daraltılamaz Her mesaj, istemci uygulaması için önemlidir ve teslim edilmesi gerekir. Bildirim mesajları dışındaki tüm mesajlar varsayılan olarak daraltılamaz.
Katlanabilir İstemci uygulamasıyla alakasız olan daha eski ve ilgili bir mesajı oluşturan yeni bir mesaj olduğunda, FCM eski mesajı değiştirir. Örneğin: sunucudan veri senkronizasyonu başlatmak için kullanılan mesajlar veya eski bildirim mesajları. Mesaj isteğinizdeki uygun parametreyi ayarlayın:
  • Android'de collapseKey
  • Apple'da apns-collapse-id
  • Web'de Topic
  • Eski protokollerde collapse_key (tüm platformlar)

İletinin önceliğini ayarlama

Aşağı akış mesajlarına teslim önceliği atamak için iki seçeneğiniz vardır: normal ve yüksek öncelikli. Davranış, platformlar arasında biraz farklılık gösterse de normal ve yüksek öncelikli mesajların teslimi şu şekilde işler:

  • Normal öncelikli. Normal öncelikli mesajlar, uygulama ön plandayken hemen gönderilir. Arka plandaki uygulamaların teslimi gecikebilir. Yeni e-posta bildirimleri, kullanıcı arayüzünüzü senkronize etme veya arka planda uygulama verilerini senkronize etme gibi zaman açısından daha az iletiler için normal teslim önceliğini seçin.

  • Yüksek öncelikli. FCM, cihaz Doz modunda olsa bile yüksek öncelikli mesajları hemen teslim etmeye çalışır. Yüksek öncelikli mesajlar, zamana duyarlı, kullanıcı tarafından görülebilen içerik içindir.

Aşağıda, bir dergi abonesine yeni içeriğin indirilmeye hazır olduğunu bildirmek için FCM HTTP v1 protokolü aracılığıyla gönderilen normal öncelikli bir mesaj örneği 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 hakkında platforma özel daha fazla ayrıntı için:

Bir iletinin kullanım ömrünü ayarlama

FCM genellikle iletileri gönderildikten hemen sonra teslim eder. Ancak bu her zaman mümkün olmayabilir. Örneğin, platform Android ise cihaz kapalı, çevrimdışı veya başka bir şekilde kullanılamıyor olabilir. Alternatif olarak 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 durumda FCM, mesajı depolar ve mümkün olan en kısa sürede teslim eder. Çoğu durumda bu iyi olsa da geç mesajların hiçbir zaman teslim edilebileceği bazı uygulamalar vardır. Örneğin mesaj, gelen bir arama veya görüntülü sohbet bildirimiyse arama sonlandırılmadan önce yalnızca kısa bir süre için anlamlı olur. Mesaj bir etkinlik davetiyesiyse etkinlik sona erdikten sonra alındığında bir işe yaramaz.

Android ve Web/JavaScript'te, bir mesajın maksimum ömrünü belirtebilirsiniz. Değer 0 ile 2.419.200 saniye (28 gün) arasında bir süre olmalıdır ve FCM'nin mesajı depolayıp göndermeye çalıştığı maksimum süreye karşılık gelir. Bu alanı içermeyen istekler, varsayılan olarak maksimum dört hafta sürer.

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

  • Görüntülü sohbet gelen aramaları
  • Süresi dolan davetiye etkinlikleri
  • Takvim etkinlikleri

Bir mesajın kullanım ömrünü belirtmenin bir diğer avantajı da FCM'nin, geçerlilik süresi 0 saniye olan mesajlara daraltılabilir mesaj kısıtlaması uygulamamasıdır. FCM, "şimdi veya hiçbir zaman" teslim edilmesi gereken mesajları en iyi şekilde işlemeyi sağlar. time_to_live değerinin 0 olması, hemen teslim edilemeyen mesajların silineceği anlamına gelir. Ancak bu tür mesajlar hiçbir zaman depolanmadığından bu, bildirim mesajı göndermek için en iyi gecikmeyi sağlar.

Aşağıda, TTL içeren bir istek örneği verilmiştir:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    },
    "apns":{
      "headers":{
        "apns-expiration":"1604750400"
      }
    },
    "android":{
      "ttl":"4500s"
    },
    "webpush":{
      "headers":{
        "TTL":"4500"
      }
    }
  }
}

Bir iletinin kullanım ömrü

Bir uygulama sunucusunun FCM'ye bir mesaj gönderip geri bir mesaj kimliği alması, mesajın cihaza zaten teslim edildiği anlamına gelmez. Bunun yerine, teslimat için kabul edildiği anlamına gelir. Kabul edildikten sonra iletiye ne olacağı birçok faktöre bağlıdır.

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

Cihaz bağlı ancak Doz modundaysa FCM, cihaz Doz'dan çıkana kadar düşük öncelikli bir mesaj depolar. collapse_key işareti de burada bir rol oynar: Aynı daraltma anahtarına (ve kayıt jetonuna) sahip olup teslim edilmeyi bekleyen bir ileti zaten varsa eski ileti silinir ve yenisinin yerini alır (yani eski ileti yeni ileti tarafından daraltılır). Ancak, daraltma anahtarı ayarlanmazsa hem yeni hem de eski iletiler ileride teslim edilmek üzere depolanır.

Cihaz FCM'ye bağlı değilse mesaj, bağlantı kurulana kadar depolanır (yine de daraltma anahtarı kurallarına uyulur). Bir bağlantı kurulduğunda FCM, bekleyen tüm mesajları cihaza iletir. Cihaz bir daha hiç bağlanmazsa (örneğin, fabrika ayarlarına sıfırlanmışsa) mesaj sonunda zaman aşımına uğrar ve FCM depolama alanından silinir. time_to_live işareti ayarlanmadığı sürece varsayılan zaman aşımı süresi dört haftadır.

İleti teslimiyle ilgili daha fazla bilgi edinmek için:

    Android veya Apple platformlarında mesajların teslimi hakkında daha fazla bilgi edinmek için FCM raporlama kontrol paneline göz atın. Burada, Apple ve Android cihazlarda gönderilen ve açılan mesaj sayısıyla birlikte Android uygulamalarına ait "gösterimler" (kullanıcılar tarafından görülen bildirimler) verilerini kaydeder.

Doğrudan kanal mesajlaşmasının etkinleştirildiği Android cihazlarda, cihaz bir aydan uzun süredir FCM'ye bağlanmamışsa FCM mesajı yine kabul eder ancak hemen siler. Cihaz, ona gönderdiğiniz son veri mesajından sonraki dört hafta içinde bağlanırsa müşteriniz on deletedMessages() geri çağırmasını alır. Daha sonra uygulama, genellikle uygulama sunucusundan tam senkronizasyon isteğinde bulunarak durumu düzgün bir şekilde işleyebilir.

Son olarak, FCM cihaza bir mesaj göndermeyi denediğinde ve uygulama kaldırıldığında, FCM bu mesajı hemen siler ve kayıt jetonunu geçersiz kılar. Bu cihaza daha sonra mesaj gönderme girişimlerinde NotRegistered hatası verilir.

Kısıtlama ve kotalar

Amacımız, FCM aracılığıyla gönderilen tüm iletileri her zaman teslim etmektir. Ancak her iletinin gönderilmesi bazen genel olarak kötü bir kullanıcı deneyimine yol açabilir. Diğer durumlarda, FCM'nin tüm gönderenlere ölçeklenebilir bir hizmet sağladığından emin olmak için sınırlar sağlamamız gerekir. Bu bölümde açıklanan sınır ve kota türleri, bu önemli faktörleri dengelememize yardımcı olur.

Aşağı akış mesaj kısıtlama

HTTP v1 API, aşağı akış mesajları için proje başına dakika başına kotalar sundu. Dakikada 600.000 mesaj olan varsayılan kota, FCM geliştiricilerinin% 99'undan fazlasını kapsarken sistemin kararlılığını korur ve keskin projelerin etkisini en aza indirir.

Ani trafik kalıpları kota aşılması hatalarına neden olabilir. Kota aşımı senaryosunda, sistem bir sonraki dakika içinde kota yeniden doldurulana kadar HTTP durum kodu 429 (QUOTA_EXCEEDED) sunar. Aşırı yükleme durumlarında 429 yanıtları da döndürülebilir. Bu nedenle, yayınlanan önerilere göre 429'ları ele almanız önemle tavsiye edilir.

Unutmayın:

  • Aşağı akış kotası, istekleri değil mesajları ölçer.
  • İstemci hataları (HTTP durum kodu 400-499) sayılır (429'lar hariç).
  • Kotalar dakika başınadır, ancak bu dakikalar saate göre belirlenmez.

İzleme kotası

Google Cloud Console'da kotayı, kullanımı ve hataları görüntüleyebilirsiniz:

  1. Google Cloud Console'a gidin.
  2. API'ler ve hizmetler'i seçin
  3. Tablo listesinden Firebase Cloud Messaging API'yi seçin.

NOT: Bu grafikler, kota dakikalarıyla tam olarak uyumlu değildir. Diğer bir deyişle, trafik kotanın altında göründüğünde 429'lar sunulabilir.

Kota artışı isteme

Kota artışı isteğinde bulunmadan önce aşağıdakilerden emin olun:

  • Kullanımınız, günde en az 5 dakika boyunca düzenli olarak kotanın en az% 80'i kadardır.
  • Özellikle trafiğin yoğun olduğu saatlerde, istemci hata oranınız% 5'in altında.
  • Geniş ölçekte ileti göndermeyle ilgili en iyi uygulamaları takip ediyorsunuz.

Bu ölçütleri karşılıyorsanız +% 25'e kadar kota artış isteği gönderebilirsiniz. FCM, isteği yerine getirmek için mümkün olan her türlü çabayı gösterecektir (artış garantisi verilmez).

Yaklaşan bir lansman veya geçici etkinlik nedeniyle daha fazla aşağı akış mesajlaşma kotasına ihtiyaç duyarsanız isteğin işlenmesi için yeterli zaman tanımak amacıyla kotanızı en az 15 gün önceden isteyin. Büyük istekler (dakikada 18 milyondan fazla mesaj) için en az 30 gün önceden bildirimde bulunulması gerekir. Lansmanlar ve özel etkinlik istekleri, istemci hata oranı ve en iyi uygulama gereksinimlerine tabi olmaya devam eder.

Ayrıca, FCM kotaları ile ilgili SSS bölümüne bakın.

Konu mesajı sınırı

Konu aboneliği ekleme/kaldırma oranı proje başına 3.000 QPS ile sınırlıdır.

İleti gönderme ücretleri için Takipçi Desteği'ne bakın.

Fanout kısıtlaması

Mesaj yayma işlemi, birden fazla cihaza mesaj gönderme işlemidir (ör. konuları ve grupları hedeflediğinizde ya da kitleleri veya kullanıcı segmentlerini hedeflemek için Bildirim oluşturucuyu kullandığınızda).

Mesaj yayılma işlemi anlık değildir. Bu nedenle, bazen eşzamanlı olarak devam eden birden fazla yayılmanız olabilir. Proje başına eşzamanlı mesaj yayma sayısını 1.000 ile sınırlandırıyoruz. Bunun ardından, devam eden dağılma işlemlerinden bazıları tamamlanana kadar ek dağılma isteklerini reddedebilir veya isteklerin yayılımını erteleyebiliriz.

Ulaşılabilir gerçek dağılma oranı, aynı anda dağılma isteğinde bulunan projelerin sayısından etkilenir. Tek bir proje için 10.000 QPS'lik bir yayılma oranı sık görülen bir şey değildir ancak bu bir garanti değildir ve sistemdeki toplam yükün sonucudur. Mevcut dağılma kapasitesinin dağılma istekleri arasında değil projeler arasında bölündüğünü unutmayın. Yani projenizde devam eden iki dağılma varsa her bir dağılma, mevcut yayılma oranının yalnızca yarısını görür. Fanout hızınızı en üst düzeye çıkarmanın önerilen yolu, aynı anda yalnızca bir etkin yayma işleminin devam etmesidir.

Daraltılabilir mesaj kısıtlama

Yukarıda açıklandığı gibi, daraltılabilir iletiler birbirinin üzerine daralacak şekilde tasarlanmış içeriksiz bildirimlerdir. Bir geliştiricinin aynı mesajı bir uygulamaya çok sık tekrarlaması durumunda, kullanıcının pil üzerindeki etkisini azaltmak için mesajları geciktiririz (kısıtlanır).

Örneğin, tek bir cihaza çok sayıda yeni e-posta senkronizasyon isteği gönderirseniz cihazın daha düşük bir ortalama hızda senkronize edilebilmesi için bir sonraki e-posta senkronizasyon isteğini birkaç dakika geciktirebiliriz. Bu kısıtlama, yalnızca kullanıcının yaşadığı pil etkisini sınırlandırmak için yapılır.

Kullanım alanınız yüksek seri çekim gönderme kalıpları gerektiriyorsa daraltılamayan mesajlar doğru seçim olabilir. Bu tür mesajlarda, pil maliyetini azaltmak için bu tür mesajlara içerik eklediğinizden emin olun.

Daraltılabilir mesajları, her cihaz için uygulama başına maksimum 20 mesaj olacak şekilde sınırlandırıyoruz ve her 3 dakikada 1 mesaj yeniden dolduruyoruz.

XMPP sunucusu kısıtlama

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

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

Kötü uygulama davranışlarından dolayı pilin tükenmesini önlemek için yukarı akış mesajlarını cihaz başına dakikada 1.000 ile sınırlandırıyoruz.

Tek bir cihaza gönderilen maksimum mesaj hızı

Android'de tek bir cihaza dakikada 240 mesaj ve saatte 5.000 mesaj gönderebilirsiniz. Bu yüksek eşiğin amacı, kullanıcıların sohbet üzerinden hızlı bir şekilde etkileşimde bulunması gibi kısa süreli trafik patlamalarını sağlamaktır. Bu sınır, gönderme mantığıyla ilgili hataların cihazdaki pilin yanlışlıkla boşalmasını önler.

iOS'ta, hız APNs sınırlarını aştığında hata döndürür.

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

Kuruluşunuzda internet trafiğini kısıtlayan bir güvenlik duvarı varsa ağınızdaki cihazların mesaj alabilmesi için bu güvenlik duvarını mobil cihazların FCM'ye bağlanmasına izin verecek şekilde yapılandırmanız gerekir. FCM genellikle bağlantı noktası 5228'i kullanır ancak bazen 443, 5229 ve 5230'u da kullanır.

IP aralığımız çok sık değiştiğinden ve güvenlik duvarı kurallarınız güncelliğini yitirebileceğinden kullanıcılarınızın deneyimini olumsuz etkileyebileceğinden, ağınıza bağlanan cihazlar için FCM belirli IP'ler sağlamaz. İdeal olarak, IP kısıtlaması olmadan 5228-5230 ve 443 numaralı bağlantı noktalarını izin verilenler listesine ekleyin. Ancak IP kısıtlamanız varsa goog.json adresinde listelenen tüm IP adreslerini izin verilenler listesine eklemeniz gerekir. Bu büyük liste düzenli olarak güncellenir ve kurallarınızı her ay güncellemeniz önerilir. Güvenlik duvarı IP kısıtlamalarının neden olduğu sorunlar genellikle aralıklı olur ve teşhis edilmesi zordur.

IP adresleri yerine izin verilenler listesine eklenebilecek bir dizi alan adı sunuyoruz. Bu ana makine adları aşağıda listelenmiştir. Ek ana makine adları kullanmaya başlarsak buradaki listeyi güncelleyeceğiz. Güvenlik duvarı kuralınız için alan adları kullanmak, güvenlik duvarı cihazınızda işlevsel olabilir veya çalışmayabilir.

AçılacakTCP bağlantı noktaları:

  • 5228
  • 5229
  • 5230
  • 443

Açılacak ana makine 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 Çevrimi ve/veya Durum Bilgili Paket Denetimi güvenlik duvarları:

Ağınız Ağ Adresi Çevrimi (NAT) veya Durum Bilgili Paket İncelemesi (SPI) uyguluyorsa 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 sayede kullanıcılarınızın mobil cihazlarının pil tüketimini azaltırken güvenilir bağlantı sunabiliriz.

VPN etkileşimleri ve atlanabilirlik

Firebase Cloud Messaging, telefon ile sunucu arasındaki push mesajlaşma bağlantısının güvenilir ve mümkün olduğunca sık kullanılabilir olmasını sağlamak için çeşitli adımlar gerçekleştirir. VPN kullanımı bu çalışmayı karmaşık hâle getirir.

VPN'ler, güvenilirliği ve pil ömrünü en üst düzeye çıkarmak için FCM'nin bağlantısını ayarlaması gereken temel bilgileri maskeler. Bazı durumlarda VPN'ler, uzun ömürlü bağlantıları etkin bir şekilde bozar. Bu da, gözden kaçan veya geciken mesajlar ya da yüksek pil maliyeti nedeniyle kötü kullanıcı deneyimine neden olur. VPN buna izin verecek şekilde yapılandırıldığında, güvenilir ve pil dostu bir deneyim sağlamak için VPN'yi şifrelenmiş bir bağlantı (temel ağ kablosuz veya LTE üzerinden) kullanarak atlarız. FCM'nin atlanabilir VPN kullanımı, FCM Push Bildirimi kanalına özgüdür. Kayıt trafiği gibi diğer FCM trafiği, etkin durumdaysa VPN'i kullanır. FCM bağlantısı VPN'yi atladığında, VPN'nin sağlayabileceği IP maskeleme gibi ek avantajları kaybeder.

Farklı VPN'ler, şifrenin atlanıp atlanamayacağını kontrol etmek için farklı yöntemler kullanır. Talimatlar için VPN'nize özgü belgeleri inceleyin.

VPN, atlanabilir olacak şekilde yapılandırılmamışsa Firebase Cloud Messaging, sunucuya bağlanmak için VPN ağını kullanır. Bu durum, mesajların gecikmesine neden olabilir ve Cloud Messaging, VPN bağlantısı üzerinden bağlantıyı sürdürmeye çalışırken daha fazla pil kullanımına yol açabilir.

Kimlik bilgileri

Hangi FCM özelliklerini uyguladığınıza bağlı olarak, Firebase projenizden aşağıdaki kimlik bilgilerine ihtiyacınız olabilir:

Proje kimliği Firebase projeniz için benzersiz bir tanımlayıcıdır. FCM v1 HTTP uç noktasına yapılan isteklerde kullanılır. Bu değer, Firebase konsolunun Ayarlar bölmesinde bulunur.
Kayıt jetonu

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

Gönderen kimliği Firebase projenizi oluşturduğunuzda oluşturulan benzersiz bir sayısal değerdir. Bu değer, Firebase konsolunun Ayarlar bölmesindeki Cloud Messaging sekmesinde bulunur. Gönderen kimliği, istemci uygulamasına mesaj gönderebilen her bir göndereni tanımlamak için kullanılır.
Erişim jetonu HTTP v1 API'ye yönelik istekleri yetkilendiren kısa ömürlü bir OAuth 2.0 jetonu. Bu jeton, Firebase projenize ait bir hizmet hesabıyla ilişkilendirilmiş. Erişim jetonları oluşturmak ve mevcut jetonları değiştirmek için Gönderme İsteklerini Yetkilendirme bölümünde açıklanan adımları uygulayın.
Sunucu anahtarı (**desteği sonlandırılan** eski protokoller için)

Uygulama sunucunuzu, kullanımdan kaldırılan eski Firebase Cloud Messaging protokolleri aracılığıyla mesaj göndermek de dahil olmak üzere Google hizmetlerine erişim için yetkilendiren bir sunucu anahtarıdır.

Önemli: İstemci kodunuzun hiçbir yerinde sunucu anahtarını 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.