FCM (Firebase Cloud Messaging) är en plattformsoberoende tjänst från Google för leverans av push-notifikationer och överföring av data mellan server och mobila applikationer. Den stödjer Android, iOS och webbplattformar genom ett enhetligt API. Enligt Firebase Documentation behandlar FCM över 1 miljard meddelanden dagligen världen över.
Huvudpunkter
Firebase Cloud Messaging (FCM) är en molntjänst från Google som tillhandahåller pålitlig leverans av push-notifikationer och datameddelanden till mobila enheter. Tidigare känd som Google Cloud Messaging (GCM), har FCM blivit det primära verktyget för plattformsoberoende notifikationer inom Firebase-ekosystemet.
FCM väljer automatiskt den optimala leveranskanalen beroende på plattform: på Android använder den sin egen FCM-anslutning, på iOS — APNS (via FCM-gatewayen). Utvecklaren behöver inte implementera två olika integrationer — FCM tar över routing.
Tjänsten tillhandahåller ett enhetligt REST API och Admin SDK för att skicka meddelanden. Detta gör det möjligt att skicka notifikationer från serversidan utan att vara bunden till en specifik mottagarplattform.
FCM stödjer flera leveranslägen: ett meddelande till en specifik enhet, gruppsändning per ämne (topic) och segmentsändning per villkor (condition). Schemaläggning av sändning och A/B-testning av notifikationsinnehåll är också tillgängligt.
FCM:s arkitektur bygger på tre komponenter: klientapplikationen, Firebase Connection Server och applikationsservern (app server). Klienten registrerar sig i FCM vid start och får en unik registreringstoken — en sträng som identifierar enheten för denna applikation.
Applikationsservern skickar en begäran till FCM REST API och anger mottagarens token eller ämne. Firebase Connection Server levererar meddelandet via en permanent XMPP-anslutning eller HTTP-begäran. Om enheten är offline — köas meddelandet och levereras när anslutningen återställs.
FCM garanterar leverans med hjälp av prioritetsköer och en mekanism för mottagningsbekräftelse. På Android lagras meddelandet upp till 28 dagar i kön, på iOS — upp till 4 veckor (via APNS). Efter utgången raderas meddelandet utan notifiering.
Registreringstoken kan ändras i flera fall: vid återställning av applikationsdata, vid uppdatering till en ny version eller vid rensning av cache. Applikationen måste implementera FirebaseMessagingService.onNewToken för att hantera tokenuppdatering och synkronisering med servern.
FCM stödjer två typer av nyttolast: notification och data. Varje typ avgör hur och när meddelandet bearbetas på mottagarens enhet.
| Parameter | Notification | Data |
|---|---|---|
| Automatisk visning | Ja, om appen är i bakgrunden | Nej, endast i appen |
| Bearbetning | System — i bakgrunden; app — i förgrunden | Alltid i appen (onMessageReceived) |
| Maximal storlek | 4 KB | 4 KB |
| Anpassade nycklar | Begränsade till fördefinierade fält | Valfria nyckel-värde-par |
| Kräver CollapseKey | Valfritt | Valfritt för gruppering |
I praktiken rekommenderas det att använda data-meddelanden om applikationen behöver fullständig bearbetning av notifikationen i onMessageReceived. Notification-meddelanden är lämpliga för enkla scenarier där systemvisning är tillräcklig.
FCM och APNS är de två huvudsakliga push-leveranstjänsterna. FCM fungerar som en plattformsoberoende gateway, APNS — endast för Apple-ekosystemet. Deras viktigaste skillnader ligger i arkitektur, certifikatkrav och routingsmekanismer.
Valet mellan FCM och direkt APNS beror på projektarkitekturen. För plattformsoberoende applikationer är FCM det optimala valet. För iOS-endast projekt är direkt arbete med APNS via HTTP/2 API acceptabelt.
FCM är motiverat när projektet använder både Android och iOS samtidigt, liksom vid behov av Firebase-analys, A/B-testning av notifikationer eller ämnen utan serverlogik. Direkt APNS föredras för iOS-endast applikationer med minimala beroenden och strikta krav på leveransfördröjning.
För att ansluta FCM till en Android-applikation måste du lägga till Firebase SDK och konfigurera google-services.json i projektets rot. Efter registrering av token är applikationen redo att ta emot meddelanden via FirebaseMessagingService.
// build.gradle (Module)
dependencies {
implementation("com.google.firebase:firebase-messaging:24.1.0")
}
// AndroidManifest.xml
<service android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(message: RemoteMessage) {
message.notification?.let {
showNotification(it.title, it.body)
}
}
}
Efter konfiguration får applikationen automatiskt FCM-token vid första start. Token måste skickas till applikationsservern för efterföljande sändning av notifikationer till denna enhet.
På Android 8+ måste en NotificationChannel skapas innan en FCM-notifikation med automatisk visning skickas. FCM notification-meddelanden använder kanalen med standard-ID, men det rekommenderas att skapa en egen kanal via FirebaseMessagingService vid mottagande av första meddelandet. Data-meddelanden kräver ingen kanal — applikationen bestämmer själv hur och när notifikationen ska visas.
På iOS fungerar FCM som en mellanhand mellan applikationsservern och APNS. Firebase tar emot meddelandet från servern, paketerar det i APNS-format och skickar det via Apple-gatewayen. Utvecklaren måste konfigurera APNS-nyckeln eller certifikatet i Firebase-konsolen.
import FirebaseMessaging
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current().delegate = self
Messaging.messaging().delegate = self
return true
}
}
extension AppDelegate: MessagingDelegate {
func messaging(
_ messaging: Messaging,
didReceiveRegistrationToken fcmToken: String?
) {
UserDefaults.standard.set(fcmToken, forKey: "fcm_token")
}
}
På iOS sker registrering i APNS asynkront. FCM SDK tar automatiskt emot APNS-token och vidarebefordrar den till Firebase-servern. didReceiveRegistrationToken utlöses när en ny FCM-token tas emot, som kombinerar APNS-token med projektidentifikatorn.
FCM tillhandahåller Firebase-konsolen för övervakning av leverans: antal skickade, mottagna och visade notifikationer. En statusåterkoppling via Firebase Cloud Functions är också tillgänglig för att spåra leveransfel på serversidan. Viktiga mått: impressions (visningar) och opens (öppningar).
När du arbetar med FCM är det viktigt att välja rätt meddelandetyp för varje scenario. För enkla notifikationer med automatisk visning, använd notification-meddelanden. För fall där applikationen behöver bearbeta data innan visning — data-meddelanden. Den blandade typen (notification + data) rekommenderas endast om data behövs för analys, inte för att ändra notifikationsinnehållet.
Hantera tokens centraliserat. Lagra aktuella tokens på servern i en tabell kopplad till användare och plattform. Implementera en mekanism för rensning av föråldrade tokens: vid fel NotRegistered eller InvalidRegistration, ta bort token från databasen. Tokens ändras sällan, men deras rensning är ett obligatoriskt element i FCM-stöd.
Använd kollapsnycklar (collapseKey) för att gruppera meddelanden. Om du skickar flera notifikationer av samma typ (till exempel ”valutakursuppdatering”), ställ in samma collapseKey. FCM levererar endast det sista meddelandet i gruppen, vilket minskar enhetens belastning och inte irriterar användaren med en flod av notifikationer.
Övervaka leverans via Firebase Console och Cloud Functions. FCM-analys visar antalet skickade, mottagna och visade notifikationer. Om visningsprocenten är under 70 % — kontrollera kanalinställningarna på Android och behörigheterna på iOS. Låg leverans är ofta kopplad till inaktiverade kanaler eller notifikationsförbud. För det femte: använd Firebase A/B-testning för att optimera notifikationstext och sändningstid — detta ökar öppningskonverteringen med 15–25 % enligt Firebase-data.
Vanliga frågor
FCM är en evolutionär uppdatering av GCM (Google Cloud Messaging). FCM erbjuder förenklad konfiguration via Firebase Console, inbyggd analys, ämnen och stöd för Web Push. GCM stängdes officiellt av i april 2019, alla projekt måste migreras till FCM.
Firebase Cloud Messaging är en gratis tjänst utan begränsning av antalet meddelanden. Avgift tas endast ut för användning av andra Firebase-tjänster som Cloud Functions eller Firestore. FCM kräver ingen Spark- eller Blaze-prenumeration för grundläggande sändning av notifikationer.
FCM-token ändras vid: återställning av appen från säkerhetskopiering, rensning av appdata, ominstallation, uppdatering till en ny version med ändrat Sender ID. Bearbeta alltid onNewToken i FirebaseMessagingService för att skicka den nya token till servern.
Google FCM är blockerat på Kinas territorium. För leverans av notifikationer i Kina används alternativa tjänster: Huawei Push Kit, MiPush (Xiaomi), Oppo Push, Vivo Push. För plattformsoberoende leverans används multi-leverantörstjänster som Getui.
Använd den inbyggda Firebase-konsolen: välj ”Cloud Messaging” — ”Send Test Message”. Ange testtoken och skicka ett notification-meddelande. En notifikation bör visas på enheten. Du kan också övervaka FirebaseMessagingService.onMessageReceived-loggar.
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å