FCM (Firebase Cloud Messaging) یک سرویس چندسکویی از گوگل برای تحویل اعلانهای فشاری و انتقال داده بین سرور و برنامههای موبایل است. این سرویس از Android، iOS و پلتفرمهای وب از طریق یک API واحد پشتیبانی میکند. به گزارش Firebase Documentation، FCM روزانه بیش از ۱ میلیارد پیام را در سراسر جهان پردازش میکند.
نکات اصلی
Firebase Cloud Messaging (FCM) یک سرویس ابری از گوگل است که تحویل قابل اعتماد اعلانهای فشاری و پیامهای داده را به دستگاههای موبایل فراهم میکند. FCM که قبلاً با نام Google Cloud Messaging (GCM) شناخته میشد، به ابزار اصلی اعلانهای چندسکویی در اکوسیستم 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 پیام تا ۲۸ روز در صف ذخیره میشود، در iOS — تا ۴ هفته (از طریق APNS). پس از انقضای مهلت، پیام بدون اطلاع حذف میشود.
توکن ثبتنام میتواند در چند مورد تغییر کند: هنگام بازیابی دادههای برنامه، بهروزرسانی به نسخه جدید یا پاک کردن حافظه پنهان. برنامه باید FirebaseMessagingService.onNewToken را برای مدیریت بهروزرسانی توکن و همگامسازی با سرور پیادهسازی کند.
FCM از دو نوع بار پشتیبانی میکند: notification و data. هر نوع مشخص میکند که پیام چگونه و چه زمانی در دستگاه گیرنده پردازش میشود.
| پارامتر | Notification | Data |
|---|---|---|
| نمایش خودکار | بله، اگر برنامه در پسزمینه باشد | خیر، فقط در برنامه |
| پردازش | سیستم — در پسزمینه؛ برنامه — در پیشزمینه | همیشه در برنامه (onMessageReceived) |
| حداکثر اندازه | ۴ کیلوبایت | ۴ کیلوبایت |
| کلیدهای سفارشی | محدود به فیلدهای از پیش تعیینشده | هر جفت کلید-مقدار |
| نیاز به CollapseKey | اختیاری | اختیاری برای گروهبندی |
در عمل، اگر برنامه نیاز به پردازش کامل اعلان در onMessageReceived دارد، توصیه میشود از پیامهای data استفاده شود. پیامهای 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 ایجاد شود. پیامهای notification FCM از کانال با 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 تعداد اعلانهای ارسالشده، دریافتشده و نمایشدادهشده را نشان میدهد. اگر درصد نمایش کمتر از ۷۰٪ است — تنظیمات کانال در Android و مجوزها در iOS را بررسی کنید. تحویل پایین اغلب با کانالهای غیرفعال یا ممنوعیت اعلان مرتبط است. پنجم: از تست A/B Firebase برای بهینهسازی متن اعلان و زمان ارسال استفاده کنید — این باعث افزایش ۱۵–۲۵٪ نرخ تبدیل باز شدن بر اساس دادههای Firebase میشود.
سؤالات متداول
FCM بهروزرسانی تکاملی GCM (Google Cloud Messaging) است. FCM پیکربندی سادهشده از طریق Firebase Console، تحلیل داخلی، موضوعات و پشتیبانی از Web Push را ارائه میدهد. GCM رسماً از آوریل ۲۰۱۹ غیرفعال شده است، همه پروژهها باید به FCM مهاجرت کنند.
Firebase Cloud Messaging یک سرویس رایگان بدون محدودیت در تعداد پیام است. هزینه فقط برای استفاده از سایر سرویسهای Firebase مانند Cloud Functions یا Firestore دریافت میشود. FCM برای ارسال پایه اعلان نیاز به اشتراک Spark یا Blaze ندارد.
توکن FCM در موارد زیر تغییر میکند: بازیابی برنامه از پشتیبان، پاک کردن دادههای برنامه، نصب مجدد، بهروزرسانی به نسخه جدید با تغییر Sender ID. همیشه onNewToken را در FirebaseMessagingService برای ارسال توکن جدید به سرور پردازش کنید.
FCM گوگل در قلمرو چین مسدود شده است. برای تحویل اعلان در چین از سرویسهای جایگزین استفاده میشود: Huawei Push Kit، MiPush (Xiaomi)، Oppo Push، Vivo Push. برای تحویل چندسکویی از سرویسهای چندارائهدهنده مانند Getui استفاده میشود.
از کنسول داخلی Firebase استفاده کنید: «Cloud Messaging» — «Send Test Message» را انتخاب کنید. توکن تست را وارد کرده و یک پیام notification ارسال کنید. باید اعلان روی دستگاه ظاهر شود. همچنین میتوانید لاگهای FirebaseMessagingService.onMessageReceived را نظارت کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید