FCM (Firebase Cloud Messaging) هي خدمة متعددة المنصات من Google لتوصيل الإشعارات الفورية ونقل البيانات بين الخادم والتطبيقات المحمولة. وهي تدعم Android وiOS ومنصات الويب من خلال API موحد. وفقًا لـ توثيق Firebase، يعالج FCM أكثر من مليار رسالة يوميًا حول العالم.
النقاط الرئيسية
Firebase Cloud Messaging (FCM) هي خدمة سحابية من Google تضمن توصيلاً موثوقًا للإشعارات الفورية ورسائل البيانات إلى الأجهزة المحمولة. كانت تُعرف سابقًا باسم Google Cloud Messaging (GCM)، وأصبحت FCM الأداة الرئيسية للإشعارات متعددة المنصات في نظام Firebase البيئي.
تختار FCM تلقائيًا قناة التوصيل المثلى حسب المنصة: على Android تستخدم اتصال FCM الخاص بها؛ على iOS تستخدم APNS (من خلال بوابة FCM). لا يحتاج المطور إلى تنفيذ تكاملين مختلفين — FCM تتولى التوجيه.
توفر الخدمة REST API موحد و Admin SDK لإرسال الرسائل. يتيح ذلك إرسال الإشعارات من جانب الخادم دون الارتباط بمنصة محددة للمستلم.
تدعم FCM عدة أوضاع للتوصيل: رسالة واحدة إلى جهاز معين، بث جماعي حسب الموضوع، و إرسال مجزأ حسب الشروط. كما يتوفر الإرسال المجدول واختبار A/B لمحتوى الإشعارات.
تعتمد بنية FCM على ثلاثة مكونات: تطبيق العميل، Firebase Connection Server، وخادم التطبيق. يسجل العميل في FCM عند بدء التشغيل ويتلقى رمز تسجيل فريدًا — سلسلة تحدد الجهاز لهذا التطبيق.
يرسل خادم التطبيق طلبًا إلى REST API الخاص بـ FCM، مع تحديد رمز المستلم أو الموضوع. يقوم Firebase Connection Server بتوصيل الرسالة باستخدام اتصال XMPP مستمر أو طلب HTTP. إذا كان الجهاز غير متصل، يتم وضع الرسالة في قائمة الانتظار وتوصيلها عند استعادة الاتصال.
يضمن FCM التوصيل باستخدام قوائم انتظار ذات أولوية وآلية تأكيد. على Android، يتم تخزين الرسالة لمدة تصل إلى 28 يومًا في قائمة الانتظار؛ على iOS، حتى 4 أسابيع (عبر APNS). بعد انتهاء الصلاحية، يتم حذف الرسالة دون إشعار.
يمكن أن يتغير رمز التسجيل في عدة حالات: عند استعادة بيانات التطبيق، أو عند التحديث إلى إصدار جديد، أو عند مسح ذاكرة التخزين المؤقت. يجب على التطبيق تنفيذ FirebaseMessagingService.onNewToken لمعالجة تحديثات الرمز والمزامنة مع الخادم.
يدعم FCM نوعين من الحمولة: notification و data. يحدد كل نوع كيف ومتى تتم معالجة الرسالة على جهاز المستلم.
| المعامل | Notification | Data |
|---|---|---|
| العرض التلقائي | نعم، إذا كان التطبيق في الخلفية | لا، فقط في التطبيق |
| المعالجة | النظام — في الخلفية؛ التطبيق — في المقدمة | دائمًا في التطبيق (onMessageReceived) |
| الحد الأقصى للحجم | 4 كيلوبايت | 4 كيلوبايت |
| المفاتيح المخصصة | محدودة بالحقول المحددة مسبقًا | أي أزواج مفتاح-قيمة |
| يتطلب CollapseKey | اختياري | اختياري للتجميع |
من الناحية العملية، يوصى باستخدام رسائل data عندما يحتاج التطبيق إلى معالجة كاملة للإشعار في onMessageReceived. رسائل notification مناسبة للسيناريوهات البسيطة حيث يكون العرض التلقائي كافيًا.
FCM و APNS هما الخدمتان الرئيسيتان لتوصيل الإشعارات الفورية. تعمل FCM كبوابة متعددة المنصات، بينما APNS مخصصة فقط لنظام Apple البيئي. تكمن الاختلافات الرئيسية في البنية ومتطلبات الشهادات وآليات التوجيه.
يعتمد الاختيار بين FCM و APNS المباشر على بنية المشروع. للتطبيقات متعددة المنصات، FCM هي الخيار الأمثل. للمشاريع التي تعمل فقط على iOS، العمل المباشر مع APNS عبر API HTTP/2 مقبول.
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 معرف القناة الافتراضي، ولكن يُنصح بإنشاء قناة مخصصة عبر 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 بشكل غير متزامن. يحصل SDK FCM تلقائيًا على رمز APNS ويرسله إلى خادم Firebase. يتم تشغيل didReceiveRegistrationToken عند استلام رمز FCM جديد، والذي يجمع بين رمز APNS ومعرف المشروع.
يوفر FCM وحدة تحكم Firebase لمراقبة التوصيل: عدد الإشعارات المرسلة والمستلمة والمعروضة. يتوفر أيضًا استدعاء الحالة عبر Firebase Cloud Functions لتتبع أخطاء التوصيل على جانب الخادم. المقاييس الرئيسية: مرات الظهور وفتح الإشعارات.
عند العمل مع FCM، من المهم اختيار نوع الرسالة المناسب لكل سيناريو. للإشعارات البسيطة مع العرض التلقائي، استخدم رسائل notification. للحالات التي يحتاج فيها التطبيق إلى معالجة البيانات قبل العرض، استخدم رسائل data. النوع المختلط (notification + data) موصى به فقط إذا كانت البيانات مطلوبة للتحليلات وليس لتغيير محتوى الإشعار.
قم بإدارة الرموز مركزيًا. قم بتخزين الرموز الحالية على الخادم في جدول مرتبط بالمستخدم والمنصة. نفذ آلية تنظيف الرموز القديمة: عند مواجهة خطأ NotRegistered أو InvalidRegistration، احذف الرمز من قاعدة البيانات. نادرًا ما تتغير الرموز، لكن تنظيفها عنصر إلزامي في دعم FCM.
استخدم مفاتيح التجميع (collapseKey) لتجميع الرسائل. إذا كنت ترسل إشعارات متعددة من نفس النوع (على سبيل المثال، "تحديث سعر العملة")، قم بتعيين نفس collapseKey. سيقوم FCM بتوصيل آخر رسالة فقط من المجموعة، مما يقلل الحمل على الجهاز ويتجنب إغراق المستخدم بالإشعارات.
راقب التوصيل عبر Firebase Console و Cloud Functions. تُظهر تحليلات FCM عدد الإشعارات المرسلة والمستلمة والمعروضة. إذا كانت نسبة العرض أقل من 70%، تحقق من إعدادات القنوات على Android وأذونات iOS. غالبًا ما يرتبط ضعف التوصيل بالقنوات المعطلة أو حظر الإشعارات. خامسًا: استخدم اختبار A/B من Firebase لتحسين نص الإشعارات ووقت الإرسال — فهذا يزيد من نسبة فتح الإشعارات بنسبة 15–25% وفقًا لبيانات Firebase.
الأسئلة الشائعة
FCM هو التحديث التطوري لـ GCM (Google Cloud Messaging). FCM يقدم إعدادًا مبسطًا عبر Firebase Console، وتحليلات مدمجة، وموضوعات، ودعم Web Push. تم إيقاف GCM رسميًا في أبريل 2019، ويجب ترحيل جميع المشاريع إلى FCM.
Firebase Cloud Messaging هي خدمة مجانية بدون حدود على عدد الرسائل. يتم فرض رسوم فقط على استخدام خدمات Firebase الأخرى مثل Cloud Functions أو Firestore. لا يتطلب FCM اشتراك Spark أو Blaze للإرسال الأساسي للإشعارات.
يتغير رمز FCM عند: استعادة التطبيق من نسخة احتياطية، أو مسح بيانات التطبيق، أو إعادة التثبيت، أو التحديث إلى إصدار جديد مع تغيير Sender ID. تعامل دائمًا مع onNewToken في FirebaseMessagingService لإرسال الرمز الجديد إلى الخادم.
FCM من Google محظور في الصين. لتوصيل الإشعارات في الصين، تُستخدم خدمات بديلة: Huawei Push Kit و MiPush (Xiaomi) و Oppo Push و Vivo Push. للتوصيل متعدد المنصات، تُستخدم خدمات متعددة المزودين مثل Getui.
استخدم وحدة تحكم Firebase المدمجة: اختر "Cloud Messaging" — "Send Test Message". أدخل رمز اختبار وأرسل رسالة notification. يجب أن يظهر الإشعار على الجهاز. يمكنك أيضًا مراقبة سجلات FirebaseMessagingService.onMessageReceived.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا