تركّز معظم أدلّة الإشعارات الفورية على الرسائل التي يراها المستخدم. أما الإشعارات الصامتة (Silent Push) فهي الرسائل التي لا يراها المستخدم أبداً — وهي تؤدّي مهمة مختلفة تماماً.
الإشعار الصامت يوقظ تطبيقك في الخلفية، ينفّذ مهمة، ثم يعيده إلى السكون. لا تنبيه، لا صوت، لا شارة (Badge). يفتح المستخدم التطبيق فيجد المحتوى المحدّث محمّلاً مسبقاً، ولا يعلم أن إشعاراً قد وصل. وهذا هو بيت القصيد.
يشرح هذا الدليل كيف تعمل الإشعارات الصامتة على iOS وAndroid، وكيف يبدو تنفيذها في الكود، وكيف تستخدمها استراتيجياً ضمن أتمتة رحلة العميل. وعلى طول الطريق، سترى كيف تتولّى منصة Pushwoosh توصيل الإشعارات الصامتة عبر المنصات وتدمجها في المسارات المؤتمتة — وهو ما يكتسب أهمية خاصة في أسواق الشرق الأوسط وشمال أفريقيا حيث تتجاوز حصة Android 70% من السوق.
قراءات ذات صلة: إشعارات الجوال الفورية: كيف تعمل | ما هي الإشعارات الفورية؟
ما هي الإشعارات الصامتة؟
الإشعارات الصامتة هي رسائل تبدأ من الخادم وتوقظ التطبيق في الخلفية دون عرض أي شيء للمستخدم. لا تنبيه، لا صوت، لا شارة. يتلقّى نظام التشغيل الإشعار، فيُنشّط التطبيق لوهلة، فينفّذ التطبيق مهمته الخلفية، ثم يعود إلى السكون.
والفرق عن الإشعار العادي بسيط: الإشعار المرئي رسالة موجّهة إلى المستخدم؛ أما الإشعار الصامت فهو تعليمات موجّهة إلى التطبيق.
ماذا يمكن للتطبيق أن يفعل في تلك الثواني الخلفية؟
- جلب محتوى جديد. سحب أحدث المقالات، أو كتالوج منتجات محدّث، أو خلاصة مُحدّثة بحيث تكون جاهزة عند فتح المستخدم للتطبيق.
- مزامنة البيانات. تحديث الحالة المحلية بتغييرات حدثت على الخادم أو عبر قنوات أخرى — عملية شراء تمّت على الموقع، أو تغيّر حالة في نظام خلفي.
- تقييم الموقع الجغرافي. التحقق مما إذا كان المستخدم قد دخل منطقة جغرافية (Geofence) أو غادرها دون الحاجة إلى إشعار مرئي كمحفّز.
- تحديث وسوم المستخدم أو بيانات الشريحة. دفع أحدث الإشارات السلوكية إلى منصة بيانات العملاء (CDP) لتبقى دقة الاستهداف عالية.
- التحميل المسبق لمحتوى إشعار مرئي قادم. تجهيز رسالة داخل التطبيق أو حمولة إشعار غني بحيث تُعرض فوراً عند تشغيلها.
القيمة العملية: يفتح المستخدمون تطبيقاً محدّثاً سلفاً. لا دوّارة تحميل، ولا بيانات قديمة. وهذا الانطباع بالسرعة والحداثة له أثر قابل للقياس على الاحتفاظ، حتى عندما لا يستطيع المستخدمون تفسير سبب شعورهم الجيّد عند استخدام التطبيق.
كيف تعمل الإشعارات الصامتة
سلسلة التوصيل هي نفسها سلسلة الإشعار الفوري العادي: يرسل خادمك حمولة (Payload) إلى APNs على iOS أو FCM على Android، فتوصّلها الخدمة إلى الجهاز، ثم يتصرّف نظام التشغيل بناءً عليها. ما يختلف هو بنية الحمولة وما يفعله نظام التشغيل عند وصولها.
مسار التوصيل
- الخادم يرسل الحمولة. يرسل خادمك الخلفي أو Pushwoosh رسالة مُصمّمة خصيصاً إلى APNs أو FCM.
- الخدمة توصّلها إلى الجهاز. يوجّه APNs أو FCM الحمولة إلى الجهاز الصحيح باستخدام رمز الجهاز المخزّن.
- نظام التشغيل يوقظ التطبيق. عند تعرّفه على إشارات الإشعار الصامت في الحمولة، ينشّط نظام التشغيل التطبيق لوهلة في الخلفية.
- التطبيق ينفّذ المهمة الخلفية. يُنفَّذ كودك: جلب بيانات، مزامنة حالة، فحص موقع، تحديث وسم.
- التطبيق يُشير إلى الاكتمال. على iOS، يستدعي التطبيق معالج الإكمال (completion handler). وعلى Android، تعود
onMessageReceived(). ثم يعيد نظام التشغيل التطبيق إلى السكون.
نافذة الخلفية محدودة. يمنح iOS نحو 30 ثانية. ويتفاوت الأمر على Android حسب الجهاز وحالة الطاقة. فالمهام الخلفية يجب أن تكون سريعة أو مصمّمة لتعمل ضمن هذه القيود.
الفروق في الحمولة: iOS مقابل Android
| المعامل | iOS (APNs) | Android (FCM) |
|---|---|---|
| كيفية التمييز كصامت | content-available: 1 ضمن قاموس aps؛ دون مفاتيح alert/sound/badge | رسالة بيانات فقط: حمولة data موجودة، دون كائن notification |
| ترويسات APNs/FCM | apns-push-type: background؛ apns-priority: 5 | priority: normal (افتراضي) أو high للمهام الحسّاسة زمنياً |
| حد وقت الخلفية | ~30 ثانية؛ يجب استدعاء completionHandler | onMessageReceived تعمل على الخيط الرئيسي؛ أزِح العمل الثقيل عنها |
| تقييد نظام التشغيل (Throttling) | تُقيَّد إذا أُرسلت أكثر من ~3 في الساعة أو متقاربة جداً | وضعا Doze وApp Standby يقيّدان التوصيل الخلفي |
| المعالج الأساسي | application(_:didReceiveRemoteNotification:fetchCompletionHandler:) | onMessageReceived() ضمن FirebaseMessagingService |
| ظهوره للمستخدم | لا شيء — لا تنبيه ولا صوت ولا شارة | لا شيء — لا إشعار معروض |
أكثر الأخطاء شيوعاً على iOS هو نسيان ضبط apns-priority: 5 إلى جانب apns-push-type: background. فإذا ضُبطت الأولوية على 10 (الافتراضية للإشعارات المرئية)، قد ترفض Apple الرسالة أو تعرضها بصرياً حتى دون نص تنبيه. والأولوية المنخفضة هي ما يُشير إلى APNs بأن هذه مهمة خلفية، لا إشعار عاجل.
أما على Android، فالقاعدة الحاسمة أبسط: لا كائن notification في حمولة FCM. فإذا وُجد كائن notification، يتعامل معه Android كإشعار فوري عادي ويعرضه. الإشعار الصامت = بيانات فقط.
التنفيذ على iOS
إعداد Xcode
فعّل وضع الخلفية (Background Modes) في Xcode قبل كتابة أي كود:
- افتح مشروعك واختر هدف تطبيقك (app target).
- انتقل إلى ‘Signing & Capabilities’ وانقر ’+ Capability’.
- أضف ‘Background Modes’ وفعّل ‘Remote Notifications’.
يجب أن يكون معرّف التطبيق (App ID) في بوابة Apple Developer مفعّلاً عليه Push Notifications. أعد توليد ملفات التزويد (provisioning profiles) بعد هذا التغيير.
التسجيل للإشعارات البعيدة
ما زالت الإشعارات الصامتة تتطلب تسجيل الجهاز لدى APNs. عالج ذلك في AppDelegate:
import UIKitimport UserNotifications
@UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
UNUserNotificationCenter.current().delegate = self UNUserNotificationCenter.current().requestAuthorization( options: [.badge, .sound, .alert] ) { granted, _ in if granted { DispatchQueue.main.async { application.registerForRemoteNotifications() } } } return true }
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined() // تتولّى Pushwoosh iOS SDK إرسال الرمز تلقائياً }}معالجة الإشعار الصامت
هذه هي الدالة التي يستدعيها iOS عند وصول إشعار صامت:
extension AppDelegate {
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
guard let aps = userInfo["aps"] as? [String: AnyObject], aps["content-available"] as? Int == 1 else { completionHandler(.noData) return }
// نفّذ مهمتك الخلفية هنا fetchLatestContent { success in completionHandler(success ? .newData : .noData) } }}استدعِ دائماً completionHandler قبل انغلاق نافذة الـ 30 ثانية. فإن لم تفعل، قد يُنهي iOS التطبيق ويُقيّد الإشعارات الصامتة المستقبلية. مرّر .newData إن جلبت شيئاً، و.noData إن لم يتغيّر شيء، و.failed إن أخفقت المهمة.
حمولة APNs للإشعار الصامت
{ "aps": { "content-available": 1 }, "update_type": "content_refresh", "content_id": "latest_feed"}ترويسات APNs المطلوبة إلى جانب هذه الحمولة:
- apns-push-type: background
- apns-priority: 5
التنفيذ على Android
إعداد FCM وملف الـ manifest
أضِف FirebaseMessagingService إلى ملف AndroidManifest.xml:
<service android:name=".MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter></service>معالجة رسائل البيانات في Kotlin
وسّع FirebaseMessagingService ونفّذ onMessageReceived:
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(token: String) { // تتولّى Pushwoosh Android SDK إرسال الرمز تلقائياً }
override fun onMessageReceived(remoteMessage: RemoteMessage) { // الإشعار الصامت = حمولة بيانات فقط، دون كائن notification if (remoteMessage.data.isNotEmpty() && remoteMessage.notification == null) { handleSilentPush(remoteMessage.data) } }
private fun handleSilentPush(data: Map<String, String>) { when (data["update_type"]) { "content_refresh" -> { // اجلب محتوى جديداً من خادمك refreshContentFeed(data["content_id"]) } "segment_update" -> { // ادفع الوسوم المحدّثة إلى Pushwoosh syncUserSegmentData() } "location_check" -> { // قيّم حالة المنطقة الجغرافية الحالية evaluateGeofences() } } }}حمولة FCM للإشعار الصامت
يجب أن تحتوي الحمولة على كائن data ولا تحتوي على كائن notification:
{ "to": "DEVICE_TOKEN", "data": { "update_type": "content_refresh", "content_id": "latest_news_feed" }}اضبط الأولوية على ‘high’ فقط للمهام الخلفية الحسّاسة زمنياً. الأولوية القياسية تكفي لمعظم حالات تحديث المحتوى وتتجنّب استهلاكاً غير ضروري للبطارية.
الإشعارات الصامتة عبر المنصات مع Pushwoosh
إدارة الإشعارات الصامتة يدوياً عبر iOS وAndroid تعني صيانة صيغتي حمولة منفصلتين، ومجموعتي ترويسات توصيل، ومجموعتي تكامل SDK. وتُجرّد Pushwoosh ذلك عنك.
عندما تُطلق إشعاراً صامتاً عبر Pushwoosh — من الواجهة أو الـ API — تولّد المنصة الحمولة الصحيحة لكل منصة مستهدفة تلقائياً. فيحصل APNs على content-available: 1 مع الترويسات الصحيحة، ويحصل FCM على رسالة بيانات فقط. تُعدّ الحملة مرة واحدة.
إدارة رموز الأجهزة مركزية. فرموز iOS وAndroid واشتراكات إشعارات الويب تُخزَّن وتُحدَّث جميعها في مكان واحد. وعند تغيّر رمز ما (إعادة تثبيت، ترقية نظام تشغيل)، تتولّى Pushwoosh التحديث.
ولأعضاء الفريق غير التقنيين، توفّر Pushwoosh واجهة لجدولة الإشعارات الصامتة وإطلاقها دون كتابة حمولة. وهذا يجعل من العملي دمج الإشعارات الصامتة في مسارات أداة بناء رحلة العميل إلى جانب الإشعارات المرئية والرسائل داخل التطبيق.
حالات الاستخدام الاستراتيجية
تكون الإشعارات الصامتة أعلى قيمة حين تعمل الظهور المرئي ضدّك فعلاً. وفي ما يلي السيناريوهات التي تلائمها أكثر من الإشعار العادي — بأمثلة من واقع أسواق الشرق الأوسط وشمال أفريقيا.
| حالة الاستخدام | ما الذي يُشغّله الإشعار الصامت | لماذا هو أفضل من إشعار مرئي |
|---|---|---|
| الجلب المسبق للمحتوى | التطبيق يجلب مقالات أو منتجات أو عناصر خلاصة جديدة | يفتح المستخدم التطبيق على محتوى محدّث؛ دون شاشة تحميل |
| تقييم المنطقة الجغرافية | التطبيق يفحص موقع المستخدم مقابل المناطق المخزّنة | يحدث فحص الموقع دون إشعار مرئي؛ وتُطلَق رسالة داخل التطبيق أو إشعار محلي فقط إن تحقّقت الشروط |
| تحديث الشريحة | التطبيق يرسل وسوماً أو أحداثاً محدّثة إلى Pushwoosh | تبقى بيانات الاستهداف دقيقة بعد نشاط خارج التطبيق (مثل شراء عبر الموقع) |
| التجهيز قبل التوصيل | التطبيق يحمّل مسبقاً رسالة داخل التطبيق أو شاشة عرض | يظهر الإشعار المرئي أو الرسالة داخل التطبيق فوراً دون تأخير |
| إعادة حساب RFM | التطبيق يدفع أحدث بيانات الشراء/النشاط إلى الـ CDP | ينتقل المستخدم إلى شريحة RFM الصحيحة فوراً؛ وتُشغَّل حملات المتابعة بدقة |
الجلب المسبق للمحتوى لتطبيقات الأخبار والإعلام
تطبيق أخبار يرسل تنبيه خبر عاجل يستفيد من إشعار صامت يُرسَل قبله بـ 30 ثانية. فالإشعار الصامت يوقظ التطبيق الذي يجلب المقال ويخزّنه محلياً. وعندما يُطلَق التنبيه المرئي، يفتح النقر عليه المقال فوراً. لا انتظار لتحميل القصة.
ولتطبيقات الخلاصات المخصّصة، تكتسب هذه التقنية بُعداً موسمياً واضحاً في منطقة MENA خلال شهر رمضان: إشعار صامت يُرسَل قبيل وقت الإفطار يحمّل مسبقاً وصفات اليوم أو عروض المطاعم أو محتوى الخلاصة المسائي، بحيث يجد المستخدم كل شيء جاهزاً عند فتح التطبيق في النافذة الأكثر ازدحاماً من اليوم. التطبيق يبدو سريعاً لأنه سريع فعلاً — البيانات موجودة سلفاً.
تقييم المنطقة الجغرافية دون محفّز مرئي
يمرّ المستخدم قرب متجر. النهج المعتاد: إرسال إشعار قائم على الموقع. والمشكلة: يجب أن يكون المستخدم موافقاً، وقد يكون التوقيت غير دقيق، وقد يشعر بأنه مُراقَب.
أما نهج الإشعار الصامت: يرسل الخادم إشعاراً صامتاً عندما يكون المستخدم داخل منطقة ما. فيفحص التطبيق المنطقة الجغرافية بدقة من جانب العميل. وإن تحقّقت الشروط، يُفعّل التطبيق رسالة داخل التطبيق أو إشعاراً محلياً في اللحظة المناسبة. ولا يحدث التواصل المرئي إلا إذا اجتاز المنطق الشروط — لا كمحفّز بحد ذاته. هذا نمط ذو قيمة لتطبيقات التجزئة في مراكز التسوق الكبرى بالرياض ودبي، حيث تُطلَق العروض داخل المتجر بدقة دون إغراق المستخدم بتنبيهات موقعية متكررة.
إبقاء بيانات الشريحة دقيقة بعد النشاط خارج التطبيق
يجري المستخدم عملية شراء على موقعك. ينبغي أن تتحدّث شريحة RFM الخاصة به فوراً. لكن التطبيق لا يعلم بذلك حتى يفتحه المستخدم.
إشعار صامت يُرسَل بعد الشراء عبر الموقع يوقظ التطبيق في الخلفية، فيُزامن أحدث حدث شراء مع Pushwoosh. فينتقل المستخدم إلى شريحة RFM الصحيحة فوراً. وتُطلَق حملة متابعة — مكافأة ولاء، بيع متقاطع، تسلسل شكر — بناءً على بيانات دقيقة. وهذا ذو أهمية خاصة لتطبيقات التكنولوجيا المالية (FinTech) في الخليج: تأكيد معاملة دفع رقمي على الويب يُزامَن صامتاً مع التطبيق، فتبقى ملفات المخاطر والشرائح متّسقة عبر القنوات في الزمن الفعلي.
قراءات ذات صلة: دليل تقسيم RFM | إشعارات الوسائط الغنية
التحميل المسبق لمحتوى الرسائل داخل التطبيق
الرسائل داخل التطبيق التي تتطلب جلباً من الخادم للعرض قد تعاني تأخيراً ملحوظاً. إشعار صامت يُرسَل قبل اللحظة المتوقعة لتشغيل الرسالة يحمّل المحتوى مسبقاً ويخزّنه محلياً. وعند إطلاق الرسالة، تُعرَض فوراً.
ويعمل هذا النمط جيداً لمسارات الإعداد (Onboarding)، وإعلانات الميزات، والطبقات الترويجية حيث يكون المحتوى مخصّصاً ولا يمكن تثبيته داخل ملف التطبيق نفسه.
أفضل الممارسات
احترم حدود تقييد نظام التشغيل
يُقيّد iOS الإشعارات الصامتة التي تصل بتواتر مرتفع. وإرشاد Apple هو نحو 2-3 في الساعة، أي ما يقارب إشعاراً واحداً كل 21 دقيقة كحدّ أقصى. والتطبيقات التي تتجاوز ذلك قد تجد إشعاراتها الصامتة مؤجَّلة أو مُسقَطة دون أي خطأ.
ويقيّد وضعا Doze وApp Standby على Android التنفيذ الخلفي عندما يكون الجهاز خاملاً. ويمكن لرسائل FCM عالية الأولوية أن توقظ التطبيق أثناء Doze، لكن ينبغي استخدامها بانتقائية. أما الرسائل ذات الأولوية القياسية فتُؤجَّل حتى يخرج الجهاز من Doze.
القاعدة العملية: أرسل الإشعارات الصامتة فقط حين تكون المهمة الخلفية حسّاسة زمنياً فعلاً. الجلب المسبق للمحتوى مرة واحدة بإيقاع طبيعي (صباحاً، أو بعد تحديث على جانب الخادم) أمر سليم. أما الإرسال كل 10 دقائق لإبقاء البيانات محدّثة فلا.
أبقِ الحمولات صغيرة والمهام سريعة
ينبغي أن تكون حمولة الإشعار الصامت إشارة، لا نقل بيانات. أرسل الحدّ الأدنى اللازم لإخبار التطبيق بما يجلبه ومن أين. أما جلب البيانات الفعلي فيحدث داخل التطبيق بعد وصول الإشعار.
ينبغي أن تكتمل المهام الخلفية ضمن حدّ الوقت بمريح. وإن تطلّبت مهمة أكثر من بضع ثوانٍ، فصمّمها لتكون قابلة للمقاطعة: احفظ التقدّم، استدعِ معالج الإكمال، وأكمل في الفرصة التالية. فالمهام الخلفية الطويلة تخاطر بإنهاء نظام التشغيل لها، وقد تؤثر في عمر البطارية بقدر يلاحظه المستخدمون.
اختبر عبر حالات الطاقة وأجهزة المصنّعين المختلفة
يتفاوت سلوك الإشعار الصامت تفاوتاً كبيراً عبر مصنّعي Android. فأجهزة Xiaomi وHuawei وOnePlus جميعها لها تحسين بطارية صارم قد يمنع التنفيذ الخلفي كلياً للتطبيقات غير المُدرَجة في القائمة البيضاء. وهذا اعتبار جوهري في سوق MENA حيث تنتشر أجهزة Xiaomi وHuawei وOppo على نطاق واسع بين شرائح المستخدمين متوسطة السعر. اختبر على أجهزة حقيقية من هؤلاء المصنّعين، لا على محاكيات Android القياسية فحسب.
وعلى iOS، اختبر في وضع توفير الطاقة ومع إغلاق التطبيق قسراً. فتوصيل الإشعار الصامت في تلك الحالات أقل موثوقية، وينبغي لمنطقك الخلفي أن يتعامل مع الحالة التي لم تُنفَّذ فيها المهمة قبل فتح المستخدم للتطبيق.
تتبّع الفعالية عبر الأحداث اللاحقة
لا تُنتج الإشعارات الصامتة مقاييس نقر. تتبّع فعاليتها عبر الأحداث التي يُفترض أن تُشغّلها: content_refreshed، segment_updated، geofence_evaluated. فإن توقّفت تلك الأحداث عن التشغيل بالمعدّل المتوقّع بعد حملة إشعارات صامتة، فالتوصيل يُقيَّد أو المعالج الخلفي يُخفق.
تعرض تحليلات Pushwoosh أحداث التطبيق إلى جانب بيانات الحملة. اربط أحداث اكتمال مهامك الخلفية بإرساليات الإشعارات الصامتة للتأكد من أن السلسلة تعمل.
ادمجها في أتمتة الرحلات، لا كإرساليات منفردة
الإشعار الصامت المُرسَل بمعزل عملية تقنية. أما الإشعار الصامت المدمج في رحلة عميل فهو عملية استراتيجية. وأكثر الأنماط فائدة تستخدم الإشعارات الصامتة كخطوة تتيح تفاعلاً مرئياً أفضل لاحقاً: حدّث الشريحة قبل الإشعار الترويجي، احمّل المحتوى مسبقاً قبل الرسالة داخل التطبيق، قيّم المنطقة الجغرافية قبل التنبيه القائم على الموقع.
تدعم أداة بناء رحلة العميل من Pushwoosh الإشعارات الصامتة كخطوات ضمن الرحلة إلى جانب الإشعارات المرئية والرسائل داخل التطبيق.
حسّن حداثة التطبيق ودقة الحملات مع Pushwoosh
الإشعارات الصامتة هي طبقة البنية التحتية الكامنة تحت تجارب مستخدم أفضل. محتوى محدّث عند الفتح، بيانات شرائح دقيقة، تفاعلات سلسة مُشغَّلة بالموقع — لا يعمل أيٌّ منها بموثوقية دون تحديثات خلفية للتطبيق. وهذا يخدم تطلّعات النمو الرقمي السريع في المنطقة، من التجارة الإلكترونية إلى التطبيقات المالية ضمن رؤى التحول الرقمي مثل رؤية 2030.
تتولّى Pushwoosh توصيل الإشعارات الصامتة عبر المنصات، وتنسيق الحمولات، وإدارة الرموز، والتكامل مع أداة بناء رحلة العميل. يحصل المطورون على تجريدات SDK نظيفة؛ وتحصل فرق التسويق على الإشعار الصامت كخطوة من الدرجة الأولى ضمن المسارات المؤتمتة. وكل ذلك على منصة حاصلة على شهادتي ISO 27001:2022 وSOC 2 Type I، ومتوافقة مع GDPR وHIPAA، مع مراكز بيانات في الاتحاد الأوروبي والولايات المتحدة — أمان على مستوى المؤسسات يثق به العملاء المؤسسيون والحكوميون.