Notification Service Extension: یہ کیا ہے، iOS پر ظاہر کرنے سے پہلے مواد کی پروسیسنگ

مصنف: IT Sectr اشاعت: 2026-03-21 مطالعے کا وقت: 8 منٹ

Notification Service Extension ایک iOS ایکسٹینشن ہے جو صارف کو دکھائے جانے سے پہلے push اطلاع کو روکتی ہے اور مواد میں ترمیم کرنے کی اجازت دیتی ہے۔ ایکسٹینشن خفیہ کردہ ڈیٹا کو ڈیکرپٹ کر سکتی ہے، میڈیا منسلکات ڈاؤن لوڈ کر سکتی ہے، متن تبدیل کر سکتی ہے یا حسب ضرورت فیلڈز شامل کر سکتی ہے۔ Apple Developer, 2025 کے مطابق، Notification Service Extension کے پاس پس منظر میں کام مکمل کرنے کے لیے 30 سیکنڈ تک کا وقت ہے۔

اہم نکات

  • Notification Service Extension — ظاہر کرنے سے پہلے push اطلاعوں پر کارروائی کرنے کے لیے iOS ایکسٹینشن۔
  • ایکسٹینشن UNNotificationServiceExtension سے وراثت حاصل کرتی ہے اور didReceive طریقہ کو نافذ کرتی ہے۔
  • ڈیٹا ڈاؤن لوڈ اور پروسیسنگ کے لیے 30 سیکنڈ تک پس منظر میں عملدرآمد۔
  • بنیادی استعمال کے معاملات: پے لوڈ ڈیکرپشن، تصاویر اور ویڈیوز ڈاؤن لوڈ، مواد کی توثیق۔
  • ایکسٹینشن اطلاع کے ظاہر ہونے میں تاخیر کر سکتی ہے یا contentHandler کے ذریعے مکمل طور پر منسوخ کر سکتی ہے۔

Notification Service Extension کیا ہے

Notification Service Extension iOS میں ایک ایپ ایکسٹینشن ہے جو push اطلاع ظاہر ہونے سے پہلے چلتی ہے۔ یہ سرور کو کم سے کم پے لوڈ بھیجنے کی اجازت دیتی ہے جبکہ ایکسٹینشن اسے مواد سے بھرپور کرتی ہے: تصاویر ڈاؤن لوڈ کرنا، ڈیٹا ڈیکرپٹ کرنا، متن تبدیل کرنا۔ صارف پہلے سے پروسیس شدہ اطلاع دیکھتا ہے۔

یہ کیسے کام کرتا ہے

جب iOS کو push اطلاع ملتی ہے، نظام چیک کرتا ہے کہ آیا ایپ کے لیے کوئی ایکسٹینشن موجود ہے۔ اگر ایکسٹینشن رجسٹرڈ ہے، iOS اسے پس منظر کے عمل میں شروع کرتا ہے اور didReceive(_:withContentHandler:) طریقہ کے ذریعے اطلاع کا مواد منتقل کرتا ہے۔ ایکسٹینشن مواد پر کارروائی کرتی ہے اور تبدیل شدہ مواد کے ساتھ contentHandler کو کال کرتی ہے۔ اگر ایکسٹینشن 30 سیکنڈ کے اندر مکمل نہیں ہوتی، نظام اصل اطلاع ظاہر کرتا ہے۔

Service Extension کب استعمال کریں

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

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

حدود اور عملدرآمد کا وقت

Notification Service Extension محدود ماحول میں کام کرتی ہے۔ زیادہ سے زیادہ عملدرآمد کا وقت 30 سیکنڈ ہے۔ ایکسٹینشن کی مرکزی ایپ اسٹوریج (App Group کے علاوہ) تک رسائی نہیں ہے۔ ایکسٹینشن کا سائز 50 MB تک محدود ہے۔ وقت ختم ہونے پر، نظام اصل مواد کے ساتھ contentHandler کو کال کرتا ہے اور تمام تبدیلیاں ضائع ہو جاتی ہیں۔

ایکسٹینشن بنانا اور Info.plist ترتیب دینا

Xcode میں، Notification Service Extension کو Notification Service Extension قسم کا نیا target بنا کر شامل کیا جاتا ہے۔ Xcode ایک ٹیمپلیٹ NotificationService کلاس تیار کرتا ہے جو UNNotificationServiceExtension سے وراثت حاصل کرتی ہے، دو طریقوں کے ساتھ: didReceive اور serviceExtensionTimeWillExpire۔

پروجیکٹ میں target شامل کرنا

Xcode میں، File → New → Target → Notification Service Extension منتخب کریں۔ ایک نام درج کریں (مثال کے طور پر، PushNotificationService) اور Swift زبان منتخب کریں۔ یقینی بنائیں کہ target مرکزی ایپ میں شامل ہے اور اس کے پاس درست دستخط ہے۔ تخلیق کے بعد، NotificationService.swift کلاس بنیادی نفاذ کے ساتھ تیار ہوگی۔

ایکسٹینشن کے Info.plist کا ڈھانچہ

ایکسٹینشن کے Info.plist میں NSExtension کلید ہوتی ہے جس میں ذیلی کلیاں NSExtensionPointIdentifier (com.apple.usernotifications.service) اور NSExtensionPrincipalClass (آپ کے کنٹرولر کا نام) ہوتی ہیں۔ اضافی طور پر، ایکسٹینشن ایکٹیویشن قواعد کے ساتھ NSExtensionAttributes متعین کیے جا سکتے ہیں۔ Xcode یہ ترتیبات خودکار طور پر تیار کرتا ہے۔

بنیادی ایکسٹینشن کی مثال

بنیادی نفاذ didReceive کو اوور رائڈ کرتا ہے، اطلاع کے مواد میں ترمیم کرتا ہے اور contentHandler کو کال کرتا ہے۔ اگر پروسیسنگ میں بہت زیادہ وقت لگتا ہے، serviceExtensionTimeWillExpire کو کال کیا جاتا ہے، جہاں آپ کو موجودہ حالت کے ساتھ کام مکمل کرنا ہوتا ہے۔

swift
import UserNotifications

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(
        request: UNNotificationRequest,
        withContentHandler handler: @escaping (UNNotificationContent) -> Void
    ) {
        contentHandler = handler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

        if let bestAttemptContent = bestAttemptContent {
            bestAttemptContent.title = "[کارروائی ہوگئی] \(bestAttemptContent.title)"
            contentHandler?(bestAttemptContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        if let contentHandler = contentHandler,
           let bestAttemptContent = bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }
}

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

Service Extension کے اہم استعمالوں میں سے ایک ڈیوائس پر اطلاع کے مواد کو ڈیکرپٹ کرنا ہے۔ سرور ایک خفیہ کردہ پے لوڈ بھیجتا ہے اور ایکسٹینشن Keychain یا App Group میں ذخیرہ شدہ کلید کا استعمال کرتے ہوئے اسے ڈیکرپٹ کرتی ہے۔ یہ یقینی بناتا ہے کہ منتقلی کے دوران مواد کو روکا نہیں جا سکتا۔

محفوظ ترسیل کا فن تعمیر

سرور ہم آہنگ کلید (AES-256) کا استعمال کرتے ہوئے اطلاع کے باڈی کو خفیہ کرتا ہے۔ خفیہ کاری کی کلید کلائنٹ اور سرور کے درمیان پہلے سے طے پاتی ہے۔ ایکسٹینشن پے لوڈ کے ڈیٹا فیلڈ میں خفیہ کردہ سٹرنگ وصول کرتی ہے، اسے ڈیکرپٹ کرتی ہے اور اطلاع کے فیلڈز میں داخل کرتی ہے۔ صارف کی کلید تصدیق کے بعد Keychain سے حاصل کی جا سکتی ہے۔

swift
override func didReceive(
    request: UNNotificationRequest,
    withContentHandler handler: @escaping (UNNotificationContent) -> Void
) {
    guard let content = request.content.mutableCopy()
        as? UNMutableNotificationContent else {
        handler(request.content)
        return
    }

    guard let encryptedData = content.userInfo["encrypted_data"]
        as? String else {
        handler(content)
        return
    }

    let decrypted = CryptoService.decrypt(encryptedData)
    content.body = decrypted.body
    content.title = decrypted.title
    handler(content)
}

محفوظ کلید ذخیرہ

ڈیکرپشن کلید کو ایکسٹینشن کوڈ یا NSUserDefaults میں ذخیرہ نہیں کرنا چاہیے۔ App Group کے ذریعے رسائی کے ساتھ iOS Keychain استعمال کریں تاکہ ایپ اور ایکسٹینشن دونوں کلید پڑھ سکیں۔ کلائنٹ پر کلید کی تخلیق کے لیے AES-256-GCM الگورتھم کے ساتھ Security.framework استعمال کریں۔

میڈیا منسلکات ڈاؤن لوڈ اور منسلک کرنا

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

میڈیا ڈاؤن لوڈ اور منسلک کرنے کا عمل

ایکسٹینشن اطلاع کے پے لوڈ فیلڈ سے تصویر کا URL وصول کرتی ہے۔ URLSession کا استعمال کرتے ہوئے، ایکسٹینشن فائل کو عارضی ڈائریکٹری میں ڈاؤن لوڈ کرتی ہے۔ ڈاؤن لوڈ مکمل ہونے کے بعد، مقامی URL کے ساتھ UNNotificationAttachment بنایا جاتا ہے۔ منسلکہ تبدیل شدہ مواد میں منتقل کیا جاتا ہے۔ iOS خود بخود معیاری انٹرفیس یا Notification Content Extension میں تصویر ظاہر کرتا ہے۔

swift
private func downloadAndAttachMedia(
    content: UNMutableNotificationContent,
    mediaUrl: String,
    handler: @escaping (UNNotificationContent) -> Void
) {
    guard let url = URL(string: mediaUrl) else {
        handler(content)
        return
    }

    let task = URLSession.shared.downloadTask(with: url) { localUrl, _, error in
        guard let localUrl = localUrl, error == nil else {
            handler(content)
            return
        }

        let attachment = try? UNNotificationAttachment(
            identifier: "media",
            url: localUrl,
            options: nil
        )

        if let attachment = attachment {
            content.attachments = [attachment]
        }
        handler(content)
    }
    task.resume()
}

تعاون یافتہ میڈیا فارمیٹس

iOS اطلاعات میں ظاہر کرنے کے لیے درج ذیل فارمیٹس کی حمایت کرتا ہے: JPEG، PNG، GIF (جامد)، 50 MB تک MPEG-4 ویڈیو۔ آڈیو فائلوں کے لیے، MP3، AAC اور ALAC تعاون یافتہ ہیں۔ اہم: تمام میڈیا فائلیں 30 سیکنڈ کی حد کے اندر ڈاؤن لوڈ کی جانی چاہئیں۔ بڑی فائلوں کے لیے، سرور سائیڈ کراپنگ یا تدریجی لوڈنگ کی سفارش کی جاتی ہے۔

وقت کا انتظام اور فال بیک منظرنامے

30 سیکنڈ کی حد کا انتظام Notification Service Extension تیار کرتے وقت ایک اہم کام ہے۔ اگر ایکسٹینشن وقت پر پروسیسنگ مکمل نہیں کرتی، نظام serviceExtensionTimeWillExpire کو کال کرتا ہے اور اصل مواد ظاہر کرتا ہے۔ ہر قسم کی پروسیسنگ کے لیے فال بیک منظرنامے فراہم کیے جانے چاہئیں۔

ترجیحی حکمت عملی

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

غلطیوں پر فال بیک

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

swift
override func didReceive(
    request: UNNotificationRequest,
    withContentHandler handler: @escaping (UNNotificationContent) -> Void
) {
    let content = (request.content.mutableCopy()
        as? UNMutableNotificationContent) ?? request.content

    // اہم کام: ڈیکرپشن
    var decryptedContent = tryDecryptPayload(content)

    // اختیاری کام: میڈیا
    guard let mediaUrl = decryptedContent.userInfo["media_url"]
        as? String else {
        handler(decryptedContent)
        return
    }

    downloadAndAttachMedia(
        content: decryptedContent,
        mediaUrl: mediaUrl,
        handler: handler
    )
}

ایکسٹینشن کی جانچ

Notification Service Extension کی جانچ کرنے کے لیے، Xcode استعمال کریں: ایکسٹینشن target منتخب کریں، سمیلیٹر پر چلائیں اور ٹرمینل یا Firebase Console کے ذریعے push اطلاع بھیجیں۔ os_log کے ذریعے پروسیسنگ کے ہر مرحلے کو لاگ کریں — اس سے ٹائمنگ اور ڈاؤن لوڈ کے مسائل کی تشخیص میں مدد ملتی ہے۔

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

اگر ایکسٹینشن 30 سیکنڈ میں مکمل نہ ہو تو کیا ہوتا ہے؟

سسٹم serviceExtensionTimeWillExpire کو کال کرتا ہے، پھر اصل اطلاع بغیر تبدیلی کے ظاہر کرتا ہے۔ تمام ڈاؤن لوڈ کردہ فائلیں اور تبدیلیاں ضائع کر دی جاتی ہیں۔

کیا ایکسٹینشن سے اطلاع کا ظاہر ہونا منسوخ کیا جا سکتا ہے؟

ہاں، اگر آپ خالی مواد (خالی فیلڈز کے ساتھ UNNotificationContent) کے ساتھ contentHandler کو کال کرتے ہیں، تو اطلاع ظاہر نہیں ہوگی۔ یہ سپیم اطلاعات یا غلط ڈیٹا کو فلٹر کرنے کے لیے استعمال ہوتا ہے۔

میڈیا ڈاؤن لوڈ کے لیے اجازت نامہ ٹوکن کیسے منتقل کیا جائے؟

ٹوکن اطلاع کے پے لوڈ کے userInfo میں منتقل کیا جا سکتا ہے یا App Group کے ذریعے Keychain سے حاصل کیا جا سکتا ہے۔ ایکسٹینشن UserDefaults میں ٹوکن ذخیرہ کرنے کی سفارش نہیں کی جاتی۔

کیا ایکسٹینشن کے لیے خصوصی سرٹیفکیٹ ترتیب کی ضرورت ہے؟

ایکسٹینشن پر اسی ڈویلپر سرٹیفکیٹ سے دستخط ہونے چاہئیں جو مرکزی ایپ کے لیے استعمال ہوتا ہے۔ پروڈکشن کے لیے، Push Notifications کی صلاحیت کے ساتھ ایک پروڈکشن سرٹیفکیٹ درکار ہے۔

اصلی ڈیوائس پر ایکسٹینشن کو کیسے ڈیبگ کیا جائے؟

ڈیوائس کو Xcode سے منسلک کریں، رن اسکیم میں ایکسٹینشن target منتخب کریں اور Firebase Console کے ذریعے push اطلاع بھیجیں۔ ایکسٹینشن میں بریک پوائنٹس مرکزی ایپ کی طرح کام کرتے ہیں۔

خلاصہ

  • Notification Service Extension — ظاہر کرنے سے پہلے push اطلاعوں کی پس منظر میں پروسیسنگ کے لیے iOS ایکسٹینشن۔
  • زیادہ سے زیادہ عملدرآمد کا وقت 30 سیکنڈ ہے، جس کے بعد نظام اصل مواد ظاہر کرتا ہے۔
  • بنیادی استعمال کے معاملات: پے لوڈ ڈیکرپشن، میڈیا ڈاؤن لوڈ، مواد کی توثیق اور مقامی کاری۔
  • ایکسٹینشن UNNotificationServiceExtension سے didReceive اور serviceExtensionTimeWillExpire طریقوں کے ساتھ وراثت حاصل کرتی ہے۔
  • میڈیا ڈاؤن لوڈ کے لیے URLSession استعمال کریں، کلید ذخیرہ کرنے کے لیے iOS Keychain۔
  • ہمیشہ فال بیک فراہم کریں — غلطیوں پر اصل مواد کے ساتھ contentHandler کو کال کریں۔
  • اطلاعات پر مکمل کنٹرول کے لیے Service Extension کو Content Extension کے ساتھ جوڑیں۔

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

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

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

مزید پڑھیں