FCM (Firebase Cloud Messaging) је међуплатформски сервис компаније Google за испоруку push обавештења и пренос података између сервера и мобилних апликација. Подржава Android, iOS и веб платформе преко јединственог API-ја. Према Firebase Documentation, FCM обрађује преко милијарду порука дневно широм света.
Главне тачке
Firebase Cloud Messaging (FCM) је облачни сервис компаније Google који обезбеђује поуздану испоруку push обавештења и порука са подацима на мобилне уређаје. Раније познат као Google Cloud Messaging (GCM), FCM је постао главни алат за међуплатформска обавештења у Firebase екосистему.
FCM аутоматски бира оптимални канал испоруке у зависности од платформе: на Android-у користи сопствену FCM везу, на iOS-у — APNS (преко FCM пролаза). Програмер не мора да имплементира две различите интеграције — FCM преузима рутирање на себе.
Сервис пружа јединствени REST API и Admin SDK за слање порука. Ово омогућава слање обавештења са серверске стране без везивања за одређену платформу примаоца.
FCM подржава неколико начина испоруке: једна порука одређеном уређају, групна достава по теми (topic) и сегментно слање по условима (condition). Такође су доступни заказивање слања и A/B тестирање садржаја обавештења.
Архитектура FCM-а се заснива на три компоненте: клијентска апликација, Firebase Connection Server и сервер апликације (app server). Клијент се региструје у FCM-у при покретању и добија јединствени регистрациони токен — низ који идентификује уређај за дату апликацију.
Сервер апликације шаље захтев FCM REST API-ју, наводећи токен примаоца или тему. Firebase Connection Server доставља поруку користећи сталну XMPP везу или HTTP захтев. Ако је уређај ван мреже — порука се ставља у ред и доставља када се веза успостави.
FCM гарантује испоруку помоћу приоритетних редова и механизма потврде пријема. На Android-у порука се чува до 28 дана у реду, на iOS-у — до 4 недеље (преко APNS-а). Након истека рока, порука се брише без обавештења.
Регистрациони токен се може променити у неколико случајева: при обнављању података апликације, при ажурирању на нову верзију или при чишћењу кеша. Апликација треба да имплементира FirebaseMessagingService.onNewToken за обраду ажурирања токена и синхронизацију са сервером.
FCM подржава два типа корисног терета: notification и data. Сваки тип одређује како и када се порука обрађује на уређају примаоца.
| Параметар | Notification | Data |
|---|---|---|
| Аутоматски приказ | Да, ако је апликација у позадини | Не, само у апликацији |
| Обрада | Систем — у позадини; апликација — у предњем плану | Увек у апликацији (onMessageReceived) |
| Максимална величина | 4 KB | 4 KB |
| Прилагођени кључеви | Ограничени на предефинисана поља | Било који парови кључ-вредност |
| Захтева CollapseKey | Опционално | Опционално за груписање |
У пракси, препоручује се коришћење data порука ако апликацији треба потпуна обрада обавештења у onMessageReceived. Notification поруке су погодне за једноставне сценарије где је системски приказ довољан.
FCM и APNS су два главна сервиса за испоруку push порука. FCM ради као међуплатформски пролаз, APNS — само за Apple екосистем. Њихове кључне разлике су у архитектури, захтевима за сертификате и механизмима рутирања.
Избор између FCM-а и директног APNS-а зависи од архитектуре пројекта. За међуплатформске апликације, FCM је оптималан избор. За само iOS пројекте, прихватљив је директан рад са APNS-ом преко HTTP/2 API-ја.
FCM је оправдан када пројекат истовремено користи Android и iOS, као и при потреби за Firebase аналитиком, A/B тестирањем обавештења или темама без серверске логике. Директан APNS је пожељан за само iOS апликације са минималним зависностима и строгим захтевима за кашњење испоруке.
За повезивање FCM-а са Android апликацијом потребно је додати Firebase SDK и подесити google-services.json у корену пројекта. Након регистрације токена, апликација је спремна да прима поруке преко 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)
}
}
}
Након подешавања, апликација аутоматски добија FCM токен при првом покретању. Токен треба послати на сервер апликације ради накнадног слања обавештења на овај уређај.
На Android-у 8+ пре слања FCM обавештења са аутоматским приказом потребно је креирати NotificationChannel. FCM notification поруке користе канал са подразумеваним ID-јем, али се препоручује креирање сопственог канала преко FirebaseMessagingService при пријему прве поруке. Data поруке не захтевају канал — апликација сама одлучује како и када да прикаже обавештење.
На iOS-у, FCM делује као посредник између сервера апликације и APNS-а. Firebase прима поруку од сервера, увија је у APNS формат и шаље кроз Apple пролаз. Програмер треба да подеси APNS кључ или сертификат у 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")
}
}
На iOS-у, регистрација у APNS-у се одвија асинхроно. FCM SDK аутоматски добија APNS токен и прослеђује га Firebase серверу. didReceiveRegistrationToken се покреће при добијању новог FCM токена, који комбинује APNS токен са идентификатором пројекта.
FCM пружа Firebase конзолу за праћење испоруке: број послатих, примљених и приказаних обавештења. Такође је доступан повратни позив статуса преко Firebase Cloud Functions за праћење грешака испоруке на страни сервера. Кључне метрике: impressions (прикази) и opens (отварања).
При раду са FCM-ом, важно је правилно одабрати тип поруке за сваки сценарио. За једноставна обавештења са аутоматским приказом користите notification поруке. За случајеве када апликација треба да обради податке пре приказа — data поруке. Мешовити тип (notification + data) се препоручује само ако су подаци потребни за аналитику, а не за промену садржаја обавештења.
Управљајте токенима централизовано. Чувајте актуелне токене на серверу у табели са везом ка кориснику и платформи. Имплементирајте механизам чишћења застарелих токена: при грешци NotRegistered или InvalidRegistration, уклоните токен из базе. Токени се ретко мењају, али њихово чишћење је обавезан елемент подршке FCM-а.
Користите кључеве колапса (collapseKey) за груписање порука. Ако шаљете неколико обавештења истог типа (на пример, „ажурирање курса валута”), подесите исти collapseKey. FCM ће доставити само последњу поруку из групе, што смањује оптерећење уређаја и не иритира корисника поплавом обавештења.
Пратите испоруку преко Firebase Console и Cloud Functions. Аналитика FCM-а показује број послатих, примљених и приказаних обавештења. Ако је проценат приказа нижи од 70% — проверите подешавања канала на Android-у и дозволе на iOS-у. Ниска испорука је често повезана са искљученим каналима или забраном обавештења. Пето: користите A/B тестирање Firebase-а за оптимизацију текста обавештења и времена слања — ово повећава конверзију отварања за 15–25% према подацима Firebase-а.
Често постављана питања
FCM је еволуционо ажурирање GCM-а (Google Cloud Messaging). FCM нуди поједностављено подешавање преко Firebase Console, уграђену аналитику, теме и подршку за Web Push. GCM је званично угашен априла 2019. године, сви пројекти морају бити мигрирани на FCM.
Firebase Cloud Messaging је бесплатан сервис без ограничења на број порука. Наплата се врши само за коришћење других Firebase сервиса, као што су Cloud Functions или Firestore. FCM не захтева Spark или Blaze претплату за основно слање обавештења.
FCM токен се мења при: обнављању апликације из резервне копије, чишћењу података апликације, поновној инсталацији, ажурирању на нову верзију са променом Sender ID-ја. Увек обрађујте onNewToken у FirebaseMessagingService за слање новог токена на сервер.
Google FCM је блокиран на територији Кине. За испоруку обавештења у Кини користе се алтернативни сервиси: Huawei Push Kit, MiPush (Xiaomi), Oppo Push, Vivo Push. За међуплатформску испоруку примењују се мулти-провајдерски сервиси попут Getui-ја.
Користите уграђену Firebase конзолу: изаберите „Cloud Messaging” — „Send Test Message”. Унесите тестни токен и пошаљите notification поруку. На уређају би требало да се појави обавештење. Такође можете пратити FirebaseMessagingService.onMessageReceived дневнике.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође