Firebase Cloud Messaging (FCM) — är en plattformsoberoende tjänst för leverans av push-notiser och meddelanden från Google, avsedd för mobila och webbapplikationer. FCM säkerställer tillförlitlig dataöverföring mellan servern och klientenheter utan att behöva upprätthålla en permanent nätverksanslutning. Enligt Firebase Documentation, 2026 passerar mer än 300 miljarder meddelanden dagligen genom FCM:s infrastruktur över hela världen. Tjänsten stöder både notiser med automatisk visning och data-meddelanden för dold dataöverföring i bakgrunden.
Huvudpunkter
Firebase Cloud Messaging — är en molntjänst från Google som överför push-notiser och data-meddelanden mellan applikationsservern och klientenheter. Tjänsten har ersatt den föråldrade Google Cloud Messaging (GCM) och blivit standardlösningen för push-leverans i Firebase-ekosystemet. FCM stöder Android, iOS, Web och Unity och erbjuder ett enhetligt sändningsgränssnitt oavsett målplattform.
Tjänsten erbjuder flera mekanismer för meddelandeleverans, var och en löser sin egen uppgift. Notification-meddelanden visas automatiskt av systemet vid mottagning — utvecklaren behöver inte skriva kod för att visa notisen. Data-meddelanden överför en godtycklig payload i form av nyckel-värdepar och bearbetas inuti applikationen. Kombinerade meddelanden innehåller både synliga och dolda delar för maximal flexibilitet.
Att implementera en egen push-server kräver permanent underhåll av TCP-anslutning med varje enhet, vilket är ineffektivt och osäkert. FCM använder Googles enhetliga infrastruktur som upprätthåller anslutning med miljarder enheter samtidigt. Tjänsten hanterar automatiskt återförsök för leverans, meddelandeköer och lastbalansering, vilket befriar utvecklaren från att behöva lösa dessa uppgifter själv.
FCM-arkitekturen består av tre huvudkomponenter: leverantörsservern (din backend), Firebase Cloud Messaging-servern och klientapplikationen på enheten. När servern skickar ett meddelande går det först in i FCM-infrastrukturen som dirigerar det till målenheten. Om enheten är offline lagrar FCM meddelandet i en kö och levererar det när anslutningen återställs.
Vid första start anropar applikationen Firebase SDK som registrerar enheten i FCM-tjänsten och får en unik Registration Token. Denna token är en sträng på cirka 150 tecken som identifierar en specifik applikationsinstans på en specifik enhet. Token kan ändras vid ominstallation av applikationen, rensning av data eller återställning från backup — utvecklaren bör hantera token-uppdatering via delegaten onNewToken.
När servern skickar en begäran via FCM API går meddelandet igenom flera steg. Mottagning och validering — FCM kontrollerar begäran korrekthet och målenhetens existens. Kö — om enheten inte är tillgänglig hamnar meddelandet i en lagringskö. Dirigering — FCM bestämmer den optimala leveranskanalen (Wi-Fi eller mobildata). Leverans — systemet överför meddelandet till målapplikationen. Efter framgångsrik leverans returnerar FCM ett meddelande-ID till servern.
Firebase Cloud Messaging stöder tre typer av meddelanden, var och en med sina egna bearbetningsegenskaper på klientsidan. Notification-meddelanden bearbetas av systemtjänsten Google Play Services i Android och APNs i iOS och visas automatiskt som push-banners. Data-meddelanden överförs direkt till applikationen och bearbetas via callback onMessageReceived i Android och application(_:didReceiveRemoteNotification:) i iOS.
Ett notification-meddelande innehåller fördefinierade fält: title, body, bild-URL och notisljud. Systemet skapar och visar automatiskt notisen i systemfältet, även om applikationen är i bakgrunden eller avstängd. Användaren ser en standardbanner med titel och text, och vid klick öppnas applikationen med data som överförts i payload. Om applikationen är aktiv kan notification-meddelandet fångas upp och bearbetas i koden.
Ett data-meddelande är en anpassad uppsättning nyckel-värdepar utan fördefinierade fält. Payload bearbetas inte av systemet automatiskt — applikationen får rådata och kan tolka den på valfritt sätt. Data-meddelanden används för datasynkronisering i bakgrunden, uppdatering av lokal cache, utlösning av synkronisering eller överföring av kommandon utan att visa notis. I Android levereras data-meddelandet alltid, även om applikationen är avstängd eller i bakgrunden.
FCM tillåter sändning av ett meddelande som samtidigt innehåller en notification-del (för visning) och en data-del (för bearbetning). Kombinerad payload omfattar både fördefinierade notification-fält och godtyckliga data-nycklar. Systemet visar notisen från notification-delen och data-delen överförs till applikationens intent extras vid öppning. Detta är praktiskt i scenarier där man behöver visa en notis för användaren och samtidigt överföra kontext för navigering till en specifik skärm.
| Typ | Automatisk visning | Bearbetning i bakgrunden | Exempel |
|---|---|---|---|
| Notification | Ja, av systemet | Automatiskt, utan kod | Välkomst push-notis |
| Data | Nej | Via applikationens callback | Datasynkronisering i bakgrunden |
| Kombinerat | Ja, notification-del | Data-del vid öppning | Notis + orderlänk |
FCM-integration i Android börjar med att ansluta Firebase SDK via build.gradle-filen på applikationsnivå. Efter att beroenden och google-services.json-filen har lagts till får applikationen automatiskt Registration Token som överförs via FirebaseMessagingService-callback. För att ta emot notiser måste en tjänst skapas som ärver FirebaseMessagingService och registreras i AndroidManifest.xml.
Efter anslutning av SDK genererar Firebase automatiskt enhetstoken utan extra kod. Token är tillgänglig via FirebaseMessaging.getInstance().token, som returnerar Task
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
val data = message.data
val title = "Nytt meddelande"
val body = data["body"] ?: ""
showNotification(title, body)
}
}
Tjänsten för mottagning av FCM-meddelanden måste registreras i AndroidManifest.xml med lämplig intent-filter. Lägga till service-tagg med INTERNET-behörighet och angivande av action. Utan registrering av tjänsten kommer meddelanden inte att levereras till applikationen i bakgrunden. För att visa notiser i Android 13+ krävs runtime-behörigheten POST_NOTIFICATIONS.
<!-- 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-integration i iOS kräver konfiguration både på Apple Push Notification Service (APNs) sida och i Firebase Console. Till skillnad från Android där FCM hanterar anslutningen direkt, använder FCM i iOS APNs som transportlager. Applikationen registrerar sig för att ta emot push-notiser via UIApplication.shared.registerForRemoteNotifications, och Firebase SDK fångar upp den mottagna device token och kopplar den till FCM Registration Token.
För att FCM ska fungera i iOS måste en APNs-nyckel eller ett certifikat laddas upp i Firebase Console. APNs-nyckel — är en modern autentiseringsmetod utan certifikat (rekommenderas av Apple). Nyckeln skapas i Apple Developer Portal i avsnittet Keys och laddas upp i Cloud Messaging-inställningarna i Firebase Console. Efter APNs-konfiguration begär applikationen tillstånd för notiser via UNUserNotificationCenter och registrerar sig 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
}
}
För bearbetning av mottagna notiser implementeras UNUserNotificationCenter-delegaten. Metoden willPresent anropas när en notis tas emot medan applikationen är aktiv — här kan en anpassad in-app-notis visas eller systemets banner ignoreras. Metoden didReceive anropas när användaren klickar på notisen — här utförs navigering till motsvarande skärm. För data-meddelanden används MessagingDelegate-delegaten som tar emot payload vid mottagning av FCM-meddelande i bakgrunden.
Server-side sändning av FCM-meddelanden utförs via HTTP v1 API Firebase Cloud Messaging eller det föråldrade Firebase Cloud Messaging API. HTTP v1 API är den rekommenderade metoden, använder OAuth 2.0-autentisering via Service Account och stöder alla moderna FCM-funktioner, inklusive leveransanalys och A/B-testning av notiser. Begäran skickas med POST-metoden till slutpunkten https://fcm.googleapis.com/v1/projects/{project_id}/messages:send.
Begärans brödtext innehåller ett JSON-objekt med information om meddelandet: target (token, ämne eller villkor), notification (för visning) och data (anpassad payload). Autentisering via Service Account JSON-nyckel som laddas i serverns miljövariabler. Åtkomsttoken genereras via google-auth-library-biblioteket. Google rekommenderar att använda Firebase Admin SDK för automatisk hantering av autentisering och återförsök.
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% rabatt", body: "På alla tjänster idag" },
data: { screen: "promo", promoId: "324" },
android: { priority: "high" },
apns: { payload: { aps: { sound: "default" } } }
}
admin.messaging().send(message)
.then(response => {
console.log("Skickat framgångsrikt:", response)
})
.catch(error => {
console.log("Skickningsfel:", error)
})
För att skicka notiser till en grupp användare stöder FCM prenumeration på ämnen. Ett ämne (topic) — är en namngiven kanal som klientapplikationen prenumererar på via FirebaseMessaging.getInstance().subscribeToTopic(). Servern kan skicka ett meddelande till ett ämne och det levereras till alla prenumererade enheter. Ämnen är lämpliga för nyhetsbrev, reklamnotiser och event-push. För mer precis segmentering används villkor (conditions) baserade på flera ämnen med logiska operatorer.
Vanliga frågor
FCM fungerar på Android via Googles egen infrastruktur och använder på iOS APNs som transportprotokoll. FCM tillhandahåller ett enhetligt API för båda plattformarna, automatisk lagring av offline-meddelanden och leveransanalys, vilket saknas i rent APNs.
Ja, via Firebase Console i avsnittet Cloud Messaging kan man manuellt skicka notiser till valda enheter, ämnen eller målgruppssegment. Funktionen passar för testning och enstaka utskick, men ersätter inte serverintegration för produktionsapplikationer.
Prenumerera på token-uppdateringar via onNewToken i FirebaseMessagingService (Android) eller MessagingDelegate (iOS). När token ändras, skicka den nya token till servern och ta bort den gamla. Servern bör uppdatera databasen och sluta försöka skicka till den föråldrade token.
FCM lagrar meddelandet i kö upp till 28 dagar och levererar det när anslutningen återställs. För notification-meddelanden komprimeras endast det sista meddelandet för varje komprimeringsgrupp. Data-meddelanden lagras separat och levereras i sändningsordning utan komprimering.
FCM är helt gratis utan begränsning av antalet meddelanden. Användning av FCM faktureras inte inom varken Spark-planen eller Blaze-planen. Begränsningar gäller endast payload-storleken: upp till 4 KB för notification-meddelanden och upp till 2 KB för data-meddelanden.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också