Topic Subscription — een Firebase Cloud Messaging-mechanisme waarmee u apparaten kunt groeperen op interesses en meldingen kunt sturen naar hele categorieën abonnees. In plaats van naar duizenden afzonderlijke Registration Tokens te sturen, volstaat het om één bericht naar een onderwerp te sturen. Volgens Firebase, 2025 wordt Topic Subscription gebruikt in nieuwsapps, sportuitzendingen en marketingcampagnes voor massale meldingslevering.
Belangrijkste punten
Topic Subscription — is een mechanisme voor het groepsgewijs verzenden van pushmeldingen, waarbij apparaten zich abonneren op benoemde kanalen (onderwerpen) en berichten ontvangen die via deze kanalen worden verzonden. Elk onderwerp wordt geïdentificeerd door een tekenreeksnaam, bijvoorbeeld news_sports of weather_alerts.
Wanneer een apparaat zich op een onderwerp abonneert, voegt FCM de Registration Token toe aan de lijst van ontvangers van dat onderwerp. Bij het verzenden van een bericht naar een onderwerp, stuurt FCM automatisch een kopie naar elk geabonneerd apparaat. Firebase beperkt het aantal abonnementen per apparaat niet — de applicatie kan de gebruiker op tientallen onderwerpen tegelijk abonneren.
Het belangrijkste voordeel van onderwerpen is schaalbaarheid. Om een melding naar een miljoen gebruikers te sturen, is één HTTP-verzoek aan FCM met de naam van het onderwerp voldoende. Bij individueel verzenden zou een miljoen verzoeken of batchverzending van maximaal 500 tokens per keer nodig zijn. Onderwerpen vereenvoudigen ook de serverlogica — het is niet nodig om tokenlijsten voor elke categorie op te slaan.
| Parameter | Individueel verzenden | Topic Subscription |
|---|---|---|
| Aantal verzoeken | Eén per token of batch tot 500 | Eén per onderwerp |
| Abonnementbeheer | Op de server (tokenlijst) | Op de client of server |
| Dynamische groepen | Vereisen lijstupdate | Automatisch via abonnement |
| Limiet ontvangers | Tot 500 in één verzoek | Onbeperkt |
Topic Subscription wordt veel gebruikt in nieuwsapps voor het categoriseren van inhoud — abonneren op onderwerpen "Sport", "Politiek", "Technologie" maakt het mogelijk relevante meldingen te leveren. In e-commerce worden onderwerpen gebruikt voor meldingen over kortingen in specifieke productcategorieën. In messengers en sociale netwerken worden onderwerpen gebruikt voor meldingen over gebeurtenissen in groepen.
Firebase legt beperkingen op voor het werken met onderwerpen. Eén applicatie kan maximaal 2000 onderwerpen hebben. Elk apparaat kan zich op niet meer dan 2000 onderwerpen abonneren. De frequentie van abonneren/opzeggen is ook beperkt — niet meer dan 3000 operaties per minuut per project. Het overschrijden van limieten leidt tot tijdelijke blokkering. Voor projecten met een groot aantal onderwerpen wordt aanbevolen een conditie (condition) te gebruiken in plaats van een onderwerp — FCM ondersteunt logische expressies voor targeting.
Het Topic Subscription-proces bestaat uit drie fasen: initialisatie van het abonnement op de client, registratie in de FCM-infrastructuur en bevestiging van de operatie. Na een succesvol abonnement begint het apparaat berichten te ontvangen die naar dat onderwerp zijn verzonden.
Wanneer de client de methode subscribeToTopic() aanroept, stuurt de Firebase SDK een verzoek naar de FCM-servers. De server controleert de toelaatbaarheid van de operatie en voegt de token van het apparaat toe aan de lijst van abonnees van het onderwerp. FCM retourneert de bevestiging van een succesvol abonnement aan de client. Vanaf dat moment worden alle berichten op dit onderwerp aan het apparaat geleverd.
Het onderwerp hoeft niet vooraf in de Firebase-console te worden aangemaakt. Bij het eerste abonnement van een apparaat op een onderwerp met de naam news_promo, maakt FCM het automatisch aan. Als het laatste apparaat het abonnement opzegt, blijft het onderwerp in het systeem maar inactief, en hervat het bij een nieuw abonnement.
Op Android worden abonneren en opzeggen van onderwerpen uitgevoerd via de FirebaseMessaging SDK. De methoden subscribeToTopic() en unsubscribeFromTopic() nemen de naam van het onderwerp als parameter. De operaties zijn asynchroon en vereisen verwerking van het resultaat.
Om u te abonneren, volstaat het om subscribeToTopic() aan te roepen met de naam van het gewenste onderwerp. De Firebase SDK beheert netwerkverzoeken en herhaalpogingen bij fouten zelfstandig. Het wordt aanbevolen om u op onderwerpen te abonneren na het succesvol ontvangen van de Registration Token.
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", "Opgezegd: ${task.isSuccessful}")
}
}
}
In echte applicaties kan een gebruiker zich op meerdere categorieën abonneren. Maak voor gemakkelijk beheer een managerklasse die de abonnementsstatus synchroniseert met de serverzijde. Herstel bij het inloggen van de gebruiker zijn abonnementen uit het profiel.
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")
}
}
Op iOS is het proces van abonneren op onderwerpen logisch identiek aan Android, maar gebruikt het de Swift API van Firebase Messaging. De methoden subscribe en unsubscribe worden aangeroepen op de Messaging-instantie en zijn ook asynchroon.
Om u te abonneren op een onderwerp in een iOS-app, wordt de methode Messaging.subscribe() gebruikt. Het is belangrijk om het abonnement aan te roepen na initialisatie van Firebase en het ontvangen van de Registration Token. Apple raadt aan toestemming voor meldingen te vragen voordat u zich op onderwerpen abonneert.
import FirebaseMessaging
class PushTopicManager {
func subscribeToTopic(topic: String) {
Messaging.messaging().subscribe(toTopic: topic) { error in
if let error = error {
Log.e("FCM", "Abonnementsfout: \(error)")
} else {
Log.d("FCM", "Geabonneerd op \(topic)")
}
}
}
func unsubscribeFromTopic(topic: String) {
Messaging.messaging().unsubscribe(fromTopic: topic) { error in
if let error = error {
Log.e("FCM", "Opzeggingsfout: \(error)")
}
}
}
}
Op iOS is het abonnement op een onderwerp ook gekoppeld aan de Registration Token die Firebase van APNs ontvangt. Als de APNs-token verandert (bijvoorbeeld na herstel van het apparaat), draagt Firebase de abonnementen automatisch over naar de nieuwe token. In zeldzame gevallen kan echter een hernieuwd abonnement nodig zijn na het bijwerken van de Registration Token.
Serverbeheer van abonnementen maakt het mogelijk apparaten te abonneren en op te zeggen zonder tussenkomst van de client-applicatie. Dit is handig voor beheer, A/B-testen en het beheren van abonnementen aan de backend-kant.
Firebase biedt een REST API voor massaal abonnementbeheer. De methode /v1/projects/{project_id}/subscriptions maakt het mogelijk tot 1000 apparaten in één verzoek te abonneren. De API gebruikt de Registration Tokens van apparaten voor identificatie.
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("Abonnementsfout", error)
}
}
Serverbeheer van abonnementen wordt in verschillende scenario's gebruikt. Bij registratie van een gebruiker abonneert de server hem automatisch op basisonderwerpen. Bij wijziging van voorkeuren in de webversie synchroniseert de server de abonnementen op het mobiele apparaat. Beheerders kunnen testapparaten op interne onderwerpen abonneren voor foutopsporing. Voor massa-operaties biedt FCM de methode Instance Group, waarmee abonnementen van een groep apparaten via één groeps-ID kunnen worden beheerd.
Firebase biedt geen ingebouwde API voor het controleren van huidige abonnementen van een apparaat. Ontwikkelaars wordt aangeraden een eigen abonnementsdatabase aan de serverzijde bij te houden. Bij elke start van de applicatie synchroniseert de client zijn abonnementen met de server door een lijst van actieve onderwerpen te sturen. Dit maakt het mogelijk desynchronisatie te detecteren en abonnementen indien nodig te herstellen. Gebruik voor auditing de logs van Firebase Cloud Functions — elke subscribe/unsubscribe-operatie kan worden geregistreerd.
Veelgestelde vragen
Het maximale aantal onderwerpen is 2000 per applicatie. Als u meer nodig heeft, overweeg dan het gebruik van apparaatgroepen (Device Groups) of individueel verzenden op tokens.
Firebase biedt geen directe API om de abonnementslijst van een apparaat op te halen. Ontwikkelaars wordt aangeraden de abonnementsstatus op de eigen server op te slaan en deze met de client te synchroniseren.
FCM retourneert een succesvol resultaat. Firebase behandelt opzegging van een niet-bestaand onderwerp als een no-op operatie — er worden geen fouten gegenereerd, de status verandert niet.
Ja, in de Firebase-console in de sectie Cloud Messaging kunt u een onderwerp selecteren als doelgroep en een test- of productiemelding sturen via de webinterface.
Meestal wordt het abonnement binnen enkele seconden geactiveerd. In zeldzame gevallen kan de vertraging echter 30–60 seconden bedragen door de verspreiding van informatie over FCM-servers.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook