Firebase Cloud Messaging (FCM) — is een cross-platform dienst voor het leveren van pushmeldingen en berichten van Google, bedoeld voor mobiele en webapplicaties. FCM zorgt voor betrouwbare gegevensoverdracht tussen de server en client-apparaten zonder dat er een permanente netwerkverbinding nodig is. Volgens Firebase Documentation, 2026 passeren dagelijks meer dan 300 miljard berichten de FCM-infrastructuur wereldwijd. De dienst ondersteunt zowel meldingen met automatische weergave als data-berichten voor verborgen gegevensoverdracht op de achtergrond.
Belangrijkste punten
Firebase Cloud Messaging — is een clouddienst van Google die pushmeldingen en data-berichten overdraagt tussen de applicatieserver en client-apparaten. De dienst heeft de verouderde Google Cloud Messaging (GCM) vervangen en is de standaardoplossing geworden voor push-levering in het Firebase-ecosysteem. FCM ondersteunt Android, iOS, Web en Unity en biedt een uniforme verzendinterface ongeacht het doelplatform.
De dienst biedt verschillende mechanismen voor berichtlevering, elk met een eigen taak. Notification-berichten worden bij ontvangst automatisch door het systeem weergegeven — de ontwikkelaar hoeft geen code te schrijven voor het tonen van de melding. Data-berichten verzenden een willekeurige payload in de vorm van sleutel-waardeparen en worden in de app verwerkt. Gecombineerde berichten bevatten zowel zichtbare als verborgen delen voor maximale flexibiliteit.
Het implementeren van een eigen push-server vereist het permanent onderhouden van een TCP-verbinding met elk apparaat, wat inefficiënt en onveilig is. FCM gebruikt de uniforme Google-infrastructuur die tegelijkertijd met miljarden apparaten verbinding onderhoudt. De dienst beheert automatisch herhaalde leveringspogingen, berichtenwachtrijen en belastingverdeling, waardoor de ontwikkelaar niet zelf deze taken hoeft op te lossen.
FCM-architectuur bestaat uit drie hoofdcomponenten: de provider-server (uw backend), de Firebase Cloud Messaging-server en de client-app op het apparaat. Wanneer de server een bericht verzendt, komt het eerst in de FCM-infrastructuur terecht, die het naar het doelapparaat routeert. Als het apparaat offline is, slaat FCM het bericht op in een wachtrij en levert het wanneer de verbinding wordt hersteld.
Bij de eerste start roept de app de Firebase SDK aan, die het apparaat registreert bij de FCM-dienst en een unieke Registration Token ontvangt. Deze token is een tekenreeks van ongeveer 150 tekens die een specifieke app-instantie op een specifiek apparaat identificeert. De token kan veranderen bij herinstallatie van de app, wissen van gegevens of herstel vanuit een back-up — de ontwikkelaar moet de token-update verwerken via de onNewToken-delegate.
Wanneer de server een verzoek verzendt via de FCM API, doorloopt het bericht verschillende fasen. Ontvangst en validatie — FCM controleert de juistheid van het verzoek en het bestaan van het doelapparaat. Wachtrij — als het apparaat niet beschikbaar is, komt het bericht in de opslagwachtrij. Routering — FCM bepaalt het optimale leveringskanaal (wifi of mobiele data). Levering — het systeem geeft het bericht door aan de doelapp. Na succesvolle levering retourneert FCM een bericht-ID aan de server.
Firebase Cloud Messaging ondersteunt drie soorten berichten, elk met eigen verwerkingskenmerken aan clientzijde. Notification-berichten worden verwerkt door de systeemdienst Google Play Services in Android en APNs in iOS en automatisch weergegeven als push-banners. Data-berichten worden rechtstreeks aan de app doorgegeven en verwerkt via de callback onMessageReceived in Android en application(_:didReceiveRemoteNotification:) in iOS.
Een notification-bericht bevat vooraf gedefinieerde velden: title, body, afbeeldings-URL en meldingsgeluid. Het systeem maakt en toont automatisch de melding in het systeemvak, zelfs als de app op de achtergrond is of beëindigd. De gebruiker ziet een standaard banner met titel en tekst, en bij aanklikken wordt de app geopend met de in de payload doorgegeven gegevens. Als de app actief is, kan het notification-bericht worden onderschept en in code worden verwerkt.
Een data-bericht is een aangepaste set sleutel-waardeparen zonder vooraf gedefinieerde velden. De payload wordt niet automatisch door het systeem verwerkt — de app ontvangt ruwe gegevens en kan deze naar wens interpreteren. Data-berichten worden gebruikt voor gegevenssynchronisatie op de achtergrond, bijwerken van lokale cache, triggeren van synchronisatie of doorgeven van opdrachten zonder melding weer te geven. In Android wordt een data-bericht altijd geleverd, zelfs als de app is beëindigd of op de achtergrond draait.
FCM maakt het mogelijk een bericht te verzenden dat zowel een notification-gedeelte (voor weergave) als een data-gedeelte (voor verwerking) bevat. Gecombineerde payload omvat zowel de vooraf gedefinieerde notification-velden als de willekeurige data-sleutels. Het systeem toont de melding uit het notification-gedeelte en het data-gedeelte wordt bij het openen doorgegeven aan de intent extras van de app. Dit is handig voor scenario's waarin u een melding aan de gebruiker wilt tonen en tegelijkertijd context voor navigatie naar een specifiek scherm wilt doorgeven.
| Type | Auto-weergave | Verwerking op achtergrond | Voorbeeld |
|---|---|---|---|
| Notification | Ja, door systeem | Automatisch, zonder code | Welkomst pushmelding |
| Data | Nee | Via app-callback | Gegevenssynchronisatie op achtergrond |
| Gecombineerd | Ja, notification-gedeelte | Data-gedeelte bij openen | Melding + bestellink |
FCM-integratie in Android begint met het aansluiten van de Firebase SDK via het build.gradle-bestand op app-niveau. Na het toevoegen van afhankelijkheden en het google-services.json-bestand ontvangt de app automatisch de Registration Token, die wordt doorgegeven via de FirebaseMessagingService-callback. Voor het ontvangen van meldingen moet een service worden gemaakt die overerft van FirebaseMessagingService en worden geregistreerd in AndroidManifest.xml.
Na het aansluiten van de SDK genereert Firebase automatisch de apparaattoken zonder extra code. De token is toegankelijk via FirebaseMessaging.getInstance().token, die Task
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
val data = message.data
val title = "Nieuw bericht"
val body = data["body"] ?: ""
showNotification(title, body)
}
}
De service voor het ontvangen van FCM-berichten moet worden geregistreerd in AndroidManifest.xml met de juiste intent-filter. Toevoegen van de service-tag met INTERNET-machtiging en vermelding van action. Zonder registratie van de service worden berichten niet aan de app op de achtergrond geleverd. Voor het weergeven van meldingen in Android 13+ is runtime-machtiging POST_NOTIFICATIONS vereist.
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name=
"android.permission.POST_NOTIFICATIONS" />
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name=
"com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
FCM-integratie in iOS vereist configuratie zowel aan de kant van Apple Push Notification Service (APNs) als in Firebase Console. In tegenstelling tot Android, waar FCM de verbinding direct beheert, gebruikt FCM in iOS APNs als transportlaag. De app registreert zich voor het ontvangen van pushmeldingen via UIApplication.shared.registerForRemoteNotifications, en de Firebase SDK onderschept de ontvangen device token en koppelt deze aan de FCM Registration Token.
Voor werking van FCM in iOS moet een APNs-sleutel of -certificaat worden geüpload in Firebase Console. APNs-sleutel — dit is een moderne authenticatiemethode zonder certificaten (aanbevolen door Apple). De sleutel wordt aangemaakt in Apple Developer Portal in de sectie Keys en geüpload in de Cloud Messaging-instellingen in Firebase Console. Na APNs-configuratie vraagt de app toestemming voor meldingen via UNUserNotificationCenter en registreert zich via APNs.
import Firebase
import UserNotifications
class AppDelegate: NSObject, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions
launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current()
.requestAuthorization(options: [.alert, .sound, .badge])
application.registerForRemoteNotifications()
return true
}
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken
deviceToken: Data
) {
Messaging.messaging()
.apnsToken = deviceToken
}
}
Voor het verwerken van ontvangen meldingen wordt de UNUserNotificationCenter-delegate geïmplementeerd. De methode willPresent wordt aangeroepen wanneer een melding wordt ontvangen terwijl de app actief is — hier kan een aangepaste in-app melding worden getoond of de systeembanner worden genegeerd. De methode didReceive wordt aangeroepen wanneer de gebruiker op de melding klikt — hier wordt de navigatie naar het bijbehorende scherm uitgevoerd. Voor data-berichten wordt de MessagingDelegate gebruikt, die de payload ontvangt bij ontvangst van een FCM-bericht op de achtergrond.
Server-side verzending van FCM-berichten gebeurt via de HTTP v1 API van Firebase Cloud Messaging of de verouderde Firebase Cloud Messaging API. De HTTP v1 API is de aanbevolen methode, gebruikt OAuth 2.0-authenticatie via Service Account en ondersteunt alle moderne FCM-mogelijkheden, waaronder leveringsanalyse en A/B-testen van meldingen. Het verzoek wordt verzonden via de POST-methode naar het endpoint https://fcm.googleapis.com/v1/projects/{project_id}/messages:send.
De verzoekbody bevat een JSON-object met informatie over het bericht: target (token, onderwerp of voorwaarde), notification (voor weergave) en data (aangepaste payload). Authenticatie via de Service Account JSON-sleutel, die wordt geladen in de omgevingsvariabelen van de server. De toegangstoken wordt gegenereerd via de google-auth-library. Google raadt het gebruik van Firebase Admin SDK aan voor automatisch beheer van authenticatie en herhaalde pogingen.
const admin = require("firebase-admin")
const serviceAccount = require("./serviceAccountKey.json")
admin.initializeApp({ credential: admin.credential.cert(serviceAccount) })
const message = {
token: "device_registration_token",
notification: { title: "20% korting", body: "Op alle diensten vandaag" },
data: { screen: "promo", promoId: "324" },
android: { priority: "high" },
apns: { payload: { aps: { sound: "default" } } }
}
admin.messaging().send(message)
.then(response => {
console.log("Succesvol verzonden:", response)
})
.catch(error => {
console.log("Verzendfout:", error)
})
Voor het verzenden van meldingen naar een groep gebruikers ondersteunt FCM abonnementen op onderwerpen. Een onderwerp (topic) — is een benoemd kanaal waarop de client-app zich abonneert via FirebaseMessaging.getInstance().subscribeToTopic(). De server kan een bericht naar een onderwerp sturen en het wordt aan alle geabonneerde apparaten geleverd. Onderwerpen zijn geschikt voor nieuwsbrieven, promotionele meldingen en event-push. Voor nauwkeurigere segmentatie worden voorwaarden (conditions) gebruikt op basis van meerdere onderwerpen met logische operatoren.
Veelgestelde vragen
FCM werkt op Android via de eigen Google-infrastructuur en gebruikt op iOS APNs als transportprotocol. FCM biedt één API voor beide platforms, automatische offline berichtopslag en leveringsanalyse, die niet beschikbaar zijn in pure APNs.
Ja, via Firebase Console in de sectie Cloud Messaging kunnen handmatig meldingen worden verzonden naar geselecteerde apparaten, onderwerpen of doelgroeptargets. De functie is geschikt voor testen en eenmalige verzendingen, maar vervangt geen serverintegratie voor productie-apps.
Abonneer u op token-updates via onNewToken in FirebaseMessagingService (Android) of MessagingDelegate (iOS). Stuur bij tokenwijziging de nieuwe token naar de server en verwijder de oude. De server moet de database bijwerken en stoppen met verzenden naar de verouderde token.
FCM slaat het bericht maximaal 28 dagen op in een wachtrij en levert het wanneer de verbinding wordt hersteld. Voor notification-berichten wordt alleen het laatste bericht voor elke collapse-groep gecollapst. Data-berichten worden apart opgeslagen en zonder collapse in verzendvolgorde geleverd.
FCM is volledig gratis zonder beperkingen op het aantal berichten. Gebruik van FCM wordt niet in rekening gebracht, noch in het Spark-plan noch in het Blaze-plan. Beperkingen gelden alleen voor de payload-grootte: tot 4 KB voor notification-berichten en tot 2 KB voor data-berichten.
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