إشعارات الدفع هي واحدة من أكثر الطرق فعالية للتفاعل مع المستخدم بعد تثبيت التطبيق. إنها تتيح الإبلاغ عن رسالة جديدة، خصم، تحديث محتوى أو تذكير بسلة مهملة. إشعارات الدفع (push notifications) تعمل من خلال الخدمات السحابية: Firebase Cloud Messaging (FCM) على Android و Apple Push Notification Service (APNS) على iOS. في هذه المقالة سنحلل بنية الإشعارات وأنواعها وعملية الإعداد لكلا المنصتين. لمزيد من التفاصيل — في الوثائق الرسمية لـ FCM.
أهم النقاط
إشعار الدفع هو رسالة يرسلها الخادم إلى جهاز محمول دون طلب من التطبيق. تمر الرسالة عبر خدمة سحابية (FCM أو APNS) تقوم بتوصيلها إلى الجهاز حتى إذا كان التطبيق مغلقاً. تنقسم الإشعارات إلى نوعين: إشعارات العرض (تظهر للمستخدم) وإشعارات البيانات (تنقل البيانات للمعالجة في الخلفية).
تتضمن بنية إشعارات الدفع ثلاثة مكونات: (1) خادم التطبيق — يرسل طلباً إلى FCM/APNS؛ (2) الخدمة السحابية — توجه الإشعار؛ (3) تطبيق العميل — يستقبل ويعالج الإشعار. يجب أن يعرف الخادم Device Token الخاص بالجهاز لإرسال الإشعار إليه تحديداً. للإرسال الجماعي يُستخدم Topic Subscription — اشتراك الأجهزة في قنوات مواضيعية (أخبار، عروض، طقس).
على كل جهاز، تتم معالجة الإشعارات بواسطة نظام التشغيل: Android — عبر NotificationManager و NotificationChannel، iOS — عبر UNUserNotificationCenter. يمكن للمستخدم تكوين سلوك الإشعارات لكل قناة: السماح بالصوت، اللافتات، العرض على شاشة القفل أو الإيقاف الكامل. التكوين الصحيح للقنوات يزيد من المشاركة ويقلل معدلات إلغاء الاشتراك.
في IT Sectr، نصمم نظام إشعارات الدفع مع مراعاة ميزات المنصة منذ البداية. القرارات الرئيسية: الاختيار بين FCM و APNS المباشر، تنسيق الحمولة، تكرار الإرسال وآلية الاشتراكات. هذا يتجنب المواقف التي لا تصل فيها الإشعارات أو يتم حظرها بواسطة النظام.
Firebase Cloud Messaging (FCM) هي خدمة Google متعددة المنصات لتوصيل الإشعارات. تدعم FCM أنظمة Android، iOS، الويب و Flutter. على iOS، تعمل FCM عبر APNS: ترسل FCM طلباً إلى APNS الذي يقوم بتوصيل الإشعار إلى الجهاز. مزايا FCM: واجهة برمجة تطبيقات موحدة لكلا المنصتين، تحليلات مدمجة، اختبار A/B، المواضيع وشرائح الجمهور.
Apple Push Notification Service (APNS) هي خدمة Apple الأصلية. تعمل فقط على أجهزة Apple (iOS، macOS، watchOS، tvOS). تتطلب تفويضاً مباشراً عبر شهادة TLS أو رمز مميز (JWT). توفر APNS زمن وصول ضئيل للتوصيل وتكاملاً مباشراً مع ميزات iOS: PushKit، Notification Service Extension والتنبيهات الحرجة.
الاختيار بين FCM و APNS يعتمد على بنية المشروع. إذا كان التطبيق لنظام iOS فقط — تمنح APNS تحكماً أكبر. إذا كان متعدد المنصات — FCM أكثر ملاءمة بواجهة برمجة تطبيقات موحدة. تستخدم العديد من المشاريع FCM كخدمة رئيسية وتقوم بإعداد PushKit إضافياً لنظام VoIP على iOS. النهج الهجين يسمح بالحصول على أفضل ما في كلا النظامين.
| الخاصية | FCM | APNS |
|---|---|---|
| المنصات | Android، iOS، الويب، Flutter | iOS، macOS، watchOS، tvOS |
| التفويض | مفتاح الخادم (Firebase Console) | شهادة TLS أو رمز JWT |
| الحد الأقصى للحمولة | 4 كيلوبايت (data)، 2 كيلوبايت (notification) | 4 كيلوبايت |
| المواضيع | مدمجة (Topic Messaging) | لا (تُنفذ على جانب الخادم) |
| Silent Push | مدعوم | مدعوم (content-available) |
| PushKit | لا | نعم (VoIP، الأنشطة المباشرة) |
| التحليلات | Firebase Analytics | غير مدمجة |
| التوصيل لجهاز مغلق | محدود (يعتمد على الشركة المصنعة) | نعم، عبر PushKit |
الإشعار الغني هو إشعار لا يحتوي على نص فقط بل أيضاً على محتوى وسائط: صور، فيديو، صوت وأزرار إجراءات. على Android يُنفذ عبر أنماط NotificationCompat: BigPictureStyle (صورة كبيرة)، BigTextStyle (نص مطوي/ممتد)، InboxStyle (قائمة رسائل)، MediaStyle (التحكم في التشغيل). على iOS يُستخدم Notification Content Extension — هدف منفصل بواجهة مستخدم مخصصة للإشعار الموسع.
Silent Push (content-available على iOS) هو إشعار يتم توصيله دون عرضه للمستخدم. مخصص للتحديث الخلفي للبيانات: مزامنة المحتوى، التحميل المسبق، تحديث الأدوات. على iOS، يتطلب Silent Push تفعيل Background Modes → Remote notifications. على Android يُستخدم FirebaseMessagingService مع onMessageReceived لمعالجة الإشعارات الخلفية. مهم: على iOS، Silent Push له قيود على التكرار ولا يضمن التوصيل إذا كان التطبيق ليس في المقدمة.
الإشعار التفاعلي يسمح للمستخدم بتنفيذ إجراء دون فتح التطبيق. على Android تكون هذه أزراراً (Action) في الإشعار: "رد"، "موافقة"، "رفض". يتم معالجة الإجراءات عبر PendingIntent الذي يشغل BroadcastReceiver أو Service. على iOS، Notification Action يتم تسجيله عبر UNNotificationAction و UNNotificationCategory. يمكن أن تكون الأزرار foreground (فتح التطبيق)، background (تنفيذ في الخلفية) أو destructive (إجراء لا رجعة فيه — حذف، حظر).
Notification Content Extension (iOS) — وحدة تحكم عرض مخصصة لعرض محتوى الإشعار الموسع عند الضغط المطول أو 3D Touch. Notification Service Extension (iOS) — وسيط لتعديل محتوى الإشعار قبل العرض: فك تشفير رسائل E2E، تحميل الصور، إخفاء البيانات السرية. على Android لا توجد نظائر مباشرة — جميع التعديلات تتم في FirebaseMessagingService.
لنظام Android تحتاج إلى: (1) إضافة Firebase SDK إلى المشروع (google-services.json)؛ (2) إنشاء NotificationChannel (Android 8+) لكل فئة إشعارات؛ (3) تنفيذ FirebaseMessagingService لاستقبال الرموز والرسائل الواردة. Notification Channel إلزامي — بدونه لن تظهر الإشعارات على Android 8+. القنوات لها أولوية (IMPORTANCE_HIGH — صوت + نافذة منبثقة، IMPORTANCE_LOW — بدون صوت) ويمكن للمستخدم تكوينها في إعدادات النظام.
لنظام iOS تحتاج إلى: (1) تفعيل إمكانية Push Notifications في Xcode؛ (2) إعداد مفتاح APNS على Apple Developer Portal؛ (3) طلب التفويض عبر UNUserNotificationCenter.requestAuthorization — هذا حوار نظام يظهر مرة واحدة. استجابة المستخدم حرجة: إذا لم يتم منح الإذن، لن يتم توصيل الإشعارات. يُوصى بشرح سبب الحاجة للإشعارات للمستخدم قبل إظهار حوار النظام (pre-permission prompt).
Device Token (iOS) و Registration Token (Android) هما معرفان فريدان للجهاز لإشعارات الدفع. يتم إنشاء الرمز عند أول تشغيل للتطبيق وقد يتغير: عند إعادة التثبيت، مسح البيانات، إعادة تعيين إعدادات الخصوصية. يجب على الخادم تحديث الرموز بانتظام. توفر Firebase واجهة برمجة تطبيقات ملائمة لإدارة الرموز عبر onNewToken، بالإضافة إلى لوحة إرسال إشعارات اختبارية (Firebase Console → Cloud Messaging).
Topic Subscription هي إحدى أكثر آليات FCM فعالية. الجهاز يشترك في موضوع (مثل "news"، "promo_users_ios")، ويقوم الخادم بإرسال الإشعارات حسب الموضوع دون الحاجة لتخزين قائمة الرموز. Firebase Topics تدعم حتى مليون مشترك لكل موضوع وإرسال شرطي (Condition) عبر لغة تعبير: "'news' in topics && ('US' in topics || 'UK' in topics)".
Notification Payload هي بنية JSON المرسلة عبر FCM/APNS. لـ FCM: notification منفصل (الجزء المرئي — عنوان، نص، صورة) و data (حقول مخصصة للتطبيق). لـ APNS: قاموس aps مع alert، badge، sound، category و content-available. البنية الصحيحة للحمولة حرجة: إذا وصل notification + data في وقت واحد، قد لا يتلقى التطبيق في الخلفية البيانات. يُوصى باستخدام رسائل data فقط لنظام Android وتمرير الحقول المرئية بشكل منفصل عبر FCM Console.
الأسئلة الشائعة
FCM (Firebase Cloud Messaging) هي خدمة Google لنظام Android والإشعارات متعددة المنصات. APNS (Apple Push Notification Service) هي خدمة Apple فقط لأنظمة iOS/macOS. يمكن لـ FCM توصيل الإشعارات عبر APNS على iOS، حيث تعمل كخادم وكيل.
الإشعار الغني هو إشعار محسّن بمحتوى وسائط: صور، فيديو، صوت، أزرار إجراءات. على iOS يُنفذ عبر Notification Content Extension؛ على Android عبر BigPictureStyle و InboxStyle.
Device Token هو معرف فريد للجهاز لإرسال إشعارات الدفع. على Android هو Registration Token من FCM؛ على iOS هو Device Token من APNS. قد يتغير الرمز عند إعادة تثبيت التطبيق أو إعادة تعيين الإعدادات، لذلك يجب تحديثه على الخادم.
Silent Push (إشعار صامت) هو إشعار دون عرضه للمستخدم. يُستخدم للتحديث الخلفي للبيانات: مزامنة المحتوى، تحديث الأدوات، التحميل المسبق. على iOS يتطلب تفعيل Background Modes → Remote notifications.
PushKit هو إطار عمل Apple لتوصيل الإشعارات عالية الأولوية المستخدم في تطبيقات VoIP (المكالمات، المراسلة). PushKit يوصل الإشعار حتى إذا كان التطبيق مغلقاً ويضمن تشغيل التطبيق للمعالجة.
ملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.