Topic Subscription — egy Firebase Cloud Messaging mechanizmus, amely lehetővé teszi az eszközök érdeklődési kör szerinti csoportosítását és értesítések küldését teljes előfizetői kategóriáknak. Ezer egyedi Registration Token külön-külön történő elküldése helyett elég egy üzenetet küldeni egy témára. A Firebase, 2025 adatai szerint a Topic Subscription híralkalmazásokban, sportközvetítésekben és marketingkampányokban használatos az értesítések tömeges kézbesítésére.
Főbb pontok
Topic Subscription — egy csoportos push értesítési mechanizmus, amelyben az eszközök névvel ellátott csatornákra (témákra) fizetnek elő, és fogadják az ezekre a csatornákra küldött üzeneteket. Minden témát egy szöveges név azonosít, például news_sports vagy weather_alerts.
Amikor egy eszköz feliratkozik egy témára, az FCM hozzáadja a Registration Token-jét a téma címzettjeinek listájához. Amikor üzenetet küldenek egy témára, az FCM automatikusan eljuttat egy másolatot minden feliratkozott eszközhöz. A Firebase nem korlátozza az eszközönkénti feliratkozások számát — az alkalmazás több tucat témára is feliratkoztathatja a felhasználót egyszerre.
A témák fő előnye a skálázhatóság. Egymillió felhasználónak történő értesítésküldéshez elég egyetlen HTTP kérés az FCM felé a téma nevével. Egyéni küldés esetén egymillió kérésre vagy tételes küldésre lenne szükség, legfeljebb 500 token egyszerre. A témák a szerveroldali logikát is egyszerűsítik — nem kell tokenlistákat tárolni minden kategóriához.
| Paraméter | Egyéni küldés | Topic Subscription |
|---|---|---|
| Kérések száma | Egy tokenenként vagy tételesen 500-ig | Egy témánként |
| Feliratkozás kezelése | A szerveren (tokenlista) | A kliensen vagy szerveren |
| Dinamikus csoportok | Lista frissítését igényli | Automatikus feliratkozással |
| Címzettek korlátja | Legfeljebb 500 egy kérésben | Korlátlan |
A Topic Subscription széles körben használatos híralkalmazásokban a tartalom kategorizálására — a "Sport", "Politika", "Technológia" témákra való feliratkozás lehetővé teszi a releváns értesítések kézbesítését. Az e-kereskedelemben a témákat bizonyos termékkategóriák kedvezményeiről szóló értesítésekhez használják. Az üzenetküldőkben és közösségi hálózatokban a témákat csoportos eseményekről szóló értesítésekhez alkalmazzák.
A Firebase korlátozásokat ír elő a témákkal való munkára. Egy alkalmazás legfeljebb 2000 témával rendelkezhet. Minden eszköz legfeljebb 2000 témára iratkozhat fel. A feliratkozás/leiratkozás gyakorisága is korlátozott — projektenként legfeljebb 3000 művelet percenként. A korlátok túllépése ideiglenes blokkoláshoz vezet. Sok témával rendelkező projekteknél ajánlott feltételt (condition) használni a téma helyett — az FCM támogatja a logikai kifejezéseket a célzáshoz.
A Topic Subscription folyamata három szakaszból áll: a feliratkozás inicializálása a kliensen, regisztráció az FCM infrastruktúrában és a művelet megerősítése. Sikeres feliratkozás után az eszköz elkezdi fogadni az adott témára küldött üzeneteket.
Amikor a kliens meghívja a subscribeToTopic() metódust, a Firebase SDK kérést küld az FCM szervereknek. A szerver ellenőrzi a művelet megengedhetőségét, és hozzáadja az eszköz tokenjét a téma előfizetőinek listájához. Az FCM visszaküldi a kliensnek a sikeres feliratkozás visszaigazolását. Ettől a pillanattól kezdve a témára küldött összes üzenet kézbesítésre kerül az eszközre.
A témát nem kell előre létrehozni a Firebase konzolban. Amikor bármely eszköz első alkalommal feliratkozik egy news_promo nevű témára, az FCM automatikusan létrehozza azt. Ha az utolsó eszköz leiratkozik, a téma a rendszerben marad, de inaktívvá válik, és új feliratkozáskor folytatja a működését.
Androidon a témákra való feliratkozás és leiratkozás a FirebaseMessaging SDK-n keresztül történik. A subscribeToTopic() és unsubscribeFromTopic() metódusok paraméterként a téma nevét várják. A műveletek aszinkronok, és az eredmény feldolgozását igénylik.
A feliratkozáshoz elég meghívni a subscribeToTopic() metódust a kívánt téma nevével. A Firebase SDK önállóan kezeli a hálózati kéréseket és a hibák esetén történő újrapróbálkozásokat. Ajánlott a témákra való feliratkozás a Registration Token sikeres fogadása után.
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", "Leiratkozva: ${task.isSuccessful}")
}
}
}
Valós alkalmazásokban a felhasználó több kategóriára is feliratkozhat. A kényelmes kezeléshez hozzon létre egy kezelő osztályt, amely szinkronizálja a feliratkozások állapotát a szerveroldallal. Amikor a felhasználó bejelentkezik, állítsa vissza a feliratkozásait a profilból.
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-en a témákra való feliratkozás folyamata logikailag megegyezik az Androidéval, de a Firebase Messaging Swift API-ját használja. A subscribe és unsubscribe metódusok a Messaging példányon hívódnak meg, és szintén aszinkronok.
Egy iOS alkalmazásban egy témára való feliratkozáshoz a Messaging.subscribe() metódus használatos. Fontos, hogy a feliratkozást a Firebase inicializálása és a Registration Token fogadása után hívja meg. Az Apple az értesítések engedélyének kérését ajánlja a témákra való feliratkozás előtt.
import FirebaseMessaging
class PushTopicManager {
func subscribeToTopic(topic: String) {
Messaging.messaging().subscribe(toTopic: topic) { error in
if let error = error {
Log.e("FCM", "Feliratkozási hiba: \(error)")
} else {
Log.d("FCM", "Feliratkozva: \(topic)")
}
}
}
func unsubscribeFromTopic(topic: String) {
Messaging.messaging().unsubscribe(fromTopic: topic) { error in
if let error = error {
Log.e("FCM", "Leiratkozási hiba: \(error)")
}
}
}
}
iOS-en a témára való feliratkozás is a Registration Token-hez van kötve, amelyet a Firebase az APNs-től kap. Ha az APNs token megváltozik (például eszköz helyreállítása után), a Firebase automatikusan átviszi a feliratkozásokat az új tokenre. Ritka esetekben azonban szükség lehet a feliratkozás megújítására a Registration Token frissítése után.
Szerveroldali kezelés lehetővé teszi az eszközök fel- és leiratkozását a kliensalkalmazás részvétele nélkül. Ez hasznos adminisztrációhoz, A/B teszteléshez és a feliratkozások backend oldali kezeléséhez.
A Firebase REST API-t biztosít a tömeges feliratkozáskezeléshez. A /v1/projects/{project_id}/subscriptions metódus lehetővé teszi akár 1000 eszköz feliratkozását egyetlen kérésben. Az API az eszközök Registration Token-jét használja azonosításra.
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("Feliratkozási hiba", error)
}
}
A szerveroldali feliratkozáskezelés több esetben használatos. Felhasználó regisztrációjakor a szerver automatikusan feliratkoztatja az alap témákra. A webes verzióban történő preferenciaváltozáskor a szerver szinkronizálja a feliratkozásokat a mobileszközön. Adminisztrátorok teszteszközöket irathatnak fel belső témákra hibakeresés céljából. Tömeges műveletekhez az FCM Instance Group metódust biztosít, amely lehetővé teszi egy eszközcsoport feliratkozásainak kezelését egyetlen csoportazonosítón keresztül.
A Firebase nem biztosít beépített API-t az eszköz aktuális feliratkozásainak ellenőrzéséhez. A fejlesztőknek ajánlott saját feliratkozási adatbázist vezetni a szerveroldalon. Az alkalmazás minden indításakor a kliens szinkronizálja feliratkozásait a szerverrel egy aktív témák listájának elküldésével. Ez lehetővé teszi a szinkronizálatlanság észlelését és a feliratkozások szükség szerinti helyreállítását. Auditáláshoz használja a Firebase Cloud Functions naplóit — minden subscribe/unsubscribe művelet naplózható.
Gyakran Ismételt Kérdések
A témák maximális száma 2000 alkalmazásonként. Ha többre van szüksége, fontolja meg Eszközcsoportok (Device Groups) vagy egyéni tokenenkénti küldés használatát.
A Firebase nem biztosít közvetlen API-t az eszköz feliratkozási listájának lekéréséhez. A fejlesztőknek ajánlott a feliratkozások állapotát a saját szerverükön tárolni és szinkronizálni a klienssel.
Az FCM sikeres eredményt ad vissza. A Firebase a nem létező témáról való leiratkozást no-op műveletként kezeli — nem generálódnak hibák, az állapot nem változik.
Igen, a Firebase konzol Cloud Messaging szekciójában kiválaszthatja a témát célközönségként, és teszt- vagy éles értesítést küldhet a webes felületen keresztül.
A feliratkozás általában néhány másodpercen belül aktiválódik. Ritka esetekben azonban a késleltetés elérheti a 30–60 másodpercet az információ FCM szerverek közötti terjedése miatt.
Összegzés
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is