Firebase Cloud Messaging: چیست، اصل کار و اعلان‌های push

نویسنده: IT Sectr منتشر شده: 2026-04-29 زمان مطالعه: 9 دقیقه

Firebase Cloud Messaging (FCM) — سرویس بین‌الپلتفرمی تحویل اعلان‌های push و پیام‌ها از طرف Google است که برای برنامه‌های موبایل و وب طراحی شده است. FCM انتقال قابل اعتماد داده بین سرور و دستگاه‌های مشتری را بدون نیاز به حفظ اتصال شبکه دائمی فراهم می‌کند. طبق Firebase Documentation, 2026, روزانه بیش از 300 میلیارد پیام از طریق زیرساخت FCM در سراسر جهان عبور می‌کند. این سرویس هم اعلان‌های با نمایش خودکار و هم پیام‌های data برای انتقال مخفی داده در پس‌زمینه را پشتیبانی می‌کند.

نکات اصلی

  • FCM — سرویس رایگان اعلان‌های push از Google با پشتیبانی از Android, iOS و Web از طریق API واحد و Firebase Console.
  • انواع پیام — پیام‌های notification به طور خودکار توسط سیستم نمایش داده می‌شوند، پیام‌های data امکان ارسال JSON دلخواه و پردازش آن در برنامه را فراهم می‌کنند.
  • توکن‌های دستگاه — هر برنامه یک Registration Token منحصربه‌فرد دریافت می‌کند که سرور از آن برای ارسال هدفمند اعلان‌های push استفاده می‌کند.
  • اولویت‌های تحویل — اولویت‌های normal و high رفتار سیستم را در هنگام صرفه‌جویی در باتری تعیین می‌کنند: پیام‌های high دستگاه را از حالت Doze بیدار می‌کنند.
  • موضوعات و گروه‌ها — FCM از اشتراک در موضوعات برای ارسال انبوه و Device Groups برای ارسال به چند دستگاه یک کاربر پشتیبانی می‌کند.

Firebase Cloud Messaging چیست

Firebase Cloud Messaging — سرویس ابری Google است که انتقال اعلان‌های push و پیام‌های data بین سرور برنامه و دستگاه‌های مشتری را فراهم می‌کند. این سرویس جایگزین Google Cloud Messaging (GCM) قدیمی شده و به راه‌حل استاندارد برای تحویل push در اکوسیستم Firebase تبدیل شده است. FCM از Android, iOS, Web و Unity پشتیبانی می‌کند و بدون توجه به پلتفرم هدف، یک رابط ارسال یکپارچه فراهم می‌کند.

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

این سرویس چندین مکانیزم تحویل پیام ارائه می‌دهد که هر کدام وظیفه خود را حل می‌کنند. پیام‌های notification پس از دریافت به طور خودکار توسط سیستم نمایش داده می‌شوند — توسعه‌دهنده نیازی به نوشتن کد برای نمایش اعلان ندارد. پیام‌های data payload دلخواه را به صورت جفت کلید-مقدار منتقل می‌کنند و در داخل برنامه پردازش می‌شوند. پیام‌های ترکیبی همزمان شامل بخش‌های قابل مشاهده و مخفی برای حداکثر انعطاف‌پذیری هستند.

مزایا نسبت به راه‌حل اختصاصی

پیاده‌سازی سرور push اختصاصی نیاز به نگهداری دائمی اتصال TCP با هر دستگاه دارد که ناکارآمد و ناایمن است. FCM از زیرساخت یکپارچه Google استفاده می‌کند که همزمان با میلیاردها دستگاه ارتباط برقرار می‌کند. این سرویس به طور خودکار تلاش‌های مجدد تحویل، صف‌های پیام و توزیع بار را مدیریت می‌کند و توسعه‌دهنده را از نیاز به حل این وظایف به تنهایی آزاد می‌کند.

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

معماری FCM از سه مؤلفه کلیدی تشکیل شده است: سرور ارائه‌دهنده (backend شما)، سرور Firebase Cloud Messaging و برنامه مشتری روی دستگاه. هنگامی که سرور پیامی ارسال می‌کند، ابتدا وارد زیرساخت FCM می‌شود که آن را به دستگاه هدف مسیریابی می‌کند. اگر دستگاه آفلاین باشد، FCM پیام را در صف ذخیره می‌کند و پس از برقراری مجدد اتصال تحویل می‌دهد.

ثبت نام دستگاه و دریافت توکن

در اولین راه‌اندازی، برنامه Firebase SDK را فراخوانی می‌کند که دستگاه را در سرویس FCM ثبت می‌کند و یک Registration Token منحصربه‌فرد دریافت می‌کند. این توکن رشته‌ای به طول حدود 150 کاراکتر است و نمونه خاصی از برنامه را روی یک دستگاه خاص شناسایی می‌کند. توکن می‌تواند در هنگام نصب مجدد برنامه، پاک کردن داده‌ها یا بازیابی از پشتیبان تغییر کند — توسعه‌دهنده باید به‌روزرسانی توکن را از طریق نماینده onNewToken پردازش کند.

چرخه عمر پیام

هنگامی که سرور درخواستی را از طریق FCM API ارسال می‌کند، پیام مراحل مختلفی را طی می‌کند. دریافت و اعتبارسنجی — FCM صحت درخواست و وجود دستگاه هدف را بررسی می‌کند. صف — اگر دستگاه در دسترس نباشد، پیام وارد صف ذخیره می‌شود. مسیریابی — FCM کانال تحویل بهینه (Wi-Fi یا داده همراه) را تعیین می‌کند. تحویل — سیستم پیام را به برنامه هدف منتقل می‌کند. پس از تحویل موفق، FCM شناسه پیام را به سرور بازمی‌گرداند.

انواع پیام در FCM

Firebase Cloud Messaging از سه نوع پیام پشتیبانی می‌کند که هر کدام ویژگی‌های پردازش خاص خود را در سمت مشتری دارند. پیام‌های notification توسط سرویس سیستم Google Play Services در Android و APNs در iOS پردازش می‌شوند و به طور خودکار به صورت بنرهای push نمایش داده می‌شوند. پیام‌های data مستقیماً به برنامه منتقل می‌شوند و از طریق callback onMessageReceived در Android و application(_:didReceiveRemoteNotification:) در iOS پردازش می‌شوند.

پیام‌های notification

پیام notification شامل فیلدهای از پیش تعریف شده است: عنوان, متن, URL تصویر و صدای اعلان. سیستم به طور خودکار اعلان را در سینی سیستم ایجاد و نمایش می‌دهد، حتی اگر برنامه در پس‌زمینه باشد یا بسته شده باشد. کاربر یک بنر استاندارد با عنوان و متن می‌بیند و با کلیک، برنامه با داده‌های منتقل شده در payload باز می‌شود. اگر برنامه فعال باشد، پیام notification قابل رهگیری و پردازش در کد است.

پیام‌های data

پیام data مجموعه‌ای سفارشی از جفت کلید-مقدار بدون فیلدهای از پیش تعریف شده است. Payload توسط سیستم به طور خودکار پردازش نمی‌شود — برنامه داده‌های خام را دریافت می‌کند و می‌تواند آنها را به دلخواه تفسیر کند. پیام‌های data برای همگام‌سازی داده در پس‌زمینه، به‌روزرسانی حافظه نهان محلی، راه‌اندازی همگام‌سازی یا انتقال دستورات بدون نمایش اعلان استفاده می‌شوند. در Android پیام data همیشه تحویل داده می‌شود، حتی اگر برنامه بسته یا در پس‌زمینه باشد.

پیام‌های ترکیبی

FCM امکان ارسال پیامی را فراهم می‌کند که همزمان شامل بخش notification (برای نمایش) و بخش data (برای پردازش) است. Payload ترکیبی هم فیلدهای از پیش تعریف شده notification و هم کلیدهای دلخواه data را شامل می‌شود. سیستم اعلان را از بخش notification نمایش می‌دهد و بخش data در زمان باز شدن به intent extras برنامه منتقل می‌شود. این برای سناریوهایی مفید است که باید به کاربر اعلان نشان داده و همزمان زمینه برای انتقال به صفحه خاص منتقل شود.

نوعنمایش خودکارپردازش در پس‌زمینهمثال
Notificationبله، توسط سیستمخودکار، بدون کداعلان push خوشامدگویی
Dataخیراز طریق callback برنامههمگام‌سازی داده در پس‌زمینه
ترکیبیبله، بخش notificationبخش data در زمان باز شدناعلان + لینک سفارش

تنظیم FCM در Android

ادغام FCM در Android با اتصال Firebase SDK از طریق فایل build.gradle در سطح برنامه آغاز می‌شود. پس از افزودن وابستگی‌ها و فایل google-services.json، برنامه به طور خودکار Registration Token را دریافت می‌کند که از طریق callback FirebaseMessagingService منتقل می‌شود. برای دریافت اعلان‌ها باید سرویسی ایجاد کرد که از FirebaseMessagingService ارث‌بری کند و آن را در AndroidManifest.xml ثبت کرد.

راه‌اندازی و دریافت توکن

پس از اتصال SDK، Firebase به طور خودکار توکن دستگاه را بدون کد اضافی تولید می‌کند. توکن از طریق FirebaseMessaging.getInstance().token قابل دسترسی است که Task برمی‌گرداند. برای پیگیری به‌روزرسانی‌های توکن، متد onNewToken در سرویس بازنویسی می‌شود. توکن باید به سرور ارائه‌دهنده منتقل شود تا سرور بتواند اعلان‌های push را به این دستگاه ارسال کند.

kotlin
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 مربوطه ثبت شود. افزودن تگ service با مجوز INTERNET و مشخص کردن action. بدون ثبت سرویس، پیام‌ها در حالت پس‌زمینه به برنامه تحویل داده نخواهند شد. برای نمایش اعلان‌ها در Android 13+ مجوز زمان اجرا POST_NOTIFICATIONS مورد نیاز است.

xml
<!-- 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

ادغام FCM در iOS نیاز به تنظیمات هم در سرویس اعلان‌های push اپل (APNs) و هم در Firebase Console دارد. برخلاف Android که در آن FCM مستقیماً اتصال را مدیریت می‌کند، در iOS FCM از APNs به عنوان لایه انتقال استفاده می‌کند. برنامه برای دریافت اعلان‌های push از طریق UIApplication.shared.registerForRemoteNotifications ثبت نام می‌کند و Firebase SDK توکن دستگاه دریافتی را رهگیری کرده و آن را با FCM Registration Token مرتبط می‌کند.

تنظیم APNs و ثبت نام برای اعلان‌ها

برای کار FCM در iOS باید کلید یا گواهی APNs را در Firebase Console بارگذاری کرد. کلید APNs — روش مدرن احراز هویت بدون گواهی (توصیه شده توسط Apple) است. کلید در Apple Developer Portal در بخش Keys ایجاد و در تنظیمات Cloud Messaging در Firebase Console بارگذاری می‌شود. پس از تنظیم APNs، برنامه از طریق UNUserNotificationCenter مجوز اعلان‌ها را درخواست کرده و از طریق APNs ثبت نام می‌کند.

swift
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 ارسال می‌شود.

فرمت درخواست HTTP v1

بدنه درخواست شامل یک شی JSON با اطلاعات پیام است: target (توکن، موضوع یا شرط)، notification (برای نمایش) و data (payload سفارشی). احراز هویت از طریق کلید JSON Service Account که در متغیرهای محیطی سرور بارگذاری می‌شود. توکن دسترسی از طریق کتابخانه google-auth-library تولید می‌شود. Google استفاده از Firebase Admin SDK را برای مدیریت خودکار احراز هویت و تلاش‌های مجدد توصیه می‌کند.

js
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 از اشتراک در موضوعات پشتیبانی می‌کند. موضوع (topic) — کانالی نام‌گذاری شده است که برنامه مشتری از طریق FirebaseMessaging.getInstance().subscribeToTopic() در آن مشترک می‌شود. سرور می‌تواند پیامی به یک موضوع ارسال کند و به تمام دستگاه‌های مشترک تحویل داده شود. موضوعات برای خبرنامه‌ها، اعلان‌های تبلیغاتی و push رویدادی مناسب هستند. برای بخش‌بندی دقیق‌تر از شرایط (conditions) بر اساس چندین موضوع با عملگرهای منطقی استفاده می‌شود.

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

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

FCM در Android از طریق زیرساخت خود Google کار می‌کند و در iOS از APNs به عنوان پروتکل انتقال استفاده می‌کند. FCM یک API واحد برای هر دو پلتفرم، ذخیره خودکار پیام‌های آفلاین و تحلیل تحویل فراهم می‌کند که در APNs خالص وجود ندارد.

آیا می‌توان پیام‌های FCM را بدون سرور ارسال کرد؟

بله، از طریق Firebase Console در بخش Cloud Messaging می‌توان به صورت دستی اعلان‌ها را به دستگاه‌های انتخاب شده، موضوعات یا بخش‌های مخاطب ارسال کرد. این عملکرد برای آزمایش و ارسال‌های یکباره مناسب است، اما جایگزین ادغام سرور برای برنامه‌های تولیدی نمی‌شود.

اگر توکن دستگاه تغییر کرد چه باید کرد؟

از طریق onNewToken در FirebaseMessagingService (Android) یا MessagingDelegate (iOS) در به‌روزرسانی‌های توکن مشترک شوید. پس از تغییر توکن، توکن جدید را به سرور ارسال کرده و قدیمی را حذف کنید. سرور باید پایگاه داده را به‌روزرسانی کرده و ارسال به توکن قدیمی را متوقف کند.

FCM چگونه دستگاه‌های آفلاین را مدیریت می‌کند؟

FCM پیام را تا 28 روز در صف ذخیره می‌کند و پس از برقراری مجدد اتصال تحویل می‌دهد. برای پیام‌های notification فقط آخرین پیام برای هر گروه collapse جمع‌آوری می‌شود. پیام‌های data جداگانه ذخیره می‌شوند و بدون collapse به ترتیب ارسال تحویل داده می‌شوند.

هزینه استفاده از Firebase Cloud Messaging چقدر است؟

FCM کاملاً رایگان است بدون محدودیت در تعداد پیام‌ها. استفاده از FCM نه در طرح Spark و نه در طرح Blaze تعرفه‌گذاری نمی‌شود. محدودیت‌ها فقط در اندازه payload وجود دارد: تا 4 KB برای پیام‌های notification و تا 2 KB برای پیام‌های data.

خلاصه

  • Firebase Cloud Messaging — سرویس بین‌الپلتفرمی اعلان‌های push از Google که از Android, iOS, Web و Unity از طریق یک API واحد پشتیبانی می‌کند.
  • معماری FCM از سرور ارائه‌دهنده، زیرساخت Firebase و برنامه مشتری تشکیل شده است و تحویل قابل اعتماد پیام را از طریق شبکه جهانی Google تضمین می‌کند.
  • سه نوع پیام — notification (نمایش خودکار), data (payload دلخواه بدون رابط کاربری) و ترکیبی (هر دو نوع در یک پیام).
  • FCM در Android از طریق FirebaseMessagingService با اتصال خود کار می‌کند و در iOS از APNs به عنوان انتقال با رهگیری توکن از طریق MessagingDelegate استفاده می‌کند.
  • HTTP v1 API برای ارسال سمت سرور با احراز هویت OAuth 2.0 از طریق Service Account و پشتیبانی از تحلیل تحویل توصیه می‌شود.
  • موضوعات امکان ارسال پیام به گروه‌های مشترکین را فراهم می‌کنند و شرایط (conditions) امکان ترکیب چندین موضوع برای بخش‌بندی دقیق را می‌دهند.
  • FCM رایگان است بدون محدودیت در تعداد پیام‌ها، با ذخیره پیام‌های آفلاین تا 28 روز و حداکثر اندازه payload 4 KB.

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

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

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

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