FCM (Firebase Cloud Messaging) je multiplatformní služba od Googlu pro doručování push oznámení a přenos dat mezi serverem a mobilními aplikacemi. Podporuje Android, iOS a webové platformy prostřednictvím jednotného API. Podle Firebase Documentation zpracovává FCM denně více než 1 miliardu zpráv po celém světě.
Hlavní body
Firebase Cloud Messaging (FCM) je cloudová služba od Googlu, která zajišťuje spolehlivé doručování push oznámení a datových zpráv na mobilní zařízení. Dříve známá jako Google Cloud Messaging (GCM), FCM se stala hlavním nástrojem pro multiplatformní oznámení v ekosystému Firebase.
FCM automaticky vybírá optimální kanál doručení v závislosti na platformě: na Androidu používá vlastní FCM připojení, na iOS — APNS (přes FCM bránu). Vývojář nemusí implementovat dvě různé integrace — FCM přebírá směrování na sebe.
Služba poskytuje jednotné REST API a Admin SDK pro odesílání zpráv. To umožňuje odesílat oznámení ze strany serveru bez vázání na konkrétní platformu příjemce.
FCM podporuje několik režimů doručení: jednu zprávu konkrétnímu zařízení, skupinové rozeslání podle tématu (topic) a segmentové odeslání podle podmínek (condition). K dispozici je také plánování odeslání a A/B testování obsahu oznámení.
Architektura FCM je založena na třech komponentách: klientská aplikace, Firebase Connection Server a aplikační server (app server). Klient se při spuštění zaregistruje v FCM a obdrží jedinečný registrační token — řetězec, který identifikuje zařízení pro danou aplikaci.
Aplikační server odešle požadavek na FCM REST API s uvedením tokenu příjemce nebo tématu. Firebase Connection Server doručí zprávu pomocí trvalého XMPP připojení nebo HTTP požadavku. Pokud je zařízení offline — zpráva je zařazena do fronty a doručena po obnovení připojení.
FCM garantuje doručení pomocí prioritních front a mechanismu potvrzení přijetí. Na Androidu je zpráva uložena až 28 dní ve frontě, na iOS — až 4 týdny (přes APNS). Po uplynutí lhůty je zpráva bez upozornění smazána.
Registrační token se může změnit v několika případech: při obnovení dat aplikace, při aktualizaci na novou verzi nebo při vymazání mezipaměti. Aplikace by měla implementovat FirebaseMessagingService.onNewToken pro zpracování aktualizace tokenu a synchronizaci se serverem.
FCM podporuje dva typy užitečného zatížení: notification a data. Každý typ určuje, jak a kdy je zpráva zpracována na zařízení příjemce.
| Parametr | Notification | Data |
|---|---|---|
| Automatické zobrazení | Ano, pokud je aplikace na pozadí | Ne, pouze v aplikaci |
| Zpracování | Systém — na pozadí; aplikace — na popředí | Vždy v aplikaci (onMessageReceived) |
| Maximální velikost | 4 KB | 4 KB |
| Vlastní klíče | Omezeny na předdefinovaná pole | Libovolné páry klíč-hodnota |
| Vyžaduje CollapseKey | Volitelně | Volitelně pro seskupení |
V praxi se doporučuje používat data zprávy, pokud aplikace potřebuje plné zpracování oznámení v onMessageReceived. Notification zprávy jsou vhodné pro jednoduché scénáře, kde je systémové zobrazení dostačující.
FCM a APNS jsou dvě hlavní služby push doručení. FCM funguje jako multiplatformní brána, APNS — pouze pro ekosystém Apple. Jejich klíčové rozdíly jsou v architektuře, požadavcích na certifikáty a mechanismech směrování.
Výběr mezi FCM a přímým APNS závisí na architektuře projektu. Pro multiplatformní aplikace je FCM optimální volbou. Pro projekty pouze iOS je přijatelná přímá práce s APNS přes HTTP/2 API.
FCM je ospravedlněn, když projekt současně používá Android a iOS, stejně jako při potřebě Firebase analýzy, A/B testování oznámení nebo témat bez serverové logiky. Přímý APNS je preferován pro aplikace pouze iOS s minimálními závislostmi a přísnými požadavky na zpoždění doručení.
Pro připojení FCM k Android aplikaci je třeba přidat Firebase SDK a nakonfigurovat google-services.json v kořenu projektu. Po registraci tokenu je aplikace připravena přijímat zprávy prostřednictvím FirebaseMessagingService.
// build.gradle (Modul)
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)
}
}
}
Po konfiguraci aplikace automaticky obdrží FCM token při prvním spuštění. Token je třeba odeslat na aplikační server pro následné odesílání oznámení na toto zařízení.
Na Androidu 8+ je před odesláním FCM oznámení s automatickým zobrazením nutné vytvořit NotificationChannel. FCM notification zprávy používají kanál s výchozím ID, ale doporučuje se vytvořit vlastní kanál prostřednictvím FirebaseMessagingService při přijetí první zprávy. Data zprávy nevyžadují kanál — aplikace sama rozhodne, jak a kdy oznámení zobrazit.
Na iOS funguje FCM jako prostředník mezi aplikačním serverem a APNS. Firebase obdrží zprávu od serveru, zabalí ji do formátu APNS a odešle přes Apple bránu. Vývojář musí nakonfigurovat APNS klíč nebo certifikát v konzoli Firebase.
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")
}
}
Na iOS probíhá registrace v APNS asynchronně. FCM SDK automaticky obdrží APNS token a předá jej Firebase serveru. didReceiveRegistrationToken se spustí při obdržení nového FCM tokenu, který kombinuje APNS token s identifikátorem projektu.
FCM poskytuje konzoli Firebase pro monitorování doručení: počet odeslaných, přijatých a zobrazených oznámení. K dispozici je také callback stavu přes Firebase Cloud Functions pro sledování chyb doručení na straně serveru. Klíčové metriky: impressions (zobrazení) a opens (otevření).
Při práci s FCM je důležité správně vybrat typ zprávy pro každý scénář. Pro jednoduchá oznámení s automatickým zobrazením používejte notification zprávy. Pro případy, kdy aplikace potřebuje zpracovat data před zobrazením — data zprávy. Smíšený typ (notification + data) se doporučuje pouze pokud jsou data potřebná pro analýzu, ne pro změnu obsahu oznámení.
Správujte tokeny centrálně. Ukládejte aktuální tokeny na serveru v tabulce s vazbou na uživatele a platformu. Implementujte mechanismus čištění zastaralých tokenů: při chybě NotRegistered nebo InvalidRegistration odstraňte token z databáze. Tokeny se mění zřídka, ale jejich čištění je povinným prvkem podpory FCM.
Používejte kolapsové klíče (collapseKey) pro seskupování zpráv. Pokud odesíláte několik oznámení stejného typu (například „aktualizace kurzu měny”), nastavte stejný collapseKey. FCM doručí pouze poslední zprávu ze skupiny, což snižuje zatížení zařízení a neobtěžuje uživatele záplavou oznámení.
Sledujte doručení prostřednictvím Firebase Console a Cloud Functions. Analýza FCM ukazuje počet odeslaných, přijatých a zobrazených oznámení. Pokud je procento zobrazení nižší než 70 % — zkontrolujte nastavení kanálů na Androidu a oprávnění na iOS. Nízké doručení je často spojeno s vypnutými kanály nebo zákazem oznámení. Za páté: používejte A/B testování Firebase pro optimalizaci textu oznámení a času odeslání — to zvyšuje konverzi otevření o 15–25 % podle údajů Firebase.
Často kladené otázky
FCM je evoluční aktualizace GCM (Google Cloud Messaging). FCM nabízí zjednodušenou konfiguraci přes Firebase Console, vestavěnou analýzu, témata a podporu Web Push. GCM byl oficiálně vypnut v dubnu 2019, všechny projekty musí být migrovány na FCM.
Firebase Cloud Messaging je bezplatná služba bez omezení počtu zpráv. Platba se účtuje pouze za používání dalších služeb Firebase, jako jsou Cloud Functions nebo Firestore. FCM nevyžaduje předplatné Spark nebo Blaze pro základní odesílání oznámení.
FCM token se mění při: obnovení aplikace ze zálohy, vymazání dat aplikace, přeinstalaci, aktualizaci na novou verzi se změnou Sender ID. Vždy zpracovávejte onNewToken ve FirebaseMessagingService pro odeslání nového tokenu na server.
FCM od Googlu je blokován na území Číny. Pro doručování oznámení v Číně se používají alternativní služby: Huawei Push Kit, MiPush (Xiaomi), Oppo Push, Vivo Push. Pro multiplatformní doručení se používají služby více poskytovatelů jako Getui.
Použijte vestavěnou konzoli Firebase: vyberte „Cloud Messaging” — „Send Test Message”. Zadejte testovací token a odešlete notification zprávu. Na zařízení by se mělo objevit oznámení. Můžete také sledovat protokoly FirebaseMessagingService.onMessageReceived.
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é