Topic Subscription — mechanismus Firebase Cloud Messaging, který umožňuje seskupovat zařízení podle zájmů a odesílat oznámení celým kategoriím předplatitelů. Místo odesílání na tisíce jednotlivých Registration Tokenů stačí odeslat jednu zprávu na téma. Podle údajů Firebase, 2025 se Topic Subscription používá v zpravodajských aplikacích, sportovních přenosech a marketingových kampaních pro hromadné doručování oznámení.
Hlavní body
Topic Subscription — je mechanismus skupinového odesílání push oznámení, při kterém se zařízení přihlašují k odběru pojmenovaných kanálů (témat) a dostávají zprávy odeslané na tyto kanály. Každé téma je identifikováno řetězcovým názvem, například news_sports nebo weather_alerts.
Když se zařízení přihlásí k odběru tématu, FCM přidá jeho Registration Token do seznamu příjemců tohoto tématu. Při odeslání zprávy na téma FCM automaticky směruje kopii každému přihlášenému zařízení. Firebase neomezuje počet předplatných na zařízení — aplikace může přihlásit uživatele k desítkám témat současně.
Hlavní výhodou témat je škálovatelnost. Pro odeslání oznámení milionu uživatelů stačí jeden HTTP požadavek na FCM s názvem tématu. Při individuálním odesílání by byl potřeba milion požadavků nebo dávkové odesílání až 500 tokenů najednou. Témata také zjednodušují logiku serverové části — není třeba ukládat seznamy tokenů pro každou kategorii.
| Parametr | Individuální odesílání | Topic Subscription |
|---|---|---|
| Počet požadavků | Jeden na token nebo dávkově do 500 | Jeden na téma |
| Správa předplatných | Na serveru (seznam tokenů) | Na klientovi nebo serveru |
| Dynamické skupiny | Vyžadují aktualizaci seznamu | Automaticky přes předplatné |
| Limit příjemců | Až 500 v jednom požadavku | Neomezený |
Topic Subscription je široce používán ve zpravodajských aplikacích pro kategorizaci obsahu — přihlášení k tématům "Sport", "Politika", "Technologie" umožňuje doručovat relevantní oznámení. V e-commerce se témata používají pro oznámení o slevách v konkrétních kategoriích produktů. V messengerech a sociálních sítích se témata používají pro oznámení o událostech ve skupinách.
Firebase ukládá omezení pro práci s tématy. Jedna aplikace může mít až 2000 témat. Každé zařízení se může přihlásit k nejvýše 2000 tématům. Frekvence přihlašování/odhlašování je také omezena — ne více než 3000 operací za minutu na projekt. Překročení limitů vede k dočasnému blokování. Pro projekty s velkým počtem témat se doporučuje použít podmínku (condition) místo tématu — FCM podporuje logické výrazy pro cílení.
Proces Topic Subscription se skládá ze tří fází: inicializace předplatného na klientovi, registrace v infrastruktuře FCM a potvrzení operace. Po úspěšném předplatném začne zařízení přijímat zprávy odeslané na toto téma.
Když klient zavolá metodu subscribeToTopic(), Firebase SDK odešle požadavek na servery FCM. Server zkontroluje přípustnost operace a přidá token zařízení do seznamu předplatitelů tématu. FCM vrátí klientovi potvrzení o úspěšném předplatném. Od tohoto okamžiku budou všechna zprávy na toto téma doručovány zařízení.
Téma není třeba předem vytvářet v konzoli Firebase. Při prvním přihlášení jakéhokoli zařízení k tématu s názvem news_promo jej FCM automaticky vytvoří. Pokud se poslední zařízení odhlásí, téma zůstává v systému, ale neaktivní, a obnoví činnost při novém předplatném.
Na Androidu se přihlašování a odhlašování témat provádí prostřednictvím FirebaseMessaging SDK. Metody subscribeToTopic() a unsubscribeFromTopic() přijímají název tématu jako parametr. Operace jsou asynchronní a vyžadují zpracování výsledku.
Pro přihlášení stačí zavolat subscribeToTopic() s názvem cílového tématu. Firebase SDK samostatně spravuje síťové požadavky a opakované pokusy při selhání. Doporučuje se přihlásit k tématům po úspěšném obdržení Registration Tokenu.
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", "Odhlášeno: ${task.isSuccessful}")
}
}
}
V reálných aplikacích se uživatel může přihlásit k několika kategoriím. Pro pohodlnou správu vytvořte třídu správce, která synchronizuje stav předplatných se serverovou částí. Při přihlášení uživatele obnovte jeho předplatná z profilu.
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")
}
}
Na iOS je proces přihlašování k tématům logicky shodný s Androidem, ale používá Swift API Firebase Messaging. Metody subscribe a unsubscribe jsou volány na instanci Messaging a jsou také asynchronní.
Pro přihlášení k tématu v iOS aplikaci se používá metoda Messaging.subscribe(). Je důležité volat předplatné po inicializaci Firebase a obdržení Registration Tokenu. Apple doporučuje žádat o povolení oznámení před přihlášením k tématům.
import FirebaseMessaging
class PushTopicManager {
func subscribeToTopic(topic: String) {
Messaging.messaging().subscribe(toTopic: topic) { error in
if let error = error {
Log.e("FCM", "Chyba předplatného: \(error)")
} else {
Log.d("FCM", "Přihlášeno k \(topic)")
}
}
}
func unsubscribeFromTopic(topic: String) {
Messaging.messaging().unsubscribe(fromTopic: topic) { error in
if let error = error {
Log.e("FCM", "Chyba odhlášení: \(error)")
}
}
}
}
Na iOS je předplatné tématu také vázáno na Registration Token, který Firebase získává od APNs. Pokud se APNs token změní (například po obnovení zařízení), Firebase automaticky přenese předplatná na nový token. Ve vzácných případech však může být vyžadováno opětovné přihlášení po aktualizaci Registration Tokenu.
Serverová správa předplatných umožňuje přihlašovat a odhlašovat zařízení bez účasti klientské aplikace. To je užitečné pro administraci, A/B testování a správu předplatných na backendové straně.
Firebase poskytuje REST API pro hromadnou správu předplatných. Metoda /v1/projects/{project_id}/subscriptions umožňuje přihlásit až 1000 zařízení v jednom požadavku. API používá Registration Tokeny zařízení k identifikaci.
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("Chyba předplatného", error)
}
}
Serverová správa předplatných se používá v několika scénářích. Při registraci uživatele server automaticky přihlásí k základním tématům. Při změně preferencí ve webové verzi server synchronizuje předplatná na mobilním zařízení. Správci mohou přihlásit testovací zařízení k interním tématům pro ladění. Pro hromadné operace poskytuje FCM metodu Instance Group, která umožňuje spravovat předplatná skupiny zařízení prostřednictvím jediného identifikátoru skupiny.
Firebase neposkytuje vestavěné API pro kontrolu aktuálních předplatných zařízení. Vývojářům se doporučuje vést vlastní databázi předplatných na serverové straně. Při každém spuštění aplikace klient synchronizuje svá předplatná se serverem odesláním seznamu aktivních témat. To umožňuje odhalit desynchronizaci a obnovit předplatná v případě potřeby. Pro audit používejte protokoly Firebase Cloud Functions — každá operace subscribe/unsubscribe může být zaznamenána.
Často kladené otázky
Maximální počet témat je 2000 na aplikaci. Pokud potřebujete více, zvažte použití skupin zařízení (Device Groups) nebo individuální odesílání podle tokenů.
Firebase neposkytuje přímé API pro získání seznamu předplatných zařízení. Vývojářům se doporučuje ukládat stav předplatných na vlastním serveru a synchronizovat jej s klientem.
FCM vrátí úspěšný výsledek. Firebase zpracovává odhlášení z neexistujícího tématu jako operaci no-op — nejsou generovány žádné chyby, stav se nemění.
Ano, v konzoli Firebase v sekci Cloud Messaging můžete vybrat téma jako cilovou skupinu a odeslat testovací nebo ostré oznámení prostřednictvím webového rozhraní.
Obvykle se předplatné aktivuje během několika sekund. Ve vzácných případech však může zpoždění dosáhnout 30–60 sekund kvůli šíření informací po serverech FCM.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také