Konu Aboneliği, cihazları ilgi alanlarına göre gruplandırmaya ve abone kategorilerinin tamamına bildirim göndermeye olanak tanıyan bir Firebase Cloud Messaging mekanizmasıdır. Binlerce bireysel Registration Token'a göndermek yerine, bir konuya tek bir mesaj göndermek yeterlidir. Firebase, 2025'e göre, Konu Aboneliği haber uygulamalarında, spor yayınlarında ve pazarlama kampanyalarında büyük ölçekli bildirim dağıtımı için kullanılır.
Önemli Noktalar
Konu Aboneliği, cihazların adlandırılmış kanallara (konular) abone olduğu ve bu kanallara gönderilen mesajları aldığı bir grup push bildirimi dağıtım mekanizmasıdır. Her konu, news_sports veya weather_alerts gibi bir dize adıyla tanımlanır.
Bir cihaz bir konuya abone olduğunda, FCM onun Registration Token'ını o konunun alıcı listesine ekler. Konuya bir mesaj gönderildiğinde, FCM otomatik olarak abone olan her cihaza bir kopya yönlendirir. Firebase, cihaz başına abonelik sayısını sınırlamaz — bir uygulama, bir kullanıcıyı aynı anda düzinelerce konuya abone yapabilir.
Konuların ana avantajı ölçeklenebilirliktir. Bir milyon kullanıcıya bildirim göndermek için, konu adıyla FCM'ye tek bir HTTP isteği yeterlidir. Bireysel gönderimde, bir milyon istek veya bir seferde 500 tokene kadar toplu gönderim gerekirdi. Konular ayrıca sunucu tarafı mantığını basitleştirir — her kategori için token listeleri saklamaya gerek yoktur.
| Parametre | Bireysel gönderim | Konu Aboneliği |
|---|---|---|
| İstek sayısı | Token başına bir veya 500'e kadar toplu | Konu başına bir |
| Abonelik yönetimi | Sunucuda (token listesi) | İstemcide veya sunucuda |
| Dinamik gruplar | Liste güncellemesi gerektirir | Abonelik yoluyla otomatik |
| Alıcı sınırı | İstek başına 500'e kadar | Sınırsız |
Konu Aboneliği, haber uygulamalarında içerik kategorizasyonu için yaygın olarak kullanılır — “Spor”, “Siyaset”, “Teknoloji” konularına abone olmak ilgili bildirimlerin iletilmesini sağlar. E-ticarette, konular belirli ürün kategorilerindeki indirimlerle ilgili bildirimler için kullanılır. Mesajlaşma ve sosyal ağ uygulamalarında, konular gruplardaki etkinliklerle ilgili bildirimler için kullanılır.
Firebase, konularla çalışırken kısıtlamalar getirir. Tek bir uygulama en fazla 2000 konuya sahip olabilir. Her cihaz en fazla 2000 konuya abone olabilir. Abonelik/abonelik iptali işlemlerinin sıklığı da sınırlıdır — proje başına dakikada en fazla 3000 işlem. Bu sınırların aşılması geçici blokajla sonuçlanır. Çok sayıda konuya sahip projeler için, konular yerine koşul (condition) kullanılması önerilir — FCM, hedefleme için mantıksal ifadeleri destekler.
Konu Aboneliği süreci üç aşamadan oluşur: istemcide aboneliğin başlatılması, FCM altyapısına kayıt ve işlemin onaylanması. Başarılı abonelikten sonra cihaz, o konuya gönderilen mesajları almaya başlar.
İstemci subscribeToTopic() yöntemini çağırdığında, Firebase SDK FCM sunucularına bir istek gönderir. Sunucu, işlemin geçerliliğini kontrol eder ve cihaz token'ını konunun abone listesine ekler. FCM, istemciye başarılı abonelik onayı döndürür. Bu andan itibaren, bu konuya gönderilen tüm mesajlar cihaza iletilecektir.
Firebase konsolunda önceden bir konu oluşturmak gerekmez. İlk cihaz news_promo adlı bir konuya abone olduğunda, FCM onu otomatik olarak oluşturur. Son cihaz aboneliği iptal ederse, konu sistemde kalır ancak etkin değildir ve yeni bir abonelik olduğunda çalışmaya devam eder.
Android'de, konulara abone olma ve abonelikten çıkma, FirebaseMessaging SDK aracılığıyla yapılır. subscribeToTopic() ve unsubscribeFromTopic() yöntemleri, parametre olarak konu adını alır. İşlemler asenkrondur ve sonuç işleme gerektirir.
Abone olmak için, hedef konu adıyla subscribeToTopic()'i çağırmak yeterlidir. Firebase SDK, ağ isteklerini ve hata durumunda yeniden denemeleri otomatik olarak yönetir. Başarılı bir şekilde Registration Token aldıktan sonra konulara abone olunması önerilir.
class TopicSubscriber(private val context: Context) {
fun subscribeToNewsTopic() {
FirebaseMessaging.getInstance()
.subscribeToTopic("news_latest")
.addOnCompleteListener { task ->
val msg = if (task.isSuccessful) {
"Subscribed to news topic"
} else {
"Subscription failed"
}
Log.d("FCM", msg)
}
}
fun unsubscribeFromNewsTopic() {
FirebaseMessaging.getInstance()
.unsubscribeFromTopic("news_latest")
.addOnCompleteListener { task ->
Log.d("FCM", "Abonelik iptal edildi: ${task.isSuccessful}")
}
}
}
Gerçek uygulamalarda, bir kullanıcı birden çok kategoriye abone olabilir. Kolay yönetim için, abonelik durumunu sunucu tarafıyla senkronize eden bir yönetici sınıfı oluşturun. Bir kullanıcı giriş yaptığında, aboneliklerini profilinden geri yükleyin.
class SubscriptionManager(private val context: Context) {
private val fcm = FirebaseMessaging.getInstance()
suspend fun syncSubscriptions(topics: List<String>) {
topics.forEach { topic ->
fcm.subscribeToTopic(topic).await()
}
}
suspend fun removeAllSubscriptions() {
val savedTopics = getSavedTopics()
savedTopics.forEach { topic ->
fcm.unsubscribeFromTopic(topic).await()
}
}
private fun getSavedTopics(): List<String> {
return listOf("news_latest", "promotions", "updates")
}
}
iOS'ta, konu aboneliği süreci mantıksal olarak Android'le aynıdır ancak Swift Firebase Messaging API'sini kullanır. subscribe ve unsubscribe yöntemleri Messaging örneğinde çağrılır ve bunlar da asenkrondur.
Bir iOS uygulamasında bir konuya abone olmak için Messaging.subscribe() yöntemini kullanın. Firebase başlatma ve Registration Token alma işleminden sonra aboneliği çağırmak önemlidir. Apple, konulara abone olmadan önce bildirim izni istenmesini önerir.
import FirebaseMessaging
class PushTopicManager {
func subscribeToTopic(topic: String) {
Messaging.messaging().subscribe(toTopic: topic) { error in
if let error = error {
Log.e("FCM", "Abonelik hatası: \(error)")
} else {
Log.d("FCM", "\(topic) konusuna abone olundu")
}
}
}
func unsubscribeFromTopic(topic: String) {
Messaging.messaging().unsubscribe(fromTopic: topic) { error in
if let error = error {
Log.e("FCM", "Abonelik iptal hatası: \(error)")
}
}
}
}
iOS'ta, konu aboneliği Firebase'in APNs'den aldığı Registration Token'a da bağlıdır. APNs token'ı değişirse (örneğin, cihaz geri yüklemesinden sonra), Firebase abonelikleri otomatik olarak yeni token'a aktarır. Ancak, nadir durumlarda, Registration Token güncellemesinden sonra yeniden abonelik gerekebilir.
Sunucu tarafı abonelik yönetimi, istemci uygulamasını dahil etmeden cihazları abone yapmayı ve abonelikten çıkarmayı sağlar. Bu, yönetim, A/B testi ve backend tarafında abonelik yönetimi için kullanışlıdır.
Firebase, toplu abonelik yönetimi için bir REST API sağlar. /v1/projects/{project_id}/subscriptions uç noktası, tek bir istekte en fazla 1000 cihaza kadar abone olmaya izin verir. API, tanımlama için cihazların Registration Token'larını kullanır.
const admin = require("firebase-admin")
async function subscribeUsersToTopic(tokens, topic) {
try {
const response = await admin
.messaging()
.subscribeToTopic(tokens, topic)
Log.info(`Success: ${response.successCount}`)
Log.info(`Failures: ${response.failureCount}`)
} catch (error) {
Log.error("Abonelik hatası", error)
}
}
Sunucu tarafı abonelik yönetimi birkaç senaryoda kullanılır. Bir kullanıcı kaydolduğunda, sunucu onu otomatik olarak temel konulara abone yapar. Web sürümünde tercihler değiştiğinde, sunucu mobil cihazdaki abonelikleri senkronize eder. Yöneticiler, hata ayıklama için test cihazlarını dahili konulara abone yapabilir. Toplu işlemler için FCM, tek bir grup tanımlayıcısı aracılığıyla bir cihaz grubunun aboneliklerini yönetmeye olanak tanıyan Instance Group yöntemini sağlar.
Firebase, bir cihazın mevcut aboneliklerini kontrol etmek için yerleşik bir API sağlamaz. Geliştiricilerin, sunucu tarafında kendi abonelik veritabanlarını tutmaları önerilir. Her uygulama başlatıldığında, istemci etkin konuların listesini göndererek aboneliklerini sunucuyla senkronize eder. Bu, senkronizasyon bozukluğunu belirlemeye ve gerekirse abonelikleri geri yüklemeye yardımcı olur. Denetim için Firebase Cloud Functions günlüklerini kullanın — her subscribe/unsubscribe işlemi günlüğe kaydedilebilir.
Sıkça Sorulan Sorular
Maksimum konu sayısı uygulama başına 2000'dir. Daha fazlası gerekiyorsa, cihaz gruplarını veya token'larla bireysel gönderimi değerlendirin.
Firebase, bir cihazın abonelik listesini almak için doğrudan bir API sağlamaz. Geliştiricilerin abonelik durumunu kendi sunucularında saklamaları ve istemciyle senkronize etmeleri önerilir.
FCM başarılı bir sonuç döndürür. Firebase, var olmayan bir konudan abonelik iptalini no-op işlemi olarak ele alır — hata oluşmaz, durum değişmez.
Evet, Firebase konsolunda Cloud Messaging bölümünde, bir konuyu hedef kitle olarak seçebilir ve web arayüzü üzerinden test veya üretim bildirimi gönderebilirsiniz.
Genellikle, abonelik birkaç saniye içinde etkinleşir. Ancak, nadir durumlarda, FCM sunucuları arasında yayılmadan kaynaklanan gecikme 30–60 saniyeye kadar çıkabilir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun