Firebase Cloud Messaging: ما هو، مبدأ العمل والإشعارات الفورية

المؤلف: IT Sectr نُشر: 2026-04-29 وقت القراءة: 9 دق

Firebase Cloud Messaging (FCM) هي خدمة متعددة المنصات لإرسال الإشعارات الفورية والرسائل من Google، مصممة للتطبيقات المحمولة والويب. تضمن FCM نقل بيانات موثوق بين الخادم وأجهزة العميل دون الحاجة إلى الحفاظ على اتصال شبكة دائم. وفقاً لوثائق Firebase، 2026، يمر عبر بنية FCM يومياً أكثر من 300 مليار رسالة في جميع أنحاء العالم. تدعم الخدمة كلاً من الإشعارات ذات العرض التلقائي ورسائل data للنقل المخفي في الخلفية.

أهم النقاط

  • FCM — خدمة إشعارات فورية مجانية من Google تدعم Android و iOS و Web عبر API موحد و Firebase Console.
  • أنواع الرسائل — رسائل notification تُعرض تلقائياً بواسطة النظام، رسائل data تسمح بإرسال JSON مخصص ومعالجته في التطبيق.
  • رموز الأجهزة — يتلقى كل تطبيق Registration Token فريد يستخدمه الخادم لإرسال الإشعارات الفورية المستهدفة.
  • أولويات التسليم — تحدد الأولويات normal و high سلوك النظام أثناء توفير الطاقة: رسائل high تُوقظ الجهاز من وضع Doze.
  • المواضيع والمجموعات — تدعم FCM الاشتراك في المواضيع للإرسال الجماعي و Device Groups للإرسال إلى أجهزة متعددة لمستخدم واحد.

ما هو Firebase Cloud Messaging

Firebase Cloud Messaging هي خدمة سحابية من Google تضمن نقل الإشعارات الفورية ورسائل data بين خادم التطبيق وأجهزة العميل. حلت الخدمة محل Google Cloud Messaging (GCM) القديم وأصبحت الحل القياسي لتسليم الإشعارات في نظام Firebase البيئي. تدعم FCM Android و iOS و Web و Unity، وتوفر واجهة إرسال موحدة بغض النظر عن المنصة المستهدفة.

الإمكانيات الرئيسية لـ FCM

توفر الخدمة عدة آليات لتسليم الرسائل، كل منها يحل مهمة محددة. رسائل Notification يعرضها النظام تلقائياً عند الاستلام — لا يحتاج المطور إلى كتابة كود لعرض الإشعار. رسائل Data تنقل حمولة مخصصة على شكل أزواج مفتاح-قيمة وتُعالج داخل التطبيق. الرسائل المدمجة تحتوي على أجزاء مرئية ومخفية لتحقيق أقصى مرونة.

المزايا مقارنة بالحل الخاص

تنفيذ خادم push خاص يتطلب الحفاظ على اتصال TCP دائم مع كل جهاز، وهو أمر غير فعال وغير آمن. تستخدم FCM بنية Google الموحدة التي تحافظ على اتصال بمليارات الأجهزة في وقت واحد. تدير الخدمة تلقائياً محاولات إعادة التسليم وطوابير الرسائل وتوازن الحمل، مما يريح المطور من الحاجة إلى حل هذه المهام بنفسه.

كيف يعمل Firebase Cloud Messaging

تتكون بنية FCM من ثلاثة مكونات رئيسية: خادم المزود (الخادم الخلفي الخاص بك)، خادم Firebase Cloud Messaging وتطبيق العميل على الجهاز. عندما يرسل الخادم رسالة، تصل أولاً إلى بنية FCM، التي توجهها إلى الجهاز المستهدف. إذا كان الجهاز غير متصل، تخزن FCM الرسالة في طابور وتُسلمها عند استعادة الاتصال.

تسجيل الجهاز والحصول على الرمز

عند التشغيل الأول، يستدعي التطبيق Firebase SDK الذي يسجل الجهاز في خدمة FCM ويتلقى Registration Token فريد. هذا الرمز عبارة عن سلسلة长约 150 حرفاً تحدد نسخة معينة من التطبيق على جهاز معين. قد يتغير الرمز عند إعادة تثبيت التطبيق أو مسح البيانات أو الاستعادة من النسخة الاحتياطية — يجب على المطور معالجة تحديث الرمز من خلال المفوض onNewToken.

دورة حياة الرسالة

عندما يرسل الخادم طلباً عبر API FCM، تمر الرسالة بعدة مراحل. الاستلام والتحقق — تتحقق FCM من صحة الطلب ووجود الجهاز المستهدف. الطابور — إذا كان الجهاز غير متاح، تدخل الرسالة في طابور تخزين. التوجيه — تحدد FCM قناة التسليم المثلى (WiFi أو بيانات الجوال). التسليم — ينقل النظام الرسالة إلى التطبيق المستهدف. بعد التسليم الناجح، تُرجع FCM معرف الرسالة إلى الخادم.

أنواع الرسائل في FCM

Firebase Cloud Messaging تدعم ثلاثة أنواع من الرسائل، كل منها له خصائص معالجة خاصة على جانب العميل. تُعالج رسائل Notification بواسطة خدمة النظام Google Play Services في Android و APNs في iOS وتُعرض تلقائياً كلافتات push. تُسلم رسائل Data مباشرة إلى التطبيق وتُعالج من خلال callback onMessageReceived في Android و application(_:didReceiveRemoteNotification:) في iOS.

رسائل Notification

تحتوي رسالة Notification على حقول محددة مسبقاً: title و body ورابط الصورة وصوت الإشعار. يقوم النظام تلقائياً بإنشاء وعرض الإشعار في درج النظام، حتى إذا كان التطبيق في الخلفية أو مغلقاً. يرى المستخدم لافتة قياسية بالعنوان والنص، وعند النقر، يفتح التطبيق مع البيانات المرسلة في الحمولة. إذا كان التطبيق نشطاً، يمكن اعتراض رسالة notification ومعالجتها في الكود.

رسائل Data

رسالة Data هي مجموعة مخصصة من أزواج مفتاح-قيمة بدون حقول محددة مسبقاً. لا تتم معالجة الحمولة بواسطة النظام تلقائياً — يتلقى التطبيق البيانات الخام ويمكنه تفسيرها بأي شكل. تُستخدم رسائل Data لمزامنة البيانات في الخلفية وتحديث التخزين المؤقت المحلي وتشغيل المزامنة أو إرسال الأوامر دون عرض إشعار. في Android، تُسلم رسالة data دائماً، حتى إذا كان التطبيق مغلقاً أو في الخلفية.

الرسائل المدمجة

تسمح FCM بإرسال رسالة تحتوي على جزء notification (للعرض) وجزء data (للمعالجة). الحمولة المدمجة تتضمن كلاً من حقول notification المحددة مسبقاً ومفاتيح البيانات المخصصة. يعرض النظام الإشعار من جزء 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<String>. لتتبع تحديثات الرمز، يتم تجاوز طريقة onNewToken في الخدمة. يجب إرسال الرمز إلى خادم المزود ليتمكن الخادم من إرسال الإشعارات الفورية إلى هذا الجهاز.

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 والإجراء المحدد. بدون تسجيل الخدمة، لن يتم تسليم الرسائل إلى التطبيق في الخلفية. لعرض الإشعارات في 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 يتطلب تهيئة على كل من Apple Push Notification Service (APNs) وفي Firebase Console. على عكس Android حيث تدير FCM الاتصال مباشرة، في iOS تستخدم FCM APNs كطبقة نقل. يسجل التطبيق لاستقبال الإشعارات الفورية عبر UIApplication.shared.registerForRemoteNotifications، ويعترض SDK Firebase رمز الجهاز المستلم ويربطه بـ Registration Token الخاص بـ FCM.

إعداد 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 تُستدعى عند استلام إشعار أثناء التطبيق النشط ‗ هنا يمكن عرض إشعار مخصص داخل التطبيق أو تجاهل لافتة النظام. تُستدعى طريقة 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.

تنسيق طلب HTTP v1

يحتوي جسم الطلب على كائن JSON بمعلومات الرسالة: target (الرمز أو الموضوع أو الشرط)، notification (للعرض) و data (حمولة مخصصة). المصادقة تتم عبر مفتاح 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 القائمة على الأحداث. للتقسيم الأكثر دقة، تُستخدم الشروط بناءً على مواضيع متعددة مع عوامل منطقية.

الأسئلة الشائعة

ما الفرق بين FCM و APNs؟

يعمل FCM على Android من خلال بنية Google الخاصة، بينما في iOS يستخدم APNs كبروتوكول نقل. يوفر FCM API موحد لكلتا المنصتين وتخزيناً تلقائياً للرسائل دون اتصال وتحليلات تسليم غير موجودة في APNs الخالص.

هل يمكن إرسال رسائل FCM بدون خادم؟

نعم، عبر Firebase Console في قسم Cloud Messaging يمكن إرسال الإشعارات يدوياً إلى الأجهزة أو المواضيع أو شرائح الجمهور المحددة. هذه الوظيفة مناسبة للاختبار والإرسال لمرة واحدة، لكنها لا تغني عن التكامل مع الخادم لتطبيقات الإنتاج.

ماذا تفعل إذا تغير رمز الجهاز؟

اشترك في تحديثات الرمز عبر onNewToken في FirebaseMessagingService (Android) أو MessagingDelegate (iOS). عند تغيير الرمز، أرسل الرمز الجديد إلى الخادم واحذف القديم. يجب على الخادم تحديث قاعدة البيانات والتوقف عن محاولة الإرسال إلى الرمز القديم.

كيف يعالج FCM الأجهزة غير المتصلة؟

يخزن FCM الرسالة في طابور لمدة تصل إلى 28 يوماً ويُسلمها عند استعادة الاتصال. لرسائل notification، يتم طي آخر رسالة فقط لكل مجموعة طي. تُخزن رسائل data بشكل منفصل وتُسلم بترتيب الإرسال بدون طي.

كم تكلفة استخدام Firebase Cloud Messaging؟

FCM مجاني تماماً دون حدود على عدد الرسائل. لا يتم فرض رسوم على استخدام FCM سواء في خطة Spark أو خطة Blaze. توجد حدود فقط على حجم الحمولة: حتى 4 KB لرسائل notification وحتى 2 KB لرسائل data.

الخلاصة

  • Firebase Cloud Messaging هي خدمة إشعارات فورية متعددة المنصات من Google تدعم Android و iOS و Web و Unity عبر API موحد.
  • بنية FCM تتكون من خادم المزود وبنية Firebase وتطبيق العميل، مما يضمن تسليم رسائل موثوق عبر شبكة Google العالمية.
  • ثلاثة أنواع من الرسائل — notification (عرض تلقائي)، data (حمولة مخصصة بدون واجهة) ومدمج (كلا النوعين في رسالة واحدة).
  • FCM في Android يعمل عبر FirebaseMessagingService باتصال خاص، بينما في iOS يستخدم APNs كنقل مع اعتراض الرمز عبر MessagingDelegate.
  • API HTTP v1 موصى بها للإرسال من الخادم مع مصادقة OAuth 2.0 عبر Service Account ودعم تحليلات التسليم.
  • المواضيع تسمح بإرسال الرسائل إلى مجموعات المشتركين، والشروط تسمح بدمج مواضيع متعددة لتقسيم دقيق.
  • FCM مجاني دون حد على عدد الرسائل، مع تخزين الرسائل غير المتصلة حتى 28 يوماً وحجم حمولة أقصى 4 KB.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا