Notification Category: ما هي، ما الفئات الموجودة وكيف تعمل في iOS

المؤلف: IT Sectr نُشر: 2026-03-20 وقت القراءة: 8 دق

Notification Category (فئة الإشعارات) هي آلية في iOS لتجميع الإشعارات الفورية حسب النوع وإرفاق إجراءات مخصصة بها. تحدد الفئة الأزرار التي تظهر عند استخدام 3D Touch أو الضغط المطول على الإشعار، وكذلك كيفية معالجة النظام للإشعارات الواردة من هذا النوع. وفقًا لوثائق مطوري Apple، يتم تسجيل UNNotificationCategory في UNUserNotificationCenter وربطه بالإشعار عبر حقل category في حمولة APNS.

الوجبات الرئيسية

  • Notification Category — آلية iOS لتصنيف الإشعارات الفورية وإضافة إجراءات إليها
  • UNNotificationCategory — فئة تسجل فئة مع مجموعة من UNNotificationAction
  • الإجراءات — أزرار أسفل الإشعار: UNTextInputAction لإدخال النص، UNNotificationAction للنقر
  • الربط — تُحدد الفئة في حمولة APNS عبر مفتاح category في قاموس aps
  • الفرق عن Android — iOS Category تدير الإجراءات، بينما Android Channel يدير الأهمية والصوت

ما هي Notification Category في iOS؟

Notification Category هي ميزة في iOS (منذ الإصدار 8.0) تتيح للمطورين تصنيف الإشعارات الفورية وإضافة إجراءات تفاعلية إليها. عندما يتلقى المستخدم إشعارًا ويضغط بقوة (3D Touch) أو يقوم بالضغط المطول، تظهر أزرار محددة بواسطة الفئة. هذا يجعل الإشعارات تفاعلية ويسمح للمستخدمين باتخاذ إجراء دون فتح التطبيق.

يتم تسجيل فئة باستخدام كائن UNNotificationCategory، الذي يحتوي على معرّف ومصفوفة من الإجراءات ومعلمات عرض اختيارية. يستخدم النظام معرّف الفئة من حمولة APNS للعثور على الفئة المسجلة وعرض الأزرار المقابلة.

على عكس Android Notification Channel، لا تدير iOS Category الأهمية أو الصوت أو الاهتزاز. غرضها الوحيد هو توفير إمكانيات تفاعلية للإشعارات: أزرار الرد والتأكيد والإلغاء أو إدخال النص.

هل الفئات إلزامية؟

الفئات ليست إلزامية لعرض الإشعارات الفورية على iOS. سيظهر الإشعار على أي حال — مع أزرار إذا تم تسجيل فئة، أو بدونها. الفئات مطلوبة فقط لإضافة التفاعل إلى الإشعارات.

كيف تعمل فئات الإشعارات؟

تتكون آلية الفئات من أربع مراحل: تسجيل الفئة على العميل، إرسال حمولة APNS مع الفئة، تعرف النظام على الفئة، ومعالجة إجراء المستخدم.

  • التسجيل — ينشئ التطبيق UNNotificationCategory مع مصفوفة من الإجراءات ويسجلها في UNUserNotificationCenter
  • الإرسال — يدرج الخادم مفتاح category في حمولة APNS بقيمة تطابق معرّف الفئة
  • العرض — يعرض iOS الإشعار وعند الضغط مع الاستمرار يظهر الأزرار المرتبطة بالفئة
  • المعالجة — ينقر المستخدم على زر، مما يؤدي إلى تشغيل UNUserNotificationCenterDelegate.didReceive response

يمكن أن تكون الإجراءات في الفئة من نوعين: foreground (تفتح التطبيق) و background (تُنفذ في الخلفية). للإجراءات الخلفية، يحصل التطبيق على وقت محدود (حوالي 30 ثانية) للمعالجة في UNNotificationActionHandler.

خيارات عند تسجيل فئة

يدعم UNNotificationCategory عدة خيارات عبر معامل options: customDismissAction — تلقي حدث عند التمرير للإزالة، allowInCarPlay — عرض الإجراءات في CarPlay، hiddenPreviewsBodyPlaceholder — نص placeholder مخصص للمعاينات المخفية.

UNNotificationAction: أنواع الإجراءات

يوفر iOS نوعين من الإجراءات لفئات الإشعارات. لكل نوع غرضه الخاص وطريقته في التفاعل مع المستخدم.

النوعالفئةالوصفمثال
إجراء بسيطUNNotificationActionزر بعنوان وخيارات (destructive, foreground, authenticationRequired)«حذف», «cرض»
إدخال نصUNTextInputActionزر يفتح حقل إدخال نص مع placeholder«رد», «تعليق»

UNTextInputAction هي ميزة فريدة في iOS. عندما ينقر المستخدم على زر «رد»، يعرض النظام حقل نص حيث يكتب المستخدم رده. يتم تمرير النص المُدخل إلى المفوض مع معرّف الإجراء. هذا يتيح تنفيذ ردود سريعة دون فتح التطبيق.

خيارات الإجراء: options.authenticationRequired — يتطلب فتح قفل الجهاز، options.destructive — يبرز الزر باللون الأحمر (للإجراءات الخطرة)، options.foreground — يفتح التطبيق بعد النقر.

إعداد فئة في كود iOS

يتم تسجيل الفئات عند تشغيل التطبيق، عادةً في طريقة didFinishLaunchingWithOptions. يتم التسجيل من خلال UNUserNotificationCenter، بعد طلب إذن الإشعارات. يمكن تحديث الفئات في كل تشغيل — يتم استبدال الإصدارات القديمة بأخرى جديدة.

swift
import UserNotifications

class AppDelegate: UIResponder, UIApplicationDelegate {

    func registerNotificationCategories() {
        let replyAction = UNTextInputNotificationAction(
            identifier: "reply",
            title: "رد",
            options: [.foreground],
            textInputButtonTitle: "إرسال",
            textInputPlaceholder: "أدخل رسالة..."
        )

        let deleteAction = UNNotificationAction(
            identifier: "delete",
            title: "حذف",
            options: [.destructive]
        )

        let messageCategory = UNNotificationCategory(
            identifier: "message",
            actions: [replyAction, deleteAction],
            intentIdentifiers: [],
            options: [.customDismissAction]
        )

        UNUserNotificationCenter.current()
            .setNotificationCategories([messageCategory])
    }

    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        UNUserNotificationCenter.current().delegate = self
        registerNotificationCategories()
        return true
    }
}

بعد تسجيل الفئة، أي إشعار يحتوي على category = «message» في حمولة APNS سيعرض زري «رد» و «حذف». تحدث معالجة النقرات في userNotificationCenter:didReceive response، حيث يحدد actionIdentifier أي زر تم الضغط عليه.

معالجة النقر في المفوض

عندما ينقر المستخدم على زر فئة، يستدعي iOS UNUserNotificationCenterDelegate مع كائن UNNotificationResponse. يحتوي response.actionIdentifier على معرّف الزر الذي تم النقر عليه، ويحتوي response.notification.request.content.userInfo على البيانات المخصصة من الحمولة.

الاختلافات عن قنوات Android

غالبًا ما يخلط المطورون الملمون بقنوات الإشعارات في Android بينها وبين فئات الإشعارات في iOS. على الرغم من الاسم المشابه، فإن هذه الآليات تحل مهام مختلفة وتعمل بشكل مختلف.

  • الغرض — قنوات Android تدير أهمية الإشعارات وظهورها؛ فئات iOS تدير الإجراءات التفاعلية
  • الإلزامية — قناة Android إلزامية لعرض الإشعار؛ فئة iOS اختيارية
  • تحكم المستخدم — مستخدمو Android يهيئون القنوات في إعدادات النظام؛ فئات iOS غير مرئية للمستخدم مباشرة
  • التجميع — يمكن تجميع قنوات Android في ChannelGroups؛ فئات iOS لا تُجمّع

يمكن لكلتا المنصتين الجمع بين الآليتين: في Android، يمكن أن ينتمي الإشعار إلى قناة مع إجراءات من NotificationCompat، بينما في iOS، تُكمل الفئة القنوات، التي تسمى في iOS thread-id وتُستخدم لتجميع الإشعارات في مركز الإشعارات.

حمولة APNS مع فئة

لكي يظهر الإشعار مع أزرار الفئة، يجب على الخادم تضمين مفتاح category في حمولة APNS. بدون هذا المفتاح، لن يعرف النظام أي فئة يطبقها على الإشعار.

json
{
    "aps": {
        "alert": {
            "title": "رسالة جديدة",
            "body": "آنا: مرحباً! كيف حالك؟"
        },
        "category": "message",
        "thread-id": "chat_123",
        "badge": 5,
        "sound": "default"
    }
}

يجب أن يتطابق مفتاح category تمامًا مع المعرّف المسجل عبر setNotificationCategories على العميل. حالة الأحرف مهمة — «message» و «Message» تعتبران فئتين مختلفتين. إذا لم يتم العثور على الفئة، يظهر الإشعار بدون أزرار، بدون أخطاء في السجلات.

معالجة الفئات غير المعروفة

إذا أرسل الخادم إشعارًا بفئة غير مسجلة على العميل، يتجاهل iOS الفئة ويعرض الإشعار بدون أزرار. لا يتم تسجيل الخطأ، ولا يعلم التطبيق بعدم التطابق. يُوصى بمزامنة قائمة الفئات بين الخادم والعميل.

أنماط تصميم الفئات

عند تصميم فئات الإشعارات في iOS، اتبع مبدأ فئة واحدة — سيناريو واحد. يجب أن تتوافق كل فئة مع نوع محدد من التفاعل: الرد على رسالة، تأكيد إجراء، رفض طلب. لا تخلط سيناريوهات مختلفة في فئة واحدة.

استخدم UNTextInputAction للسيناريوهات التي يحتاج فيها المستخدم إلى إدخال نص دون فتح التطبيق: ردود المراسلة، التعليقات، الملاحظات السريعة. تزيد إجراءات النص من التفاعل — يقوم المستخدم بإجراء ذي معنى بنقرتين بدلاً من 5+ داخل التطبيق.

للإجراءات الخطرة (حذف، حظر)، استخدم الخيار destructive. سيميز iOS هذه الأزرار باللون الأحمر، محذرًا المستخدم من عدم رجعة الإجراء. للإجراءات التي تتطلب فتح قفل الجهاز (عرض بيانات شخصية)، حدد authenticationRequired.

اختبر الفئات على أجهزة مختلفة: على iPhone مع 3D Touch، على iPhone بدون 3D Touch (الضغط المطول)، على iPad وعلى Mac. قد يختلف سلوك الفئات قليلاً عبر منصات Apple المختلفة. انتبه بشكل خاص لـ CarPlay: تظهر أزرار الفئات على شاشة السيارة ويجب تصميمها بأقل قدر من النص لسلامة السائق.

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

كم عدد الفئات التي يمكن تسجيلها في iOS؟

لا توجد حدود — لا يفرض iOS حدًا على عدد UNNotificationCategory. ومع ذلك، من الناحية العملية، يُوصى باستخدام ما لا يزيد عن 10–15 فئة لتجنب تعقيد المعالجة في المفوض. يمكن أن تحتوي كل فئة على ما يصل إلى 4 إجراءات (أزرار). أكثر من 4 إجراءات يتم تجاهلها من قبل النظام.

كيف يتم معالجة النقر على زر فئة؟

قم بتنفيذ بروتوكول UNUserNotificationCenterDelegate وطريقة didReceive. تحقق من response.actionIdentifier: UNNotificationDismissActionIdentifier — التمرير للتجاهل، UNNotificationDefaultActionIdentifier — النقر على الجسم، أو معرّف الزر المخصص الخاص بك. لأزرار إدخال النص، النص متاح عبر response.userText.

ما الفرق بين category و thread-id؟

Category — تحدد الإجراءات التفاعلية (الأزرار) للإشعار. Thread-id — تجمع الإشعارات في مركز الإشعارات حسب الموضوع. يتم تحديد كلا المفتاحين في حمولة APNS. Category و thread-id غير مرتبطين: يمكن أن يكون للإشعار فئة ولكن لا يحتوي على thread-id، والعكس صحيح.

هل تعمل الفئات على macOS؟

نعم، UNNotificationCategory مدعوم على macOS 10.14+ (Mojave) في التطبيقات التي تستخدم إطار UserNotifications. سلوك الفئات على macOS مشابه لـ iOS: عند النقر على الإشعار، تظهر الأزرار، وتتم المعالجة عبر UNUserNotificationCenterDelegate.

هل أحتاج إلى تحديث الفئات في كل تشغيل؟

يُوصى بتسجيل الفئات في كل تشغيل للتطبيق عبر setNotificationCategories. يستبدل النظام المجموعة القديمة من الفئات بالجديدة في كل استدعاء. إذا لم تقم بالتحديث، تبقى الفئات بين عمليات التشغيل، ولكن عندما يتغير الكود، قد تسبب الفئات القديمة سلوكًا غير متوقع.

الخلاصة

  • Notification Category — آلية iOS لإضافة إجراءات تفاعلية إلى الإشعارات الفورية
  • UNNotificationCategory — فئة تجمع بين معرّف ومصفوفة من UNNotificationAction وخيارات
  • UNTextInputAction — إجراء مع حقل إدخال نص للردود السريعة دون فتح التطبيق
  • حمولة APNS — مفتاح category في قاموس aps يربط الإشعار بفئة مسجلة
  • حتى 4 إجراءات — الحد الأقصى للأزرار لكل فئة، يتم تجاهل الباقي من قبل النظام
  • خيارات الإجراء — foreground (فتح التطبيق)، destructive (زر أحمر)، authenticationRequired
  • الفرق عن Android — iOS Category تدير الإجراءات، Android Channel يدير الأهمية والصوت

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

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

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

اقرأ أيضًا