Interactive Notification هو إشعار push بعناصر تفاعلية يسمح بتنفيذ إجراء دون فتح التطبيق. وفقًا لـ Apple Human Interface Guidelines (2025)، تقلل هذه الإشعارات عدد الخطوات للإجراء المستهدف بنسبة 40%. تتيح أزرار الإجراءات وحقول الإدخال للمستخدم الرد على رسالة، أو دفع اشتراك، أو تأكيد حجز مباشرة من لوحة الإشعارات دون فتح التطبيق.
النقاط الرئيسية
Interactive Notification هو تنسيق موسع لإشعار push يحتوي على عناصر تحكم تفاعلية: أزرار ومفاتيح وحقول إدخال نص. على عكس الإشعار القياسي الذي يُعلم فقط، يسمح الإشعار التفاعلي للمستخدم بتنفيذ إجراء مستهدف مباشرة من لوحة الإشعارات أو شاشة القفل. وفقًا لـ Google Material Design (2025)، تتم معالجة الإشعارات التفاعلية بواسطة نظام التشغيل دون تشغيل عملية التطبيق الرئيسية — مما يوفر طاقة البطارية ويسرع وقت الاستجابة. يحدد المطور مجموعة من الإجراءات عبر الفئات على iOS والقنوات على Android، ويعرضها النظام حسب السياق.
يتكون كل إشعار تفاعلي من ثلاثة مستويات: المحتوى الرئيسي (العنوان، النص)، الإجراءات (الأزرار)، وإدخال نص اختياري. على iOS، يتم دمج هذه المكونات عبر UNNotificationCategory، وعلى Android — عبر NotificationCompat.Action.Builder. يعرض النظام الأزرار أسفل نص الإشعار بشكل مطوي أو موسع حسب إصدار نظام التشغيل وطول النص. يرى المستخدم الإجراءات المتاحة فور استلام الإشعار ويمكنه تنفيذ أحدها دون الانتقال إلى التطبيق.
تنقسم آلية عمل Interactive Notification إلى مرحلتين: تسجيل الفئات عند بدء التطبيق ومعالجة الإجراء عند النقر من قبل المستخدم. في مرحلة التسجيل، يقوم المطور بإنشاء كائنات فئة بمجموعة من الإجراءات — لكل إجراء معرف وعنوان وخيارات. عند استلام إشعار push، يطابقه النظام مع الفئة المسجلة عبر حقل categoryIdentifier ويضيف تلقائيًا الأزرار المقابلة. عندما ينقر المستخدم على زر، يستدعي النظام مفوض UNUserNotificationCenter أو PendingIntent على Android مع معرف الإجراء ويعيد النتيجة إلى التطبيق. وفقًا لـ WWDC 2024، لا يتجاوز وقت معالجة الإجراء التفاعلي على iOS 200 مللي ثانية مع التكوين الصحيح.
تنقسم الإشعارات التفاعلية إلى ثلاثة أنواع رئيسية حسب طريقة التفاعل: بالأزرار، والنصية، والوسائط المتعددة. كل نوع يحل مهمته الخاصة ويستخدم في سيناريوهات محددة. يعتمد اختيار النوع على السياق — كلما قل عدد الخطوات المطلوبة من المستخدم، زاد التحويل. توصي Apple وGoogle باستخدام الأزرار للتأكيد، وحقول الإدخال للردود، والوسائط لمعاينة المحتوى.
النوع الأكثر شيوعًا هو إشعار بزر واحد أو أكثر أزرار، كل منها يؤدي إجراءً محددًا مسبقًا. على سبيل المثال، زرا «قبول» و«رفض» لحدث تقويم، و«إعجاب» و«رد» لرسالة. يدعم iOS ما يصل إلى أربعة أزرار، وAndroid — ما يصل إلى ثلاثة. يمكن تجميع الأزرار حسب الأولوية: عادية ومدمرة (مع تأكيد). توصي Apple بعدم استخدام أكثر من زرين رئيسيين لراحة المستخدم على شاشة القفل.
RemoteInput هي تقنية تسمح للمستخدم بإدخال نص مباشرة في الإشعار دون فتح التطبيق. على iOS، يتم استخدام UNTextInputNotificationAction لهذا الغرض، وعلى Android — RemoteInput.Builder بمفتاح لاستخراج النص المُدخل. يُستخدم غالبًا في تطبيقات المراسلة للرد السريع على الرسالة. يتم تمرير النص المُدخل إلى التطبيق عبر خدمة الإشعارات أو المعالج المحلي. القيد هو أن النص لا يمكن أن يحتوي على تنسيق، فقط سلسلة نصية عادية.
الإشعارات ذات مرفقات الوسائط المتعددة تسمح بعرض الصور والصوت والفيديو مباشرة في لوحة الإشعارات. على iOS، يتم تنفيذ ذلك عبر UNNotificationAttachment، وعلى Android — عبر NotificationCompat.MessagingStyle مع BigPictureStyle. يتم تحميل الوسائط بواسطة خادم مزود push وإرسالها مع الإشعار كمرفق. حجم المرفق محدود — توصي Apple بما لا يزيد عن 10 ميغابايت، Google — بما لا يزيد عن 1 ميغابايت للصور. يزيد محتوى الوسائط المتعددة من إفادة الإشعارات للأخبار والأسواق والشبكات الاجتماعية.
على iOS، يتم تنفيذ Interactive Notification عبر إطار عمل UserNotifications باستخدام UNNotificationCategory وUNNotificationAction. يسجل التطبيق الفئات عند بدء التشغيل، وعند استلام إشعار، يعرض النظام تلقائيًا الأزرار المقابلة. لمعالجة الإجراءات، يجب تنفيذ طريقة userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler. أدناه مثال لتسجيل فئة مع زر وإدخال نص في Swift.
import UserNotifications
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "رد",
options: [.authenticationRequired],
textInputButtonTitle: "إرسال",
textInputPlaceholder: "أدخل رسالة…"
)
let category = UNNotificationCategory(
identifier: "message",
actions: [replyAction],
intentIdentifiers: [],
options: []
)
UNUserNotificationCenter.current()
.setNotificationCategories([category])
بعد استدعاء setNotificationCategories، يحفظ النظام الفئات ويستخدمها لجميع الإشعارات اللاحقة. يجب استدعاء الكود في كل تشغيل للتطبيق لمزامنة الفئات مع الإصدارات الجديدة. تتم معالجة الاستجابة في مفوض مركز الإشعارات — يستلم التطبيق معرف الإجراء والنص المُدخل لمزيد من المعالجة.
func userNotificationCenter(
_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completion: @escaping VoidBlock
) {
if response.actionIdentifier == "reply" {
let textResponse = response as! UNTextInputNotificationResponse
let message = textResponse.userText
sendMessage(message)
}
completion()
}
يتم استدعاء طريقة userNotificationCenter بواسطة النظام بعد أن ينقر المستخدم على زر أو يرسل نصًا. داخل المعالج، يتم التحقق من actionIdentifier — إذا تطابق مع المعرف المسجل، يستخرج التطبيق النص المُدخل من userText ويرسله إلى الخادم. للأزرار العادية دون إدخال نص، يتم استخدام UNNotificationResponse بدون تحويل نوع.
على Android، يتم إنشاء الإشعارات التفاعلية عبر فئة NotificationCompat بطريقتين addAction وRemoteInput. على عكس iOS، لا يتطلب Android تسجيلاً مسبقًا للفئات — تتم إضافة الإجراءات مباشرة إلى كل إشعار عبر Builder. هذا يوفر مرونة أكبر: يمكن أن يكون لكل إشعار مجموعة فريدة من الأزرار. أدناه مثال لإشعار مع زر رد في Java باستخدام RemoteInput.
RemoteInput remoteInput = new RemoteInput.Builder("key_reply")
.setLabel("رد")
.build();
PendingIntent replyIntent = PendingIntent.getBroadcast(
this, 1001,
new Intent("ACTION_REPLY"),
PendingIntent.FLAG_UPDATE_CURRENT
);
NotificationCompat.Action action =
new NotificationCompat.Action.Builder(
R.drawable.ic_reply,
"رد", replyIntent
)
.addRemoteInput(remoteInput)
.build();
NotificationCompat.Builder builder =
new NotificationCompat.Builder(this, "messages")
.setContentTitle("رسالة جديدة")
.setContentText("مرحباً! كيف حالك؟")
.setSmallIcon(R.drawable.ic_notification)
.addAction(action);
NotificationManagerCompat.from(this)
.notify(100, builder.build());
العنصر الأساسي هو RemoteInput، الذي يربط حقل الإدخال بالإجراء. عندما ينقر المستخدم على زر «رد»، يفتح النظام حوار إدخال نص داخل الإشعار. بعد الإرسال، يتم تمرير النص عبر Intent إلى BroadcastReceiver أو Activity عبر PendingIntent المحدد. للحصول على النص في المستقبل، يُستخدم RemoteInput.getResultsFromIntent(intent) بمفتاح «key_reply».
Bundle results = RemoteInput.getResultsFromIntent(intent);
if (results != null) {
CharSequence reply = results.getCharSequence("key_reply");
if (reply != null) {
sendReplyToServer(reply.toString());
}
}
تستخرج طريقة getResultsFromIntent النص الذي أدخله المستخدم من Intent الذي مرره النظام عند إرسال الرد. يتم إرجاع النتيجة كـ CharSequence، والتي يتم تحويلها إلى سلسلة لإرسالها إلى الخادم. إذا أغلق المستخدم حوار الإدخال دون إرسال، ستكون النتائج فارغة — يجب مراعاة ذلك أثناء المعالجة. يتيح هذا الأسلوب تنفيذ رد سريع دون تشغيل Activity.
يُستخدم Interactive Notification في التطبيقات من أي نوع حيث يتطلب إجراء سريع من المستخدم. أكثر السيناريوهات فعالية هي تطبيقات المراسلة للرد على الرسالة، والتجارة الإلكترونية لتأكيد الطلب، والتقويمات لقبول الدعوة. وفقًا لـ Localytics (2025)، تُظهر التطبيقات ذات الإشعارات التفاعلية احتفاظًا أعلى بنسبة 28% في اليوم السابع. أدناه جدول بالسيناريوهات الشائعة وميزات المنصة.
| السيناريو | الإجراءات | المنصة |
|---|---|---|
| مراسلة | رد بنص، إعجاب | iOS + Android |
| تجارة إلكترونية | تأكيد، تأجيل، إلغاء | iOS + Android |
| تقويم | قبول، رفض، ربما | iOS |
| أخبار | حفظ، مشاركة، فتح | Android |
| حجوزات | تأكيد، إعادة جدولة، إلغاء | iOS + Android |
عند تصميم الإشعارات التفاعلية، من المهم مراعاة القيد — يمكن للمستخدم تنفيذ الإجراء مرة واحدة فقط. بعد النقر على زر، يختفي الإشعار أو ينتقل إلى حالة «تم». لذلك، يجب أن يكون كل إجراء غير قابل للتراجع أو يحتوي على تأكيد في الخطوة الثانية.
الأسئلة الشائعة
Interactive Notification هو إشعار push بأزرار أو حقل إدخال أو مرفق وسائط متعددة يسمح للمستخدم بتنفيذ إجراء دون فتح التطبيق. مدعوم على iOS عبر UserNotifications وعلى Android عبر NotificationCompat.
الإشعار العادي يُعلم فقط — ينقر المستخدم ويفتح التطبيق. الإشعار التفاعلي يحتوي على أزرار أو حقل إدخال، ويتم تنفيذ الإجراء مباشرة في لوحة الإشعارات. هذا يقصر المسار إلى الإجراء المستهدف ويقلل الحمل على التطبيق.
iOS يدعم ما يصل إلى أربعة أزرار، Android — ما يصل إلى ثلاثة. على Android، يتم عرض زرين على لوحة الإشعارات، والثالث متاح في القائمة المنسدلة. توصي Apple بعدم استخدام أكثر من زرين رئيسيين لراحة المستخدم على شاشة القفل.
على iOS يُستخدم UNTextInputNotificationAction، وعلى Android — RemoteInput.Builder بمفتاح. يدخل المستخدم النص في مربع حوار داخل الإشعار، ويستقبله التطبيق عبر مفوض أو Intent دون تشغيل Activity.
استلام إشعار push يتطلب اتصالاً بالإنترنت، لكن التفاعلية نفسها (عرض الأزرار، إدخال النص) تعمل بدون اتصال. يمكن تأجيل إرسال النتيجة إلى الخادم حتى استعادة الاتصال.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا