Firebase Cloud Messaging (FCM) — سرویس بینالپلتفرمی تحویل اعلانهای push و پیامها از طرف Google است که برای برنامههای موبایل و وب طراحی شده است. FCM انتقال قابل اعتماد داده بین سرور و دستگاههای مشتری را بدون نیاز به حفظ اتصال شبکه دائمی فراهم میکند. طبق Firebase Documentation, 2026, روزانه بیش از 300 میلیارد پیام از طریق زیرساخت FCM در سراسر جهان عبور میکند. این سرویس هم اعلانهای با نمایش خودکار و هم پیامهای 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 کاراکتر است و نمونه خاصی از برنامه را روی یک دستگاه خاص شناسایی میکند. توکن میتواند در هنگام نصب مجدد برنامه، پاک کردن دادهها یا بازیابی از پشتیبان تغییر کند — توسعهدهنده باید بهروزرسانی توکن را از طریق نماینده 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 شامل فیلدهای از پیش تعریف شده است: عنوان, متن, 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 را دریافت میکند که از طریق callback FirebaseMessagingService منتقل میشود. برای دریافت اعلانها باید سرویسی ایجاد کرد که از 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 مربوطه ثبت شود. افزودن تگ service با مجوز INTERNET و مشخص کردن action. بدون ثبت سرویس، پیامها در حالت پسزمینه به برنامه تحویل داده نخواهند شد. برای نمایش اعلانها در Android 13+ مجوز زمان اجرا 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 نیاز به تنظیمات هم در سرویس اعلانهای push اپل (APNs) و هم در Firebase Console دارد. برخلاف Android که در آن FCM مستقیماً اتصال را مدیریت میکند، در iOS FCM از APNs به عنوان لایه انتقال استفاده میکند. برنامه برای دریافت اعلانهای push از طریق UIApplication.shared.registerForRemoteNotifications ثبت نام میکند و Firebase SDK توکن دستگاه دریافتی را رهگیری کرده و آن را با 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 سفارشی). احراز هویت از طریق کلید JSON Service Account که در متغیرهای محیطی سرور بارگذاری میشود. توکن دسترسی از طریق کتابخانه 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 از اشتراک در موضوعات پشتیبانی میکند. موضوع (topic) — کانالی نامگذاری شده است که برنامه مشتری از طریق FirebaseMessaging.getInstance().subscribeToTopic() در آن مشترک میشود. سرور میتواند پیامی به یک موضوع ارسال کند و به تمام دستگاههای مشترک تحویل داده شود. موضوعات برای خبرنامهها، اعلانهای تبلیغاتی و push رویدادی مناسب هستند. برای بخشبندی دقیقتر از شرایط (conditions) بر اساس چندین موضوع با عملگرهای منطقی استفاده میشود.
سوالات متداول
FCM در Android از طریق زیرساخت خود Google کار میکند و در iOS از APNs به عنوان پروتکل انتقال استفاده میکند. FCM یک API واحد برای هر دو پلتفرم، ذخیره خودکار پیامهای آفلاین و تحلیل تحویل فراهم میکند که در APNs خالص وجود ندارد.
بله، از طریق Firebase Console در بخش Cloud Messaging میتوان به صورت دستی اعلانها را به دستگاههای انتخاب شده، موضوعات یا بخشهای مخاطب ارسال کرد. این عملکرد برای آزمایش و ارسالهای یکباره مناسب است، اما جایگزین ادغام سرور برای برنامههای تولیدی نمیشود.
از طریق onNewToken در FirebaseMessagingService (Android) یا MessagingDelegate (iOS) در بهروزرسانیهای توکن مشترک شوید. پس از تغییر توکن، توکن جدید را به سرور ارسال کرده و قدیمی را حذف کنید. سرور باید پایگاه داده را بهروزرسانی کرده و ارسال به توکن قدیمی را متوقف کند.
FCM پیام را تا 28 روز در صف ذخیره میکند و پس از برقراری مجدد اتصال تحویل میدهد. برای پیامهای notification فقط آخرین پیام برای هر گروه collapse جمعآوری میشود. پیامهای data جداگانه ذخیره میشوند و بدون collapse به ترتیب ارسال تحویل داده میشوند.
FCM کاملاً رایگان است بدون محدودیت در تعداد پیامها. استفاده از FCM نه در طرح Spark و نه در طرح Blaze تعرفهگذاری نمیشود. محدودیتها فقط در اندازه payload وجود دارد: تا 4 KB برای پیامهای notification و تا 2 KB برای پیامهای data.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید