Firebase Cloud Messaging (FCM) — то је вишеплатформски сервис за доставу push обавештења и порука од Google-а, намењен мобилним и веб апликацијама. FCM обезбеђује поуздан пренос података између сервера и клијентских уређаја без потребе за одржавањем сталне мрежне везе. Према Firebase Documentation, 2026, кроз FCM инфраструктуру дневно прође више од 300 милијарди порука широм света. Сервис подржава како обавештења са аутоматским приказом, тако и data поруке за скривени пренос података у позадини.
Главне ставке
Firebase Cloud Messaging — то је Google-ов облачни сервис који обезбеђује пренос push обавештења и data порука између сервера апликације и клијентских уређаја. Сервис је заменио застарели Google Cloud Messaging (GCM) и постао стандардно решење за доставу push у Firebase екосистему. FCM подржава Android, iOS, Web и Unity, пружајући јединствени интерфејс за слање независно од циљне платформе.
Сервис пружа неколико механизама доставе порука, од којих сваки решава свој задатак. Notification поруке систем аутоматски приказује приликом пријема — програмер не мора да пише код за приказ обавештења. Data поруке преносе произвољан payload у облику парова кључ-вредност и обрађују се унутар апликације. Комбиноване поруке садрже истовремено видљиви и скривени део за максималну флексибилност.
Имплементација сопственог push сервера захтева стално одржавање TCP везе са сваким уређајем, што је неефикасно и небезбедно. FCM користи јединствену Google-ову инфраструктуру која одржава везу са милијардама уређаја истовремено. Сервис аутоматски управља поновљеним покушајима доставе, редовима порука и балансирањем оптерећења, ослобађајући програмера потребе да сам решава ове задатке.
FCM архитектура се састоји од три кључне компоненте: сервера провајдера (ваш backend), Firebase Cloud Messaging сервера и клијентске апликације на уређају. Када сервер пошаље поруку, она прво стиже у FCM инфраструктуру која је усмерава ка циљном уређају. Ако је уређај ван мреже, FCM чува поруку у реду и доставља је када се веза успостави.
Приликом првог покретања, апликација позива Firebase SDK који региструје уређај у FCM сервису и добија јединствени Registration Token. Овај токен је низ од око 150 знакова који идентификује одређену инстанцу апликације на одређеном уређају. Токен се може променити приликом поновне инсталације апликације, брисања података или враћања из backup-а — програмер треба да обради ажурирање токена преко делегата onNewToken.
Када сервер пошаље захтев преко FCM API-ја, порука пролази кроз неколико фаза. Пријем и валидација — FCM проверава исправност захтева и постојање циљног уређаја. Ред — ако је уређај недоступан, порука иде у ред за чување. Усмеравање — FCM одређује оптимални канал доставе (Wi-Fi или мобилни подаци). Достава — систем преноси поруку циљној апликацији. Након успешне доставе, FCM враћа серверу идентификатор поруке.
Firebase Cloud Messaging подржава три типа порука, од којих сваки има своје карактеристике обраде на клијентској страни. Notification поруке обрађује системски сервис Google Play Services у Android-у и APNs у iOS-у и аутоматски се приказују као push банери. Data поруке се преносе директно апликацији и обрађују преко callback-а onMessageReceived у Android-у и application(_:didReceiveRemoteNotification:) у iOS-у.
Notification порука садржи предефинисана поља: title, body, URL слике и звук обавештења. Систем аутоматски креира и приказује обавештење у системској палети, чак и ако је апликација у позадини или угашена. Корисник види стандардни банер са насловом и текстом, а кликом се апликација отвара са подацима пренетим у payload-у. Ако је апликација активна, notification порука се може пресрести и обрадити у коду.
Data порука је прилагођени скуп парова кључ-вредност без предефинисаних поља. Payload систем не обрађује аутоматски — апликација добија сирове податке и може их тумачити на произвољан начин. Data поруке се користе за синхронизацију података у позадини, ажурирање локалног кеша, покретање синхронизације или пренос команди без приказа обавештења. У Android-у data порука се увек доставља, чак и ако је апликација угашена или у позадини.
FCM омогућава слање поруке која истовремено садржи notification део (за приказ) и data део (за обраду). Комбиновани payload укључује и предефинисана поља notification-а и произвољне кључеве data-е. Систем приказује обавештење из notification дела, а data део се преноси у intent extras апликације приликом отварања. Ово је згодно за сценарије где треба приказати обавештење и истовремено пренети контекст за прелазак на одређени екран.
| Тип | Ауто-приказ | Обрада у позадини | Пример |
|---|---|---|---|
| Notification | Да, системски | Аутоматски, без кода | Добродошлица push обавештење |
| Data | Не | Преко callback-а апликације | Синхронизација података у позадини |
| Комбинована | Да, notification део | Data део при отварању | Обавештење + линк за поруџбину |
Интеграција FCM у Android почиње повезивањем Firebase SDK-а преко build.gradle датотеке на нивоу апликације. Након додавања зависности и google-services.json датотеке, апликација аутоматски добија Registration Token који се преноси преко FirebaseMessagingService callback-а. За пријем обавештења потребно је креирати сервис који наслеђује FirebaseMessagingService и регистровати га у AndroidManifest.xml-у.
Након повезивања SDK-а, Firebase аутоматски генерише токен уређаја без додатног кода. Токен је доступан преко FirebaseMessaging.getInstance().token, који враћа Task
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
val data = message.data
val title = "Нова порука"
val body = data["body"] ?: ""
showNotification(title, body)
}
}
Сервис за пријем FCM порука мора бити регистрован у AndroidManifest.xml-у са одговарајућим intent-filter-ом. Додавање tag-а service са дозволом INTERNET и навођењем action. Без регистрације сервиса, поруке неће бити достављене апликацији у позадини. За приказ обавештења у Android 13+ потребна је runtime дозвола 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 у iOS захтева подешавање како на страни Apple Push Notification Service (APNs), тако и у Firebase Console-у. За разлику од Android-а, где FCM директно управља везом, у iOS-у FCM користи APNs као транспортни слој. Апликација се региструје за примање push обавештења преко UIApplication.shared.registerForRemoteNotifications, а Firebase SDK пресреће примљени device token и повезује га са FCM Registration Token-ом.
За рад FCM-а у iOS-у потребно је учитати APNs кључ или сертификат у Firebase Console. APNs кључ — то је савремени начин аутентификације без сертификата (препоручује Apple). Кључ се креира у Apple Developer Portal-у у секцији Keys и учитава у подешавања Cloud Messaging у Firebase Console-у. Након подешавања APNs, апликација тражи дозволу за обавештења преко UNUserNotificationCenter-а и региструје се преко 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
}
}
За обраду примљених обавештења имплементира се делегат UNUserNotificationCenter. Метода willPresent се позива када је обавештење примљено док је апликација активна — овде се може приказати прилагођено in-app обавештење или игнорисати системски банер. Метода didReceive се позива када корисник кликне на обавештење — овде се врши прелазак на одговарајући екран. За data поруке користи се делегат MessagingDelegate који прима payload приликом пријема FCM поруке у позадини.
Серверско слање FCM порука се врши преко HTTP v1 API Firebase Cloud Messaging или застарелог Firebase Cloud Messaging API-ја. HTTP v1 API је препоручени начин, користи OAuth 2.0 аутентификацију преко Service Account-а и подржава све савремене могућности FCM-а, укључујући аналитику доставе и A/B тестирање обавештења. Захтев се шаље POST методом на endpoint https://fcm.googleapis.com/v1/projects/{project_id}/messages:send.
Тело захтева садржи JSON објекат са информацијама о поруци: target (токен, топик или услов), notification (за приказ) и data (прилагођени payload). Аутентификација преко Service Account JSON кључа који се учитава у променљиве окружења сервера. Приступни токен се генерише преко google-auth-library библиотеке. Google препоручује коришћење Firebase Admin SDK-а за аутоматско управљање аутентификацијом и поновљеним покушајима.
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%", body: "За све услуге данас" },
data: { screen: "promo", promoId: "324" },
android: { priority: "high" },
apns: { payload: { aps: { sound: "default" } } }
}
admin.messaging().send(message)
.then(response => {
console.log("Успешно послато:", response)
})
.catch(error => {
console.log("Грешка при слању:", error)
})
За слање обавештења групи корисника, FCM подржава претплату на топике. Топик — то је именовани канал на који се клијентска апликација претплаћује преко FirebaseMessaging.getInstance().subscribeToTopic(). Сервер може послати поруку на топик и она ће бити достављена свим претплаћеним уређајима. Топици су погодни за билтене, промотивна обавештења и event push. За прецизнију сегментацију користе се услови (conditions) засновани на више топика са логичким операторима.
Често постављана питања
FCM ради на Android-у преко сопствене Google инфраструктуре, а на iOS-у користи APNs као транспортни протокол. FCM пружа јединствени API за обе платформе, аутоматско чување порука ван мреже и аналитику доставе, чега нема у чистом APNs-у.
Да, преко Firebase Console-а у секцији Cloud Messaging можете ручно слати обавештења на изабране уређаје, топике или сегменте публике. Функција је погодна за тестирање и једнократне испоруке, али не замењује серверску интеграцију за production апликације.
Претплатите се на ажурирања токена преко onNewToken у FirebaseMessagingService (Android) или MessagingDelegate (iOS). Када се токен промени, пошаљите нови токен на сервер и обришите стари. Сервер треба да ажурира базу података и престане са покушајима слања на застарели токен.
FCM чува поруку у реду до 28 дана и доставља је када се веза успостави. За notification поруке, само последња порука за сваку групу за колапсирање се колапсира. Data поруке се чувају одвојено и достављају се редом слања без колапсирања.
FCM је потпуно бесплатан без ограничења на број порука. Коришћење FCM-а се не наплаћује ни у Spark плану ни у Blaze плану. Ограничења постоје само на величину payload-а: до 4 KB за notification поруке и до 2 KB за data поруке.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође