FCM — چیست، اصول Firebase Cloud Messaging در توسعه

نویسنده: IT Sectr منتشر شده: 2026-03-19 زمان مطالعه: 8 دقیقه

FCM (Firebase Cloud Messaging) یک سرویس چندسکویی از گوگل برای تحویل اعلان‌های فشاری و انتقال داده بین سرور و برنامه‌های موبایل است. این سرویس از Android، iOS و پلتفرم‌های وب از طریق یک API واحد پشتیبانی می‌کند. به گزارش Firebase Documentation، FCM روزانه بیش از ۱ میلیارد پیام را در سراسر جهان پردازش می‌کند.

نکات اصلی

  • FCM — سرویس چندسکویی گوگل برای ارسال اعلان‌های فشاری و داده‌ها
  • معماری — کلاینت توکن ثبت‌نام دریافت می‌کند، سرور پیام‌ها را از طریق Firebase Connection Server ارسال می‌کند
  • انواع پیام — notification (نمایش خودکار) و data (پردازش کامل در برنامه)
  • تحویل — FCM از اتصال دائمی یا صف‌های اولویت‌دار برای تضمین تحویل استفاده می‌کند
  • ادغام — اتصال از طریق Firebase SDK، تنظیم google-services.json و پیکربندی سرور

FCM چیست؟

Firebase Cloud Messaging (FCM) یک سرویس ابری از گوگل است که تحویل قابل اعتماد اعلان‌های فشاری و پیام‌های داده را به دستگاه‌های موبایل فراهم می‌کند. FCM که قبلاً با نام Google Cloud Messaging (GCM) شناخته می‌شد، به ابزار اصلی اعلان‌های چندسکویی در اکوسیستم Firebase تبدیل شده است.

FCM به طور خودکار کانال تحویل بهینه را بسته به پلتفرم انتخاب می‌کند: در Android از اتصال FCM خود استفاده می‌کند، در iOS — از APNS (از طریق دروازه FCM). توسعه‌دهنده نیازی به پیاده‌سازی دو ادغام مختلف ندارد — FCM مسیریابی را بر عهده می‌گیرد.

این سرویس یک REST API و Admin SDK واحد برای ارسال پیام ارائه می‌دهد. این امکان ارسال اعلان‌ها از سمت سرور بدون وابستگی به پلتفرم خاص گیرنده را فراهم می‌کند.

قابلیت‌های کلیدی FCM

FCM از چندین حالت تحویل پشتیبانی می‌کند: پیام تکی به دستگاه خاص، ارسال گروهی بر اساس موضوع (topic) و ارسال بخش‌بندی شده بر اساس شرایط (condition). همچنین برنامه‌ریزی ارسال و تست A/B محتوای اعلان در دسترس است.

Firebase Cloud Messaging چگونه کار می‌کند؟

معماری FCM بر سه مؤلفه استوار است: برنامه کلاینت، Firebase Connection Server و سرور برنامه (app server). کلاینت هنگام راه‌اندازی در FCM ثبت‌نام می‌کند و یک توکن ثبت‌نام منحصربه‌فرد دریافت می‌کند — رشته‌ای که دستگاه را برای این برنامه مشخص می‌کند.

سرور برنامه درخواستی به FCM REST API ارسال می‌کند و توکن گیرنده یا موضوع را مشخص می‌کند. Firebase Connection Server پیام را با استفاده از اتصال دائمی XMPP یا درخواست HTTP تحویل می‌دهد. اگر دستگاه آفلاین باشد — پیام در صف قرار می‌گیرد و پس از برقراری مجدد ارتباط تحویل داده می‌شود.

FCM تحویل را با استفاده از صف‌های اولویت‌دار و مکانیزم تأیید دریافت تضمین می‌کند. در Android پیام تا ۲۸ روز در صف ذخیره می‌شود، در iOS — تا ۴ هفته (از طریق APNS). پس از انقضای مهلت، پیام بدون اطلاع حذف می‌شود.

چرخه حیات توکن FCM

توکن ثبت‌نام می‌تواند در چند مورد تغییر کند: هنگام بازیابی داده‌های برنامه، به‌روزرسانی به نسخه جدید یا پاک کردن حافظه پنهان. برنامه باید FirebaseMessagingService.onNewToken را برای مدیریت به‌روزرسانی توکن و همگام‌سازی با سرور پیاده‌سازی کند.

انواع پیام‌های FCM

FCM از دو نوع بار پشتیبانی می‌کند: notification و data. هر نوع مشخص می‌کند که پیام چگونه و چه زمانی در دستگاه گیرنده پردازش می‌شود.

پارامترNotificationData
نمایش خودکاربله، اگر برنامه در پس‌زمینه باشدخیر، فقط در برنامه
پردازشسیستم — در پس‌زمینه؛ برنامه — در پیش‌زمینههمیشه در برنامه (onMessageReceived)
حداکثر اندازه۴ کیلوبایت۴ کیلوبایت
کلیدهای سفارشیمحدود به فیلدهای از پیش تعیین‌شدههر جفت کلید-مقدار
نیاز به CollapseKeyاختیاریاختیاری برای گروه‌بندی

در عمل، اگر برنامه نیاز به پردازش کامل اعلان در onMessageReceived دارد، توصیه می‌شود از پیام‌های data استفاده شود. پیام‌های notification برای سناریوهای ساده‌ای مناسب هستند که نمایش سیستمی کافی است.

FCM و APNS: مقایسه رویکردها

FCM و APNS دو سرویس اصلی تحویل push هستند. FCM به عنوان یک دروازه چندسکویی کار می‌کند، APNS — فقط برای اکوسیستم Apple. تفاوت‌های کلیدی آنها در معماری، الزامات گواهی و مکانیزم‌های مسیریابی است.

  • چندسکویی — FCM از Android، iOS، Web پشتیبانی می‌کند؛ APNS فقط iOS، macOS، watchOS، tvOS
  • احراز هویت — FCM از Server Key یا OAuth 2.0 استفاده می‌کند؛ APNS — گواهی یا Token-based (p8 key)
  • اولویت پیام — FCM دارای normal/high است؛ APNS — immediate/power-efficient consideration
  • موضوعات — FCM از اشتراک موضوعات خارج از جعبه پشتیبانی می‌کند؛ APNS نیاز به منطق سرور دارد

انتخاب بین FCM و APNS مستقیم به معماری پروژه بستگی دارد. برای برنامه‌های چندسکویی، FCM انتخاب بهینه است. برای پروژه‌های فقط iOS، کار مستقیم با APNS از طریق HTTP/2 API قابل قبول است.

چه زمانی FCM را به جای APNS مستقیم انتخاب کنیم

FCM زمانی توجیه‌پذیر است که پروژه هم‌زمان از Android و iOS استفاده می‌کند، همچنین در صورت نیاز به تحلیل Firebase، تست A/B اعلان‌ها یا موضوعات بدون منطق سرور. APNS مستقیم برای برنامه‌های فقط iOS با حداقل وابستگی‌ها و الزامات سخت‌گیرانه برای تأخیر تحویل ترجیح داده می‌شود.

ادغام FCM در Android

برای اتصال FCM به برنامه Android باید Firebase SDK را اضافه کرده و google-services.json را در ریشه پروژه پیکربندی کنید. پس از ثبت توکن، برنامه آماده دریافت پیام‌ها از طریق FirebaseMessagingService است.

kotlin
// 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 را در اولین راه‌اندازی دریافت می‌کند. توکن باید برای ارسال بعدی اعلان‌ها به این دستگاه به سرور برنامه ارسال شود.

پیکربندی کانال برای اعلان‌های FCM

در Android 8+ قبل از ارسال اعلان FCM با نمایش خودکار باید NotificationChannel ایجاد شود. پیام‌های notification FCM از کانال با ID پیش‌فرض استفاده می‌کنند، اما توصیه می‌شود کانال خود را از طریق FirebaseMessagingService هنگام دریافت اولین پیام ایجاد کنید. پیام‌های data نیازی به کانال ندارند — برنامه خود تصمیم می‌گیرد که چگونه و چه زمانی اعلان را نمایش دهد.

ادغام FCM در iOS

در iOS، FCM به عنوان یک واسطه بین سرور برنامه و APNS عمل می‌کند. Firebase پیام را از سرور دریافت می‌کند، آن را در قالب APNS می‌پیچد و از طریق دروازه Apple ارسال می‌کند. توسعه‌دهنده باید کلید APNS یا گواهی را در کنسول Firebase پیکربندی کند.

swift
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

هنگام کار با FCM، انتخاب نوع پیام مناسب برای هر سناریو مهم است. برای اعلان‌های ساده با نمایش خودکار از پیام‌های notification استفاده کنید. برای مواردی که برنامه باید داده‌ها را قبل از نمایش پردازش کند — پیام‌های data. نوع مختلط (notification + data) فقط در صورتی توصیه می‌شود که داده‌ها برای تحلیل مورد نیاز باشند، نه برای تغییر محتوای اعلان.

توکن‌ها را به صورت متمرکز مدیریت کنید. توکن‌های فعلی را روی سرور در جدولی با پیوند به کاربر و پلتفرم ذخیره کنید. مکانیزم پاکسازی توکن‌های قدیمی را پیاده‌سازی کنید: در صورت خطای NotRegistered یا InvalidRegistration، توکن را از پایگاه داده حذف کنید. توکن‌ها به ندرت تغییر می‌کنند، اما پاکسازی آنها یک عنصر اجباری پشتیبانی از FCM است.

از کلیدهای جمع‌شونده (collapseKey) برای گروه‌بندی پیام‌ها استفاده کنید. اگر چند اعلان از یک نوع ارسال می‌کنید (مثلاً «به‌روزرسانی نرخ ارز»)، همان collapseKey را تنظیم کنید. FCM فقط آخرین پیام از گروه را تحویل می‌دهد که بار دستگاه را کاهش می‌دهد و کاربر را با سیل اعلان‌ها آزار نمی‌دهد.

تحویل را از طریق Firebase Console و Cloud Functions نظارت کنید. تحلیل FCM تعداد اعلان‌های ارسال‌شده، دریافت‌شده و نمایش‌داده‌شده را نشان می‌دهد. اگر درصد نمایش کمتر از ۷۰٪ است — تنظیمات کانال در Android و مجوزها در iOS را بررسی کنید. تحویل پایین اغلب با کانال‌های غیرفعال یا ممنوعیت اعلان مرتبط است. پنجم: از تست A/B Firebase برای بهینه‌سازی متن اعلان و زمان ارسال استفاده کنید — این باعث افزایش ۱۵–۲۵٪ نرخ تبدیل باز شدن بر اساس داده‌های Firebase می‌شود.

سؤالات متداول

تفاوت بین FCM و GCM چیست؟

FCM به‌روزرسانی تکاملی GCM (Google Cloud Messaging) است. FCM پیکربندی ساده‌شده از طریق Firebase Console، تحلیل داخلی، موضوعات و پشتیبانی از Web Push را ارائه می‌دهد. GCM رسماً از آوریل ۲۰۱۹ غیرفعال شده است، همه پروژه‌ها باید به FCM مهاجرت کنند.

چند پیام می‌توان از طریق FCM به صورت رایگان ارسال کرد؟

Firebase Cloud Messaging یک سرویس رایگان بدون محدودیت در تعداد پیام است. هزینه فقط برای استفاده از سایر سرویس‌های Firebase مانند Cloud Functions یا Firestore دریافت می‌شود. FCM برای ارسال پایه اعلان نیاز به اشتراک Spark یا Blaze ندارد.

چرا توکن FCM ممکن است تغییر کند؟

توکن FCM در موارد زیر تغییر می‌کند: بازیابی برنامه از پشتیبان، پاک کردن داده‌های برنامه، نصب مجدد، به‌روزرسانی به نسخه جدید با تغییر Sender ID. همیشه onNewToken را در FirebaseMessagingService برای ارسال توکن جدید به سرور پردازش کنید.

آیا FCM در چین کار می‌کند؟

FCM گوگل در قلمرو چین مسدود شده است. برای تحویل اعلان در چین از سرویس‌های جایگزین استفاده می‌شود: Huawei Push Kit، MiPush (Xiaomi)، Oppo Push، Vivo Push. برای تحویل چندسکویی از سرویس‌های چندارائه‌دهنده مانند Getui استفاده می‌شود.

چگونه بررسی کنیم که FCM به درستی پیکربندی شده است؟

از کنسول داخلی Firebase استفاده کنید: «Cloud Messaging» — «Send Test Message» را انتخاب کنید. توکن تست را وارد کرده و یک پیام notification ارسال کنید. باید اعلان روی دستگاه ظاهر شود. همچنین می‌توانید لاگ‌های FirebaseMessagingService.onMessageReceived را نظارت کنید.

خلاصه

  • FCM — سرویس ابری چندسکویی گوگل برای تحویل اعلان‌های فشاری و داده‌ها
  • توکن — شناسه یکتای دستگاه که برای ارسال هدفمند پیام استفاده می‌شود
  • Notification — نوع پیام با نمایش خودکار توسط سیستم در حالت پس‌زمینه
  • Data — نوع پیام با بار کامل که فقط در برنامه پردازش می‌شود
  • موضوعات — مکانیزم ارسال گروهی با اشتراک موضوعات بدون ذخیره توکن در سرور
  • دروازه APNS — برای iOS، FCM به عنوان واسطه عمل می‌کند و پیام‌ها را از طریق APNS ارسال می‌کند
  • رایگان — FCM برای تعداد پیام‌های ارسالی هزینه‌ای دریافت نمی‌کند

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید