Notification Content Extension — ما هو، كيفية إنشاء واجهة مستخصة لـ iOS

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

Notification Content Extension هي إمتدادة iOS تسمح باستبدال واجهة الإشعار الدفعي القياسية بـ UIView مخصص. يحصل المطور على تحكم كامل في عرض المحتوى: الصور، الفيديو، الرسوم المتحركة، الخطوط المخصصة والعناصر التفاعلية. وفقًا لـ Apple Developer, 2025، تدعم Notification Content Extension أي واجهة UIKit في مساحة الإشعار المحدودة.

النقاط الرئيسية

  • Notification Content Extension هي إمتدادة iOS لواجهة إشعار دفعي مخصصة.
  • تنفّذ الإمتدادة بروتوكول UNNotificationContentExtension مع الطريقة الإجبارية didReceive.
  • تُنشأ الواجهة المخصصة في Storyboard ويمكن أن تحتوي على أي مكونات UIKit.
  • الحد الأقصى لحجم الإمتدادة هو 50 ميجابايت ولا يجب أن يتجاوز 12 ميجابايت عند الضغط.
  • تتفعّل الإمتدادة للإشعارات ذات categoryIdentifier المحدد.

ما هو Notification Content Extension

Notification Content Extension هي إمتدادة تطبيق في iOS تستبدل قالب عرض الإشعار الدفعي القياسي بـ UIView مخصص. بالمقارنة مع الإشعار العادي حيث يقتصر المحتوى على عنوان وعنوان فرعي ونص، تسمح الإمتدادة بعرض أي واجهة UIKit: خارطة بإحداثيات، رسم بياني، معرض صور أو نموذج إدخال.

كيف يعمل

عندما يتلقى iOS إشعارًا دفعيًا بـ categoryIdentifier محدد، يتحقق النظام ما إذا كانت إمتدادة مسجّلة لهذه الفئة. إذا كانت كذلك، يقوم النظام بتشغيل الإمتدادة في عملية منفصلة ويمرر لها محتوى الإشعار. تعرض الإمتدادة واجهتها بدلاً من الواجهة القياسية. يتفاعل المستخدم مع الواجهة المخصصة دون فتح التطبيق الرئيسي.

الفرق عن Notification Service Extension

من المهم عدم الخلط بين Notification Content Extension و Notification Service Extension. تقوم Service Extension بمعالجة المحتوى قبل عرض الإشعار (تنزيل المرفقات، فك التشفير). تستبدل Content Extension الواجهة بعد استلام المحتوى المحضر. كلتا الإمتدادتين يمكنهما العمل معًا: Service Extension تُحضّر البيانات، و Content Extension تعرضها.

الخاصيةContent ExtensionService Extension
الغرضواجهة إشعار مخصصةتعديل المحتوى قبل العرض
وقت التنفيذطالما يرى المستخدم الإشعارحتى 30 ثانية في الخلفية
الواجهةUIView UIKit كاملةلا واجهة
APIUNNotificationContentExtensionUNNotificationServiceExtension

قيود الإمتدادة

تعمل Notification Content Extension في عملية معزولة بموارد محدودة. ليس للإمتدادة إمكانية الوصول إلى تخزين التطبيق الرئيسي عبر NSUserDefaults، باستثناء App Group. يحد حجم الإمتدادة بـ 50 ميجابايت غير مضغوطة. وقت عرض المحتوى محدود أيضًا — إذا لم تكمل الإمتدادة التحديث خلال وقت معقول، يقوم النظام بإنهائها.

إنشاء Notification Content Extension في Xcode

لإنشاء الإمتدادة في Xcode، يجب إضافة target جديد من نوع Notification Content Extension. سيقوم Xcode بإنشاء MainInterface.storyboard تلقائيًا مع وحدة تحكم ترث من UIViewController وتنفّذ UNNotificationContentExtension.

إضافة target الإمتدادة

في Xcode، اختر File → New → Target → Notification Content Extension. حدد اسم الإمتدادة، اللغة (Swift أو Objective-C) وتأكد من أن المشروع متصل بنفس فريق التطوير. بعد إنشاء target، ستظهر مجلد به ثلاثة ملفات: MainInterface.storyboard، Info.plist وملف وحدة التحكم.

تكوين Info.plist

في Info.plist للإمتدادة، يجب تحديد مصفوفة NSExtensionAttributes بمفتاح UNNotificationExtensionCategory. تحتوي هذه المصفوفة على معرّفات فئات الإشعارات التي ستنشط لها الإمتدادة. المفتاح الاختياري UNNotificationExtensionInitialContentSizeRatio يحدد نسبة الأبعاد الابتدائية للواجهة المخصصة للوضع الصحيح.

هيكل مجلدات الإمتدادة

يُوصى بالحفاظ على هيكل نظيف في target الإمتدادة: مجلد منفصل للمتحكمات، ومجلد منفصل للعرض المخصصة. نظرًا لأن الإمتدادة هي ملف ثنائي منفصل، فإن كود التطبيق الرئيسي غير قابل للوصول مباشرة. لمشاركة الكود، أنشئ framework منفصلاً أو استخدم App Group للبيانات.

تنفيذ بروتوكول UNNotificationContentExtension

UNNotificationContentExtension هو بروتوكول يجب أن تنفّذه وحدة التحكم في Notification Content Extension. الطريقة الإجبارية الوحيدة هي didReceive(_:with:)، التي تُستدعى عند استلام إشعار. تتلقى وحدة التحكم الإشعار ووحدة تحكم عرض جاهزة تحتاج إلى تحديثها بالبيانات.

تنفيذ أساسي لوحدة التحكم

يجب أن ترث وحدة تحكم الإمتدادة من UIViewController وتنفّذ UNNotificationContentExtension. يتم ربط Storyboard أو xib بهذه وحدة التحكم. عند استلام إشعار، تقوم طريقة didReceive بتمرير المحتوى وتقوم وحدة التحكم بتحديث عروضها.

swift
import UIKit
import UserNotifications
import UserNotificationsUI

class CustomNotificationViewController: UIViewController {

    @IBOutlet var titleLabel: UILabel!
    @IBOutlet var customImageView: UIImageView!

    func didReceive(
        notification: UNNotification
    ) {
        let content = notification.request.content
        titleLabel.text = content.title
        loadAttachment(content.attachments.first)
    }

    private func loadAttachment(attachment: UNNotificationAttachment?) {
        guard let url = attachment?.URL else { return }
        if let image = UIImage(contentsOfFile: url.path) {
            customImageView.image = image
        }
    }
}

extension CustomNotificationViewController: UNNotificationContentExtension {
    func didReceive(
        notification: UNNotification
    ) {
        didReceive(notification: notification)
    }
}

إدارة حجم الواجهة

يحدد النظام حجم الواجهة المخصصة بناءً على المفتاح UNNotificationExtensionInitialContentSizeRatio في Info.plist والمحتوى الحالي. يُوصى بتعيين هذا المفتاح إلى 0.1 للحجم الابتدائي الأدنى، ثم تغيير الحجم عبر preferredContentSize بعد تحميل المحتوى.

تخصيص الواجهة والتفاعل

Notification Content Extension تمنح حرية كاملة في إنشاء الواجهة. يمكنك استخدام أي مكونات UIKit: UITableView، MKMapView، WKWebView، UIStackView. ومع ذلك، من المهم مراعاة المساحة المحدودة للإشعار وتحسين الأداء.

إضافة خارطة إلى الإشعار

أحد السيناريوهات الشائعة هو عرض خارطة بموقع. للقيام بذلك، أضف MKMapView إلى Storyboard الإمتدادة، وتقوم وحدة التحكم بتمرير الإحداثيات من محتوى الإشعار. من المهم عدم نسيان إضافة MapKit إلى target الإمتدادة. عند استخدام الخارطة، اعتبر حد ذاكرة الإمتدادة — قد يتجاوز تحميل النيش المعقدة الموارد المتاحة.

الرسوم المتحركة والانتقالات

تدعم Notification Content Extension رسوم UIView المتحركة، بما في ذلك تغيير الحجم والحركة وشفافية العناصر. عند الدخول إلى وضع الإشعار الموسّع، يمكن تشغيل رسم متحرك لظهور المحتوى. يجب أن تكون الرسوم المتحركة قصيرة (حتى 0.5 ثانية) وألا تعرقل تفاعل المستخدم مع الإشعار. تجنب الرسوم المتحركة اللانهائية — فهي تستهلك البطارية وتقلّل الأداء.

معالجة النقر على الواجهة المخصصة

نظرًا لأن الإمتدادة هي UIViewController كامل، يمكنك إضافة إيماءات ومعالجات نقر. تعمل إيماءات UIKit (UITapGestureRecognizer، UIButton) بشكل قياسي. للإجراءات التي تتطلب فتح التطبيق، استخدم مفوض الإمتدادة أو userNotificationCenter. يجب أن تكون العناصر التفاعلية كبيرة بما يكفي للنقر المريح في المساحة المحدودة — الحد الأدنى لحجم هدف اللمس هو 44x44 نقطة وفقًا لتوصيات Apple.

العمل مع الوسائط والمرفقات

المحتوى المتعدد الوسائط هو قدرة رئيسية لـ Notification Content Extension. يمكن أن يحتوي الإشعار على صور، GIF، صوت وفيديو تظهر في الواجهة المخصصة. تُسلّم المرفقات عبر UNNotificationAttachment، والذي يمكن إضافته إما عن طريق الخادم عبر الحمولة أو عن طريق Notification Service Extension بعد التنزيل. الصيغ المدعومة تشمل JPEG، PNG، MPEG-4 و MP3.

عرض الوسائط في الإمتدادة

لعرض صورة، يكفي الحصول على UNNotificationAttachment من محتوى الإشعار وتحميله من URL المحلي. من المهم أن الإمتدادة لديها إمكانية الوصول إلى الملفات المحلية فقط — يجب تنزيل الموارد البعيدة مسبقًا عبر Service Extension. الحد الأقصى لحجم المرفق هو 50 ميجابايت على iOS 15+، ويزداد الحد مع كل تحديث لاحق. لدعم عدة صور، استخدم UNNotificationAttachment بمعرّفات مختلفة واعرضها عبر UIPageViewController.

تحميل وعرض الصور

لعرض صورة في الواجهة المخصصة، تحصل الإمتدادة على UNNotificationAttachment من محتوى الإشعار وتحمله من URL المحلي. يجب أن يتم تنزيل المرفق مسبقًا عبر Notification Service Extension — ليس لدى Content Extension إمكانية الوصول إلى الشبكة. الحد الأقصى لحجم المرفق المتعدد الوسائط هو 50 ميجابايت على iOS 15+، وفي الإصدارات السابقة كان الحد 10 ميجابايت. يجب على الإمتدادة معالجة عدم وجود المرفق بشكل صحيح وعرض واجهة احتياطية. للتحميل المسبق للصور منخفضة الدقة، استخدم إصدارات مصغرة تم إنشاؤها عبر Service Extension قبل الإرفاق.

تشغيل الفيديو في الإشعار

يدعم iOS تشغيل الفيديو في Notification Content Extension عبر AVPlayerLayer. يمكن للإمتدادة عرض مشغّل فيديو بأزرار تحكم مباشرة في الإشعار. هذا مفيد بشكل خاص لتطبيقات المراقبة الفيديوية، البثّ أو معاينة المحتوى. يسمح بالتشغيل التلقائي دون صوت بشرط أن يتوقع المستخدم محتوى وسائط في هذا الإشعار. عند تنفيذ مشغّل فيديو، أضف عناصر تحكم: تشغيل/إيقاف وشريط التقدم وزر إغلاق. تأكد من عدم بدء الفيديو تلقائيًا بصوت — هذا ينتهك توصيات Apple لتجربة المستخدم. لعرض شرائح من عدة صور، استخدم انتقالات متحركة بينها عبر UIView.transition مع خيار انتقال قلب الصفحة.

تحسين أداء الإمتدادة

تعمل Notification Content Extension في بيئة مقيدة بحد ذاكرة يبلغ حوالي 50 ميجابايت. لتحسين الأداء، استخدم التحميل البطيء للصور، تجنب الحسابات الثقيلة على الخط الرئيسي وطبّق Auto Layout بقيود بسيطة. يجب تنفيذ العمليات الثقيلة مثل معالجة الصور أو تحليل البيانات في القوائم الخلفية (DispatchQueue.global). عند تجاوز حد الذاكرة، سينهي النظام الإمتدادة وسيرى المستخدم إشعارًا قياسيًا. يُوصى بتحليل الإمتدادة باستخدام Instruments (Allocations و Time Profiler) قبل النشر، وأيضًا التحقق من استهلاك الذاكرة على أجهزة حقيقية بإصدارات iOS مختلفة.

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

هل يمكن استخدام SwiftUI في Notification Content Extension؟

نعم، بدءًا من iOS 16، تدعم Notification Content Extension SwiftUI عبر UIHostingController. ولكن، يظل UIKit خيارًا أكثر استقرارًا للواجهات المعقدة بسبب الدعم المحدود لـ SwiftUI في الإمتدادات.

لماذا لا تتفعّل الإمتدادة لإشعاري؟

تحقق من أن categoryIdentifier في حمولة الإشعار يتطابق مع UNNotificationExtensionCategory في Info.plist للإمتدادة. وأيضًا، تأكد من أن الإمتدادة مضافة إلى target التطبيق الرئيسي وموقّعة بشكل صحيح.

كيف أنقل البيانات من التطبيق الرئيسي إلى الإمتدادة؟

استخدم App Group — تخزين مشترك (UserDefaults suite) أو حاوية ملفات. يجب أن يكون التطبيق الرئيسي والإمتدادة في نفس فريق التطوير ولديهما إمكانية App Groups مفعّلة.

كيف أحدّث محتوى الإمتدادة بدون إشعار جديد؟

استخدم طريقة didReceive(_:with:) مع UNNotificationContentExtensionMediaPlayPauseButtonType للتحكم في الوسائط أو اطلب تحديثًا عبر المفوض. تحديث كامل للمحتوى بدون إشعار جديد غير ممكن.

كيف أصحّح Notification Content Extension؟

حدد target الإمتدادة في Xcode وقم بالتشغيل على المحاكي. استخدم lldb ونقاط التوقّف كما في تطبيق عادي. للاختبار، أرسل إشعارًا دفعيًا عبر Firebase Console أو محليًا عبر Pusher.

الملخص

  • Notification Content Extension هي إمتدادة iOS لعرض إشعارات دفع مخصص.
  • تنفّذ الإمتدادة UNNotificationContentExtension وتوفر واجهة UIKit كاملة.
  • تتفعّل للإشعارات ذات categoryIdentifier مطابق.
  • تدعم أي مكونات UI: خرائط، صور، فيديو، رسوم متحركة.
  • تعمل في عملية معزولة بوصول عبر App Group.
  • حد الحجم — 50 ميجابايت للإمتدادة غير المضغوطة.
  • للمحتوى المتعدد الوسائط، استخدم UNNotificationAttachment المحضر عبر Service Extension.

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

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

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

اقرأ أيضًا