Notification Service Extension — پش نوٹیفکیشن پروسیسنگ کیسے کام کرتی ہے

مصنف: IT Sectr اشاعت: 2026-06-16 مطالعے کا وقت: 9 منٹ

Notification Service Extension ایک iOS ایکسٹینشن ہے جو پش نوٹیفکیشن کو موصول ہونے کے فوراً بعد لیکن صارف کو دکھائے جانے سے پہلے روک لیتی ہے۔ ایکسٹینشن خفیہ کردہ پے لوڈ کو ڈیکرپٹ کر سکتی ہے، میڈیا فائلیں ڈاؤن لوڈ اور منسلک کر سکتی ہے، اور حقیقی وقت میں نوٹیفکیشن کا متن یا عنوان بدل سکتی ہے۔ Apple ڈویلپر دستاویزات (2025) کے مطابق، ایکسٹینشن کو فعال کرنے کے لیے سرور کو نوٹیفکیشن کی خصوصیات میں mutable-content:1 کلید بھیجنی ہوگی — یہ UNNotificationServiceExtension چلانے کی واحد شرط ہے۔

اہم نکات

  • Notification Service Extension iOS ڈیوائس پر صارف کو دکھائے جانے سے پہلے پش نوٹیفکیشن میں تبدیلی کرتی ہے
  • ایکسٹینشن کو چالو کرنے کے لیے سرور نوٹیفکیشن پے لوڈ میں mutable-content:1 پیرامیٹر درکار ہے
  • بنیادی پروٹوکول UNNotificationServiceExtension ہے جس میں didReceive(_:withContentHandler:) اور serviceExtensionTimeWillExpire() طریقے ہیں
  • ایکسٹینشن نیٹ ورک سے میڈیا منسلکات ڈاؤن لوڈ کر سکتی ہے اور UNNotificationAttachment کے ذریعے نوٹیفکیشن سے منسلک کر سکتی ہے
  • عملدرآمد کا وقت محدود ہے — نظام ایک نوٹیفکیشن کی مکمل پروسیسنگ کے لیے تقریباً 30 سیکنڈ مختص کرتا ہے

Notification Service Extension کیا ہے

Notification Service Extension iOS میں ایک ایپ ایکسٹینشن ہے جو ڈیوائس سائیڈ پر آنے والے پش نوٹیفکیشن کو روکتی ہے اور صارف کے دیکھنے سے پہلے اس کے مواد میں تبدیلی کی اجازت دیتی ہے۔ یہ نوٹیفکیشن ایکسٹینشن کی واحد قسم ہے جو ڈسپلے کے بجائے مواد کے ساتھ کام کرتی ہے۔

Notification Content Extension سے بنیادی فرق: Service Extension نوٹیفکیشن دکھائے جانے سے پہلے کام کرتی ہے اور عنوان، باڈی، آواز کی فائل اور منسلکات کو بدل سکتی ہے۔ Content Extension دکھائے جانے کے بعد کام کرتی ہے اور صرف تیار نوٹیفکیشن کی بصری پیشکش کا انتظام کرتی ہے۔ یہ دونوں ایکسٹینشنز مل کر کام کر سکتی ہیں: Service Extension ایک تصویر ڈاؤن لوڈ کرتی ہے، اور Content Extension اسے ایک حسب ضرورت انٹرفیس میں دکھاتی ہے۔

ایکسٹینشن aps ڈکشنری میں mutable-content:1 وصف کے ساتھ پش نوٹیفکیشن موصول ہونے پر خود بخود فعال ہو جاتی ہے۔ iOS ایکسٹینشن کو پس منظر میں شروع کرتا ہے، اسے اصل UNNotificationRequest دیتا ہے اور ڈسپلے کے لیے تبدیل شدہ ورژن کا انتظار کرتا ہے۔

پش نوٹیفکیشنز کی فوری پروسیسنگ

UNNotificationServiceExtension اصل مواد کے ساتھ مکمل UNNotificationRequest وصول کرتی ہے۔ ایکسٹینشن UNNotificationContent کے کسی بھی فیلڈ کو تبدیل کر سکتی ہے: title, subtitle, body, userInfo, attachments اور sound۔ تبدیلیاں نوٹیفکیشن دکھائے جانے سے پہلے لاگو ہوتی ہیں۔

عام استعمال کے منظرنامے

مواد کی ڈیکرپشن — اگر پش نوٹیفکیشن میں خفیہ کردہ پے لوڈ ہو تو ایکسٹینشن ڈسپلے سے پہلے اسے ڈیکرپٹ کرتی ہے۔ میڈیا ڈاؤن لوڈ — نوٹیفکیشن میں تصویر یا ویڈیو منسلک کرنا۔ مقامی کاری — نوٹیفکیشن کے متن کو ڈیوائس کی علاقائی ترتیبات کے مطابق ڈھالنا۔ ڈیٹا افزودگی — مقامی اسٹوریج یا کیشے سے اضافی معلومات شامل کرنا۔

Apple کے مطابق، ایپس میں سب سے عام منظرنامہ بھرپور میڈیا نوٹیفکیشنز کے لیے تصویر ڈاؤن لوڈ ہے۔ سرور پے لوڈ میں تصویر کا URL بھیجتا ہے، ایکسٹینشن اسے ایک عارضی ڈائریکٹری میں ڈاؤن لوڈ کرتی ہے اور UNNotificationAttachment بناتی ہے، جسے سسٹم معیاری یا حسب ضرورت انٹرفیس میں دکھاتا ہے۔

متن اور عنوان میں تبدیلی

ایکسٹینشن نوٹیفکیشن کے متن کو مکمل طور پر دوبارہ لکھ سکتی ہے، عنوان بدل سکتی ہے یا ایک ذیلی عنوان شامل کر سکتی ہے۔ مثال کے طور پر، ایک میسنجر ایپ خفیہ کردہ نوٹیفکیشن وصول کر سکتی ہے، اسے ایکسٹینشن میں ڈیکرپٹ کر سکتی ہے اور پڑھنے کے قابل متن دکھا سکتی ہے۔ یا ایک خبروں کی ایپ ڈسپلے سے پہلے ذیلی عنوان میں خبر کا زمرہ شامل کر سکتی ہے۔

swift
override func didReceive(
    _ request: UNNotificationRequest,
    withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void
) {
    let content = request.content.mutableCopy()
        as! UNMutableNotificationContent
    if let imageURL = content.userInfo["media-url"]
        as? String {
        downloadAndAttach(imageURL: imageURL,
            content: content,
            handler: contentHandler)
    }
}

UNNotificationServiceExtension پروٹوکول

UNNotificationServiceExtension بنیادی کلاس ہے جس سے Service Extension وراثت پاتی ہے۔ کلاس دو لائف سائیکل طریقے متعین کرتی ہے: didReceive(_:withContentHandler:) — پروسیسنگ کا بنیادی طریقہ، اور serviceExtensionTimeWillExpire() — ٹائم آؤٹ ہینڈلر۔

طریقہ didReceive:withContentHandler:

didReceive(_:withContentHandler:) نوٹیفکیشن موصول ہونے پر کال کیا جاتا ہے۔ ایکسٹینشن ایک UNNotificationRequest اور contentHandler کلوزر وصول کرتی ہے، جسے تبدیل شدہ UNMutableNotificationContent کے ساتھ کال کرنا ضروری ہے۔ ایکسٹینشن contentHandler کو کال کرنے کی پابند ہے — اگر ایسا نہیں کرتی تو iOS ٹائم آؤٹ ختم ہونے کے بعد اصل نوٹیفکیشن دکھائے گا۔

اہم: ایکسٹینشن ایک وقت میں صرف ایک نوٹیفکیشن پروسیس کر سکتی ہے۔ اگر ایک ساتھ متعدد نوٹیفکیشنز آئیں تو iOS ہر ایک کے لیے علیحدہ ایکسٹینشن انسٹینسز بناتا ہے۔ ترتیب وار پروسیسنگ کے لیے عالمی حالت استعمال نہیں کی جا سکتی۔

طریقہ serviceExtensionTimeWillExpire:

serviceExtensionTimeWillExpire() سسٹم کے ذریعے کال کیا جاتا ہے جب باقی عملدرآمد کا وقت ختم ہونے والا ہوتا ہے۔ اس طریقے میں، آپ کو فوری طور پر contentHandler کو اس وقت تیار کسی بھی مواد کے ساتھ کال کرنا چاہیے — چاہے میڈیا فائل ڈاؤن لوڈ مکمل نہ ہوئی ہو۔ اگر آپ اس طریقے میں contentHandler کو کال نہیں کرتے، iOS اصل نوٹیفکیشن دکھائے گا۔

اس طریقے میں کم سے کم قابل قبول مواد محفوظ کرنے کی سفارش کی جاتی ہے — مثال کے طور پر، متن اور عنوان والا نوٹیفکیشن لیکن تصویر کے بغیر جس کا ڈاؤن لوڈ وقت پر مکمل نہیں ہوا۔

خفیہ کاری اور میڈیا منسلکات

UNNotificationAttachment ایک آبجیکٹ ہے جو نوٹیفکیشن میں میڈیا فائل منسلک کرنے کے لیے ایکسٹینشن کے ذریعے بنایا جاتا ہے۔ ایکسٹینشن فائل کو نیٹ ورک سے ڈاؤن لوڈ کرتی ہے، عارضی ڈائریکٹری میں محفوظ کرتی ہے اور مواد کی قسم بتاتے ہوئے UNNotificationAttachment بناتی ہے۔

ڈاؤن لوڈ کردہ فائل سے منسلکہ بنانا

UNNotificationAttachment init(identifier:url:options:) انیشیالائزر کا استعمال کرتے ہوئے بنایا جاتا ہے۔ URL کو ایکسٹینشن کے لیے قابل رسائی عارضی ڈائریکٹری میں مقامی فائل کی طرف اشارہ کرنا چاہیے۔ بنانے کے بعد، منسلکہ UNMutableNotificationContent کی attachments صف میں شامل کیا جاتا ہے۔

Apple ڈاؤن لوڈ کے لیے پس منظر کی ترتیب کے ساتھ URLSession استعمال کرنے کی سفارش کرتا ہے — معیاری URLSession استعمال کرنے پر، ڈاؤن لوڈ تھریڈ کو روکتا ہے اور 30 سیکنڈ کی حد سے وقت استعمال کرتا ہے۔ پس منظر URLSession ایکسٹینشن ختم ہونے کے بعد بھی ڈاؤن لوڈ جاری رکھتا ہے، اور نتیجہ اگلے آغاز پر استعمال کیا جا سکتا ہے۔

خفیہ کردہ پے لوڈ کو ڈیکرپٹ کرنا

اگر سرور خفیہ کردہ نوٹیفکیشن بھیجتا ہے تو ایکسٹینشن contentHandler کال کرنے سے پہلے پے لوڈ کو ڈیکرپٹ کرے۔ ڈیکرپشن میں عام طور پر Keychain یا App Group سے کلید کی درخواست کرنا، CommonCrypto کے ذریعے ڈیکرپٹ کرنا اور نوٹیفکیشن کے body یا userInfo کو تبدیل کرنا شامل ہے۔ ڈیکرپشن کی غلطی کی صورت میں، آپ کو اصل مواد کے ساتھ contentHandler کال کرنا چاہیے — تاکہ صارف کم از کم دیکھے کہ نوٹیفکیشن آیا ہے، چاہے ناقابل مطالعہ ہو۔

swift
func downloadAndAttach(
    imageURL: String,
    content: UNMutableNotificationContent,
    handler: @escaping (UNNotificationContent) -> Void
) {
    let task = URLSession.shared.dataTask(with:
        URL(string: imageURL)!) { data, _, _ in
        let url = FileManager.default
            .temporaryDirectory
            .appendingPathComponent("image.jpg")
        try? data?.write(to: url)
        let attachment = try? UNNotificationAttachment(
            identifier: "image", url: url)
        content.attachments = [attachment].compactMap { $0 }
        handler(content)
    }
    task.resume()
}

ٹائم آؤٹ اور فال بیک میکانزم

Notification Service Extension سخت وقتی حدود میں کام کرتی ہے۔ iOS ایک مقررہ عملدرآمد کا وقت مختص کرتا ہے — فعال ہونے سے تقریباً 30 سیکنڈ۔ اگر ایکسٹینشن نے اس وقت میں contentHandler کو کال نہیں کیا، سسٹم زبردستی عمل ختم کرتا ہے اور اصل نوٹیفکیشن کو بغیر تبدیلی کے دکھاتا ہے۔

گریسفل ڈیگریڈیشن حکمت عملی

کثیر سطحی فال بیک لاگو کرنے کی سفارش کی جاتی ہے: پہلے میڈیا ڈاؤن لوڈ کرنے کی کوشش کریں، کامیابی پر مکمل مواد کے ساتھ contentHandler کال کریں؛ ناکامی پر متن کے ساتھ لیکن میڈیا کے بغیر contentHandler کال کریں؛ سنگین غلطی پر اصل مواد منتقل کریں۔ یہ نقطہ نظر اس بات کی ضمانت دیتا ہے کہ صارف ہمیشہ ایک نوٹیفکیشن دیکھے گا نہ کہ خالی اسکرین۔

Apple کے مطابق، ٹائم آؤٹ کی سب سے عام وجہ سست کنکشن پر بڑی میڈیا فائلوں کا ڈاؤن لوڈ ہے۔ خطرہ کم کرنے کے لیے، سرور پر تصویر کے سائز کو بہتر بنانے کی سفارش کی جاتی ہے — مکمل ریزولوشن کے بجائے 300 KB تک کے پیش منظر بھیجیں۔ مکمل سائز کی تصاویر ایپ کھولنے پر ڈاؤن لوڈ کی جانی چاہئیں۔

کارکردگی کی نگرانی

ایکسٹینشن ٹائم آؤٹ اور غلطیوں کو ٹریک کرنے کے لیے، آپ یونیفائیڈ لاگنگ سسٹم میں تشخیصی پیغامات ریکارڈ کرنے کے لیے os_log استعمال کر سکتے ہیں۔ اگرچہ ایکسٹینشن میں براہ راست فائل لاگنگ مشکل ہے، os_log ڈویلپر ڈیوائس پر Console.app کے ذریعے کارکردگی کے تجزیہ کی اجازت دیتا ہے۔ Apple ہر didReceive کال میں میٹرکس شامل کرنے کی سفارش کرتا ہے — ڈاؤن لوڈ کا وقت، فائل کا سائز، آپریشن کا نتیجہ۔

swift
override func serviceExtensionTimeWillExpire() {
    let fallback = bestEffortContent as?
        UNMutableNotificationContent
        ?? request.content.mutableCopy()
        as! UNMutableNotificationContent
    contentHandler(fallback)
}

اکثر پوچھے گئے سوالات

سرور Notification Service Extension کو کیسے فعال کرتا ہے؟

سرور پش نوٹیفکیشن کے aps ڈکشنری میں mutable-content:1 کلید شامل کرتا ہے۔ اس پیرامیٹر کے بغیر، سسٹم ایکسٹینشن کو نظر انداز کرتا ہے اور معیاری نوٹیفکیشن دکھاتا ہے۔

کیا ایکسٹینشن mutable-content کے بغیر استعمال کی جا سکتی ہے؟

نہیں۔ mutable-content:1 Service Extension کو فعال کرنے کی لازمی شرط ہے۔ اگر کلید غائب ہے یا 0 پر سیٹ ہے تو نوٹیفکیشن ایکسٹینشن کو کال کیے بغیر دکھایا جاتا ہے۔

30 سیکنڈ کی حد سے تجاوز کرنے پر کیا ہوتا ہے؟

iOS زبردستی ایکسٹینشن ختم کرتا ہے اور بغیر تبدیلی کے اصل نوٹیفکیشن دکھاتا ہے۔ اس سے بچنے کے لیے، کم سے کم قابل قبول مواد کے ساتھ serviceExtensionTimeWillExpire() لاگو کریں۔

ایکسٹینشن میں خفیہ کاری کی کنجیاں کیسے منتقل کی جائیں؟

App Group (مشترکہ UserDefaults یا فائل) یا ایپ اور ایکسٹینشن کے درمیان مشترکہ رسائی والے Keychain کے ذریعے۔ نوٹیفکیشن پے لوڈ میں براہ راست کنجیاں منتقل کرنا محفوظ نہیں ہے۔

Service Extension میں کتنی میڈیا فائلیں منسلک کی جا سکتی ہیں؟

فی نوٹیفکیشن 4 منسلکات تک، ہر ایک 50 MB تک۔ منسلکات کا کل سائز ڈاؤن لوڈ کے وقت کو متاثر کرتا ہے — جتنی زیادہ فائلیں، ٹائم آؤٹ کا خطرہ اتنا ہی زیادہ۔

خلاصہ

  • Notification Service Extension ڈیوائس پر پش نوٹیفکیشنز کو ڈسپلے سے پہلے تبدیل کرتی ہے، متن، عنوان اور میڈیا منسلکات بدلتی ہے
  • فعال کرنے کے لیے aps ڈکشنری میں mutable-content:1 کلید ضروری ہے — اس کے بغیر ایکسٹینشن شروع نہیں ہوتی
  • بنیادی پروٹوکول UNNotificationServiceExtension پروسیسنگ کے لیے didReceive اور serviceExtensionTimeWillExpire طریقے متعین کرتا ہے
  • ایکسٹینشن نیٹ ورک سے میڈیا ڈاؤن لوڈ کر سکتی ہے، پے لوڈ ڈیکرپٹ کر سکتی ہے اور نوٹیفکیشن میں 4 منسلکات تک شامل کر سکتی ہے
  • عملدرآمد کا وقت تقریباً 30 سیکنڈ تک محدود ہے — تجاوز کرنے پر، iOS اصل نوٹیفکیشن دکھاتا ہے
  • خالی نوٹیفکیشنز سے بچنے کے لیے کثیر سطحی فال بیک کے ساتھ گریسفل ڈیگریڈیشن حکمت عملی کی سفارش کی جاتی ہے

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں