Firebase Cloud Messaging (FCM) هي خدمة متعددة المنصات لإرسال الإشعارات الفورية والرسائل من Google، مصممة للتطبيقات المحمولة والويب. تضمن FCM نقل بيانات موثوق بين الخادم وأجهزة العميل دون الحاجة إلى الحفاظ على اتصال شبكة دائم. وفقاً لوثائق Firebase، 2026، يمر عبر بنية FCM يومياً أكثر من 300 مليار رسالة في جميع أنحاء العالم. تدعم الخدمة كلاً من الإشعارات ذات العرض التلقائي ورسائل data للنقل المخفي في الخلفية.
أهم النقاط
Firebase Cloud Messaging هي خدمة سحابية من Google تضمن نقل الإشعارات الفورية ورسائل data بين خادم التطبيق وأجهزة العميل. حلت الخدمة محل Google Cloud Messaging (GCM) القديم وأصبحت الحل القياسي لتسليم الإشعارات في نظام Firebase البيئي. تدعم FCM Android و iOS و Web و Unity، وتوفر واجهة إرسال موحدة بغض النظر عن المنصة المستهدفة.
توفر الخدمة عدة آليات لتسليم الرسائل، كل منها يحل مهمة محددة. رسائل Notification يعرضها النظام تلقائياً عند الاستلام — لا يحتاج المطور إلى كتابة كود لعرض الإشعار. رسائل Data تنقل حمولة مخصصة على شكل أزواج مفتاح-قيمة وتُعالج داخل التطبيق. الرسائل المدمجة تحتوي على أجزاء مرئية ومخفية لتحقيق أقصى مرونة.
تنفيذ خادم push خاص يتطلب الحفاظ على اتصال TCP دائم مع كل جهاز، وهو أمر غير فعال وغير آمن. تستخدم FCM بنية Google الموحدة التي تحافظ على اتصال بمليارات الأجهزة في وقت واحد. تدير الخدمة تلقائياً محاولات إعادة التسليم وطوابير الرسائل وتوازن الحمل، مما يريح المطور من الحاجة إلى حل هذه المهام بنفسه.
تتكون بنية FCM من ثلاثة مكونات رئيسية: خادم المزود (الخادم الخلفي الخاص بك)، خادم Firebase Cloud Messaging وتطبيق العميل على الجهاز. عندما يرسل الخادم رسالة، تصل أولاً إلى بنية FCM، التي توجهها إلى الجهاز المستهدف. إذا كان الجهاز غير متصل، تخزن FCM الرسالة في طابور وتُسلمها عند استعادة الاتصال.
عند التشغيل الأول، يستدعي التطبيق Firebase SDK الذي يسجل الجهاز في خدمة FCM ويتلقى Registration Token فريد. هذا الرمز عبارة عن سلسلة长约 150 حرفاً تحدد نسخة معينة من التطبيق على جهاز معين. قد يتغير الرمز عند إعادة تثبيت التطبيق أو مسح البيانات أو الاستعادة من النسخة الاحتياطية — يجب على المطور معالجة تحديث الرمز من خلال المفوض onNewToken.
عندما يرسل الخادم طلباً عبر API FCM، تمر الرسالة بعدة مراحل. الاستلام والتحقق — تتحقق FCM من صحة الطلب ووجود الجهاز المستهدف. الطابور — إذا كان الجهاز غير متاح، تدخل الرسالة في طابور تخزين. التوجيه — تحدد FCM قناة التسليم المثلى (WiFi أو بيانات الجوال). التسليم — ينقل النظام الرسالة إلى التطبيق المستهدف. بعد التسليم الناجح، تُرجع FCM معرف الرسالة إلى الخادم.
Firebase Cloud Messaging تدعم ثلاثة أنواع من الرسائل، كل منها له خصائص معالجة خاصة على جانب العميل. تُعالج رسائل Notification بواسطة خدمة النظام Google Play Services في Android و APNs في iOS وتُعرض تلقائياً كلافتات push. تُسلم رسائل Data مباشرة إلى التطبيق وتُعالج من خلال callback onMessageReceived في Android و application(_:didReceiveRemoteNotification:) في iOS.
تحتوي رسالة Notification على حقول محددة مسبقاً: title و body ورابط الصورة وصوت الإشعار. يقوم النظام تلقائياً بإنشاء وعرض الإشعار في درج النظام، حتى إذا كان التطبيق في الخلفية أو مغلقاً. يرى المستخدم لافتة قياسية بالعنوان والنص، وعند النقر، يفتح التطبيق مع البيانات المرسلة في الحمولة. إذا كان التطبيق نشطاً، يمكن اعتراض رسالة notification ومعالجتها في الكود.
رسالة Data هي مجموعة مخصصة من أزواج مفتاح-قيمة بدون حقول محددة مسبقاً. لا تتم معالجة الحمولة بواسطة النظام تلقائياً — يتلقى التطبيق البيانات الخام ويمكنه تفسيرها بأي شكل. تُستخدم رسائل Data لمزامنة البيانات في الخلفية وتحديث التخزين المؤقت المحلي وتشغيل المزامنة أو إرسال الأوامر دون عرض إشعار. في Android، تُسلم رسالة data دائماً، حتى إذا كان التطبيق مغلقاً أو في الخلفية.
تسمح FCM بإرسال رسالة تحتوي على جزء notification (للعرض) وجزء data (للمعالجة). الحمولة المدمجة تتضمن كلاً من حقول notification المحددة مسبقاً ومفاتيح البيانات المخصصة. يعرض النظام الإشعار من جزء 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<String>. لتتبع تحديثات الرمز، يتم تجاوز طريقة onNewToken في الخدمة. يجب إرسال الرمز إلى خادم المزود ليتمكن الخادم من إرسال الإشعارات الفورية إلى هذا الجهاز.
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 والإجراء المحدد. بدون تسجيل الخدمة، لن يتم تسليم الرسائل إلى التطبيق في الخلفية. لعرض الإشعارات في 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 يتطلب تهيئة على كل من Apple Push Notification Service (APNs) وفي Firebase Console. على عكس Android حيث تدير FCM الاتصال مباشرة، في iOS تستخدم FCM APNs كطبقة نقل. يسجل التطبيق لاستقبال الإشعارات الفورية عبر UIApplication.shared.registerForRemoteNotifications، ويعترض SDK Firebase رمز الجهاز المستلم ويربطه بـ Registration Token الخاص بـ FCM.
لكي يعمل 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 تُستدعى عند استلام إشعار أثناء التطبيق النشط ‗ هنا يمكن عرض إشعار مخصص داخل التطبيق أو تجاهل لافتة النظام. تُستدعى طريقة didReceive عندما ينقر المستخدم على الإشعار — هنا يتم التنقل إلى الشاشة المقابلة. لرسائل data يُستخدم مفوض MessagingDelegate الذي يتلقى الحمولة عند استلام رسالة FCM في الخلفية.
الإرسال من الخادم لرسائل FCM يتم عبر API HTTP v1 لـ Firebase Cloud Messaging أو API القديم. API HTTP v1 هي الطريقة الموصى بها، تستخدم مصادقة OAuth 2.0 عبر Service Account وتدعم جميع إمكانيات FCM الحديثة بما في ذلك تحليلات التسليم واختبار A/B للإشعارات. يُرسل الطلب بطريقة POST إلى endpoint https://fcm.googleapis.com/v1/projects/{project_id}/messages:send.
يحتوي جسم الطلب على كائن JSON بمعلومات الرسالة: target (الرمز أو الموضوع أو الشرط)، notification (للعرض) و data (حمولة مخصصة). المصادقة تتم عبر مفتاح 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 القائمة على الأحداث. للتقسيم الأكثر دقة، تُستخدم الشروط بناءً على مواضيع متعددة مع عوامل منطقية.
الأسئلة الشائعة
يعمل FCM على Android من خلال بنية Google الخاصة، بينما في iOS يستخدم APNs كبروتوكول نقل. يوفر FCM API موحد لكلتا المنصتين وتخزيناً تلقائياً للرسائل دون اتصال وتحليلات تسليم غير موجودة في APNs الخالص.
نعم، عبر Firebase Console في قسم Cloud Messaging يمكن إرسال الإشعارات يدوياً إلى الأجهزة أو المواضيع أو شرائح الجمهور المحددة. هذه الوظيفة مناسبة للاختبار والإرسال لمرة واحدة، لكنها لا تغني عن التكامل مع الخادم لتطبيقات الإنتاج.
اشترك في تحديثات الرمز عبر onNewToken في FirebaseMessagingService (Android) أو MessagingDelegate (iOS). عند تغيير الرمز، أرسل الرمز الجديد إلى الخادم واحذف القديم. يجب على الخادم تحديث قاعدة البيانات والتوقف عن محاولة الإرسال إلى الرمز القديم.
يخزن FCM الرسالة في طابور لمدة تصل إلى 28 يوماً ويُسلمها عند استعادة الاتصال. لرسائل notification، يتم طي آخر رسالة فقط لكل مجموعة طي. تُخزن رسائل data بشكل منفصل وتُسلم بترتيب الإرسال بدون طي.
FCM مجاني تماماً دون حدود على عدد الرسائل. لا يتم فرض رسوم على استخدام FCM سواء في خطة Spark أو خطة Blaze. توجد حدود فقط على حجم الحمولة: حتى 4 KB لرسائل notification وحتى 2 KB لرسائل data.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا