FCM (Firebase Cloud Messaging) — bu Google-ning push-bildirishnomalarini yetkazish va server bilan mobil ilovalar o'rtasida ma'lumotlarni uzatish uchun platformalararo xizmatidir. U yagona API orqali Android, iOS va veb-platformalarni qo'llab-quvvatlaydi. Firebase Documentation ma'lumotlariga ko'ra, FCM butun dunyo bo'ylab kuniga 1 milliarddan ortiq xabarlarni qayta ishlaydi.
Asosiy fikrlar
Firebase Cloud Messaging (FCM) — bu Google-ning bulutli xizmati bo'lib, mobil qurilmalarga push-bildirishnomalari va ma'lumotli xabarlarning ishonchli yetkazilishini ta'minlaydi. Ilgari Google Cloud Messaging (GCM) nomi bilan tanilgan FCM, Firebase ekotizimida platformalararo bildirishnomalar uchun asosiy vositaga aylandi.
FCM platformaga qarab avtomatik ravishda optimal yetkazish kanalini tanlaydi: Androidda o'z FCM ulanishidan, iOSda esa APNS dan (FCM shlyuzi orqali) foydalanadi. Dasturchi ikki xil integratsiyani amalga oshirishi shart emas — FCM marshrutlashtirishni o'z zimmasiga oladi.
Xizmat xabarlarni yuborish uchun yagona REST API va Admin SDK ni taqdim etadi. Bu qabul qiluvchining muayyan platformasiga bog'lanmagan holda server qismidan bildirishnomalar yuborish imkonini beradi.
FCM bir nechta yetkazish rejimini qo'llab-quvvatlaydi: muayyan qurilmaga yagona xabar, mavzu bo'yicha (topic) guruhli yuborish va shartlar bo'yicha (condition) segmentli yuborish. Shuningdek, yuborishni rejalashtirish va bildirishnoma mazmunini A/B test qilish ham mavjud.
FCM arxitekturasi uch komponentga asoslanadi: mijoz ilovasi, Firebase Connection Server va ilova serveri (app server). Mijoz ishga tushirilganda FCM da ro'yxatdan o'tadi va noyob ro'yxatdan o'tish tokeni ni oladi — bu ilova uchun qurilmani identifikatsiya qiluvchi satr.
Ilova serveri FCM REST API ga so'rov yuboradi, qabul qiluvchining tokeni yoki mavzusini ko'rsatadi. Firebase Connection Server doimiy XMPP ulanishi yoki HTTP so'rovidan foydalanib xabarni yetkazadi. Agar qurilma oflayn bo'lsa — xabar navbatga qo'yiladi va ulanish tiklanganda yetkaziladi.
FCM ustuvor navbatlar va qabulni tasdiqlash mexanizmi yordamida yetkazishni kafolatlaydi. Android da xabar navbatda 28 kungacha, iOS da esa 4 haftagacha (APNS orqali) saqlanadi. Muddati tugagach, xabar bildirishnomasiz o'chiriladi.
Ro'yxatdan o'tish tokeni bir necha hollarda o'zgarishi mumkin: ilova ma'lumotlarini tiklashda, yangi versiyaga yangilashda yoki keshni tozalashda. Ilova token yangilanishini va server bilan sinxronizatsiyani boshqarish uchun FirebaseMessagingService.onNewToken ni amalga oshirishi kerak.
FCM ikki turdagi yukni qo'llab-quvvatlaydi: notification va data. Har bir tur xabar qabul qiluvchi qurilmada qanday va qachon qayta ishlanishini aniqlaydi.
| Parametr | Notification | Data |
|---|---|---|
| Avtomatik ko'rsatish | Ha, ilova fonda bo'lsa | Yo'q, faqat ilovada |
| Qayta ishlash | Tizim — fonda; ilova — oldingi planda | Har doim ilovada (onMessageReceived) |
| Maksimal hajm | 4 KB | 4 KB |
| Maxsus kalitlar | Oldindan belgilangan maydonlar bilan cheklangan | Har qanday kalit-qiymat juftliklari |
| CollapseKey talab qiladi | Ixtiyoriy | Guruhlash uchun ixtiyoriy |
Amalda, agar ilova bildirishnomani onMessageReceived da to'liq qayta ishlashi kerak bo'lsa, data xabarlardan foydalanish tavsiya etiladi. Notification xabarlar tizimli ko'rsatish yetarli bo'lgan oddiy stsenariylar uchun mos keladi.
FCM va APNS ikkita asosiy push yetkazish xizmatidir. FCM platformalararo shlyuz sifatida ishlaydi, APNS esa faqat Apple ekotizimi uchun. Ularning asosiy farqlari arxitekturada, sertifikat talablarida va marshrutlashtirish mexanizmlarida.
FCM va to'g'ridan-to'g'ri APNS o'rtasidagi tanlov loyiha arxitekturasiga bog'liq. Platformalararo ilovalar uchun FCM optimal tanlovdir. Faqat iOS loyihalari uchun HTTP/2 API orqali to'g'ridan-to'g'ri APNS bilan ishlash mumkin.
FCM loyiha bir vaqtning o'zida Android va iOS dan foydalansa, shuningdek Firebase analitikasi, bildirishnomalarni A/B testi yoki server mantiqisiz mavzular kerak bo'lganda asoslanadi. To'g'ridan-to'g'ri APNS minimal bog'liqliklar va yetkazish kechikishiga qat'iy talablar bilan faqat iOS ilovalari uchun afzalroqdir.
FCM-ni Android ilovasiga ulash uchun Firebase SDK ni qo'shish va loyiha ildizida google-services.json ni sozlash kerak. Token ro'yxatdan o'tkazilgandan so'ng, ilova FirebaseMessagingService orqali xabarlarni qabul qilishga tayyor.
// 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)
}
}
}
Sozlamadan so'ng, ilova birinchi ishga tushirilganda avtomatik ravishda FCM tokeni ni oladi. Token ushbu qurilmaga bildirishnomalarni keyingi yuborish uchun ilova serveriga yuborilishi kerak.
Android 8+ da avtomatik ko'rsatish bilan FCM bildirishnomasini yuborishdan oldin NotificationChannel yaratish kerak. FCM notification xabarlari standart ID li kanaldan foydalanadi, lekin birinchi xabar qabul qilinganda FirebaseMessagingService orqali o'z kanalingizni yaratish tavsiya etiladi. Data xabarlari kanalni talab qilmaydi — ilova bildirishnomani qanday va qachon ko'rsatishni o'zi hal qiladi.
iOS da FCM ilova serveri va APNS o'rtasida vositachi rolini o'ynaydi. Firebase serverdan xabarni oladi, uni APNS formatiga o'rab oladi va Apple shlyuzi orqali yuboradi. Dasturchi Firebase konsolida APNS kaliti yoki sertifikatini sozlashi kerak.
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 da APNS da ro'yxatdan o'tish asinxron tarzda amalga oshiriladi. FCM SDK avtomatik ravishda APNS tokenini oladi va uni Firebase serveriga uzatadi. didReceiveRegistrationToken yangi FCM tokeni olinganda ishga tushadi, bu token APNS tokenini loyiha identifikatori bilan birlashtiradi.
FCM yetkazishni monitoring qilish uchun Firebase konsolini taqdim etadi: yuborilgan, qabul qilingan va ko'rsatilgan bildirishnomalar soni. Shuningdek, server tomonida yetkazish xatolarini kuzatish uchun Firebase Cloud Functions orqali holat qayta chaqiruvi mavjud. Asosiy ko'rsatkichlar: impressions (ko'rsatishlar) va opens (ochishlar).
FCM bilan ishlashda har bir stsenariy uchun to'g'ri xabar turini tanlash muhim. Avtomatik ko'rsatish bilan oddiy bildirishnomalar uchun notification xabarlardan foydalaning. Ilova ko'rsatishdan oldin ma'lumotlarni qayta ishlashi kerak bo'lgan hollarda — data xabarlari. Aralash tur (notification + data) faqat ma'lumotlar analitika uchun kerak bo'lsa tavsiya etiladi, bildirishnoma mazmunini o'zgartirish uchun emas.
Tokenlarni markazlashtirilgan holda boshqaring. Joriy tokenlarni serverda foydalanuvchi va platformaga bog'langan jadvalda saqlang. Eski tokenlarni tozalash mexanizmini amalga oshiring: NotRegistered yoki InvalidRegistration xatosi bo'lganda tokenni bazadan o'chiring. Tokenlar kamdan-kam o'zgaradi, lekin ularni tozalash FCM qo'llab-quvvatlashining majburiy elementidir.
Xabarlarni guruhlash uchun kollaps kalitlaridan (collapseKey) foydalaning. Agar bir xil turdagi bir nechta bildirishnoma yuborsangiz (masalan, „valyuta kursining yangilanishi”), bir xil collapseKey ni o'rnating. FCM guruhdan faqat oxirgi xabarni yetkazadi, bu qurilma yukini kamaytiradi va foydalanuvchini bildirishnomalar seli bilan bezovta qilmaydi.
Yetkazishni Firebase Console va Cloud Functions orqali kuzatib boring. FCM analitikasi yuborilgan, qabul qilingan va ko'rsatilgan bildirishnomalar sonini ko'rsatadi. Agar ko'rsatish foizi 70% dan past bo'lsa — Android da kanal sozlamalarini va iOS da ruxsatlarni tekshiring. Past yetkazish ko'pincha o'chirilgan kanallar yoki bildirishnomalarni taqiqlash bilan bog'liq. Beshinchisi: bildirishnoma matnini va yuborish vaqtini optimallashtirish uchun Firebase A/B testidan foydalaning — bu Firebase ma'lumotlariga ko'ra ochish konversiyasini 15–25% ga oshiradi.
Tez-tez beriladigan savollar
FCM — bu GCM (Google Cloud Messaging) ning evolyutsion yangilanishi. FCM Firebase Console orqali soddalashtirilgan sozlash, o'rnatilgan analitika, mavzular va Web Push qo'llab-quvvatlashni taklif etadi. GCM 2019 yil aprelidan rasman o'chirilgan, barcha loyihalar FCM ga migratsiya qilinishi kerak.
Firebase Cloud Messaging — xabarlar sonida cheklovlarsiz bepul xizmat. To'lov faqat Cloud Functions yoki Firestore kabi boshqa Firebase xizmatlaridan foydalanish uchun olinadi. FCM asosiy bildirishnoma yuborish uchun Spark yoki Blaze obunasini talab qilmaydi.
FCM tokeni quyidagi hollarda o'zgaradi: ilovani zaxiradan tiklashda, ilova ma'lumotlarini tozalashda, qayta o'rnatishda, Sender ID o'zgarishi bilan yangi versiyaga yangilashda. Serverga yangi tokenni yuborish uchun FirebaseMessagingService da har doim onNewToken ni qayta ishlang.
Google FCM Xitoy hududida bloklangan. Xitoyda bildirishnomalarni yetkazish uchun muqobil xizmatlardan foydalaniladi: Huawei Push Kit, MiPush (Xiaomi), Oppo Push, Vivo Push. Platformalararo yetkazish uchun Getui kabi ko'p provayderli xizmatlar qo'llaniladi.
O'rnatilgan Firebase konsolidan foydalaning: „Cloud Messaging” — „Send Test Message” ni tanlang. Test tokenini kiriting va notification xabar yuboring. Qurilmada bildirishnoma paydo bo'lishi kerak. Shuningdek, FirebaseMessagingService.onMessageReceived jurnallarini kuzatishingiz mumkin.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.