Notification Extension: मुख्य अवधारणाएँ, एक्सटेंशन के प्रकार और सेटअप

लेखक: IT Sectr प्रकाशित: 2026-03-20 पढ़ने का समय: 8 मिनट

Notification Extension एक iOS तंत्र है जो पुश नोटिफिकेशन को उपयोगकर्ता को दिखाने से पहले उनकी सामग्री और स्वरूप को संशोधित करने की अनुमति देता है। एक्सटेंशन ऑपरेटिंग सिस्टम की ओर एक अलग प्रक्रिया में काम करते हैं: UNNotificationServiceExtension इनकमिंग सामग्री को प्रोसेस करता है, जबकि UNNotificationContentExtension इंटरफ़ेस का प्रबंधन करता है। Apple Developer Documentation, 2026 के अनुसार, Service Extension को नोटिफिकेशन दिखाने से पहले कार्यों को पूरा करने के लिए 30 सेकंड तक मिलते हैं। यह सीमा अटैचमेंट डाउनलोड करने या डेटा डिक्रिप्ट करने के दौरान महत्वपूर्ण है।

मुख्य बातें

  • Service Extension — नोटिफिकेशन दिखाने से पहले उसे इंटरसेप्ट करता है, टेक्स्ट बदलने, मीडिया जोड़ने और 30 सेकंड की सीमा के साथ डेटा डिक्रिप्ट करने की अनुमति देता है।
  • Content Extension — कस्टम UI, बटन और स्टोरीबोर्ड या SwiftUI के माध्यम से टैप हैंडलिंग के साथ एक कस्टम नोटिफिकेशन इंटरफ़ेस बनाता है।
  • मीडिया अटैचमेंट — चित्र, वीडियो और ऑडियो Content Extension को भेजने से पहले Service Extension में UNNotificationAttachment के माध्यम से जोड़े जाते हैं।
  • पंजीकरण — दोनों एक्सटेंशन Info.plist में अलग-अलग टार्गेट के रूप में नोटिफिकेशन श्रेणियों और NSExtensionPointIdentifier के साथ पंजीकृत होते हैं।
  • सीमाएँ — एक्सटेंशन की मुख्य एप्लिकेशन तक पहुँच नहीं होती, वे 50 MB मेमोरी सीमा के साथ एक अलग सैंडबॉक्स में काम करते हैं।

Notification Extension क्या है

Notification Extension एक iOS सॉफ़्टवेयर घटक है जो पुश नोटिफिकेशन के मानक व्यवहार को सामग्री संशोधित करने और इंटरफ़ेस कस्टमाइज़ करने की क्षमता जोड़कर विस्तारित करता है। सामान्य नोटिफिकेशन के विपरीत जो सिस्टम द्वारा मानक प्रारूप में प्रदर्शित होते हैं, एक्सटेंशन डेवलपर को प्रदर्शन से पहले सामग्री को प्रभावित करने और एक अद्वितीय उपयोगकर्ता इंटरफ़ेस बनाने की अनुमति देते हैं।

नोटिफिकेशन एक्सटेंशन के दो प्रकार

Apple विभिन्न उद्देश्यों के लिए दो प्रकार के Notification Extension प्रदान करता है: UNNotificationServiceExtension इनकमिंग पेलोड प्रोसेसिंग का कार्यभार संभालता है, जबकि UNNotificationContentExtension प्रदर्शन का प्रबंधन करता है। Service Extension नोटिफिकेशन दिखाने से पहले चलता है और Apple Developer Documentation के अनुसार 30 सेकंड तक का सीमित निष्पादन समय रखता है। Content Extension उपयोगकर्ता के नोटिफिकेशन के साथ इंटरैक्ट करने के बाद सक्रिय होता है और एक कस्टम व्यू प्रदर्शित करता है।

मानक नोटिफिकेशन से अंतर

एक मानक iOS पुश नोटिफिकेशन सिस्टम द्वारा JSON पेलोड के alert, title और subtitle फ़ील्ड के आधार पर स्वचालित रूप से प्रदर्शित किया जाता है। Notification Extension नियंत्रण को इंटरसेप्ट करता है: Service Extension कच्चा पेलोड प्राप्त करता है, उसे संशोधित करता है और सिस्टम को प्रदर्शन के लिए भेजता है। Content Extension मानक बैनर को किसी भी नियंत्रण तत्व के साथ कस्टम इंटरफ़ेस से बदल देता है।

एक्सटेंशन का जीवनचक्र

जब डिवाइस mutable-content: 1 कुंजी के साथ एक पुश नोटिफिकेशन प्राप्त करता है, तो सिस्टम एक अलग प्रक्रिया में Service Extension लॉन्च करता है। एक्सटेंशन प्रक्रिया मुख्य एप्लिकेशन से अलग होती है और 50 MB मेमोरी सीमा के साथ अपना स्वयं का सैंडबॉक्स रखती है। प्रोसेसिंग पूरी होने के बाद, एक्सटेंशन completion handler को कॉल करता है, संशोधित UNNotificationContent को सिस्टम को प्रदर्शन के लिए भेजता है।

UNNotificationServiceExtension: सामग्री संशोधन

UNNotificationServiceExtension पुश नोटिफिकेशन को उपयोगकर्ता को दिखाने से पहले प्रोग्रामेटिक रूप से संशोधित करने का प्राथमिक उपकरण है। एक्सटेंशन स्वचालित रूप से सक्रिय होता है जब ऐसा नोटिफिकेशन प्राप्त होता है जिसके पेलोड में mutable-content: 1 फ़्लैग सेट होता है। 30 सेकंड के भीतर, एक्सटेंशन मीडिया अटैचमेंट डाउनलोड कर सकता है, टेक्स्ट बदल सकता है, एन्क्रिप्टेड डेटा डिक्रिप्ट कर सकता है या सामग्री को समृद्ध कर सकता है।

UNNotificationServiceExtension प्रोटोकॉल के तरीके

एक्सटेंशन UNNotificationServiceExtension प्रोटोकॉल से दो मुख्य तरीकों को लागू करता है। didReceive विधि कच्चे UNNotificationRequest के साथ इनकमिंग अनुरोध प्राप्त करती है और नए UNNotificationContent के साथ completion handler के माध्यम से संशोधन की अनुमति देती है। serviceExtensionTimeWillExpire विधि टाइमआउट से एक सेकंड पहले सिस्टम द्वारा कॉल की जाती है — इसमें प्रोसेसिंग पूरी करनी होती है और वर्तमान (संभवतः आंशिक) परिणाम भेजना होता है।

उदाहरण: नोटिफिकेशन में छवि जोड़ना

एक परिदृश्य पर विचार करें जहाँ सर्वर एक कस्टम फ़ील्ड में छवि URL के साथ पुश भेजता है। Service Extension इस छवि को नेटवर्क पर डाउनलोड करता है, UNNotificationAttachment बनाता है और इसे सामग्री में जोड़ता है। UNNotificationAttachment एक स्थानीय छवि, वीडियो या ऑडियो फ़ाइल स्वीकार करता है और स्वचालित रूप से इसे एक्सटेंशन के सैंडबॉक्स में कॉपी करता है। अटैचमेंट बनाने के बाद, एक्सटेंशन अपडेटेड सामग्री सिस्टम को भेजता है।

swift
class NotificationService: UNNotificationServiceExtension {

    override func didReceive(_ request: UNNotificationRequest,
        withContentHandler contentHandler:
        @escaping (UNNotificationContent) -> Void) {

        let userInfo = request.content.userInfo
        guard let imageURL = URL(string: userInfo["image-url"] as! String)
        else { contentHandler(request.content); return }

        let attachment = try! UNNotificationAttachment(
            identifier: "image", url: imageURL,
            options: [UNNotificationAttachmentOptionsTypeHintKey: "jpg"])

        let modifiedContent = request.content.mutableCopy()
            as! UNMutableNotificationContent
        modifiedContent.attachments = [attachment]
        contentHandler(modifiedContent)
    }

    override func serviceExtensionTimeWillExpire() {
        contentHandler?(bestAttemptContent ?? request.content)
    }
}

कैशिंग और पुन: उपयोग

जब समान अटैचमेंट वाले नोटिफिकेशन बार-बार भेजे जाते हैं, तो डाउनलोड की गई फ़ाइलों को डिवाइस पर कैश करने की अनुशंसा की जाती है। FileManager एक्सटेंशन के कैश निर्देशिका तक पहुँच प्रदान करता है, जो लॉन्च के बीच बनी रहती है। इससे बाद के नोटिफिकेशन का प्रोसेसिंग समय कम होता है और नेटवर्क लोड घटता है। Apple के अनुसार, कैशिंग प्रोसेसिंग समय को पूर्ण डाउनलोड के बजाय 2–5 सेकंड तक कम कर सकती है।

UNNotificationContentExtension: कस्टम इंटरफ़ेस

UNNotificationContentExtension मानक नोटिफिकेशन बैनर को Interface Builder या SwiftUI में बनाए गए कस्टम इंटरफ़ेस से बदलने की अनुमति देता है। एक्सटेंशन तब सक्रिय होता है जब उपयोगकर्ता नोटिफिकेशन पर कोई क्रिया करता है: टैप करना, नीचे स्वाइप करना या 3D Touch। Content Extension वह सामग्री प्राप्त करता है जो पहले से Service Extension द्वारा प्रोसेस की जा चुकी है और इसे कस्टम व्यू में प्रदर्शित करता है।

Storyboard और नोटिफिकेशन श्रेणियाँ

प्रत्येक Content Extension Info.plist के माध्यम से एक या अधिक नोटिफिकेशन श्रेणियों से जुड़ा होता है। श्रेणी सर्वर पर APNS पेलोड में category फ़ील्ड द्वारा परिभाषित की जाती है। सिस्टम प्राप्त नोटिफिकेशन की श्रेणी के आधार पर स्वचालित रूप से उपयुक्त एक्सटेंशन का चयन करता है। इंटरफ़ेस मानक UIKit घटकों या SwiftUI View का उपयोग करके storyboard के माध्यम से बनाया जाता है।

उपयोगकर्ता क्रियाओं को संभालना

Content Extension UNNotificationAction में परिभाषित कस्टम बटन और टैप हैंडलर का समर्थन करता है। UNNotificationAction श्रेणी पंजीकरण चरण में बनाया जाता है और UNTextInputNotificationAction के माध्यम से टेक्स्ट इनपुट का समर्थन कर सकता है। जब उपयोगकर्ता एक बटन दबाता है, तो एक्सटेंशन क्रिया पहचानकर्ता के साथ didReceive कॉलबैक प्राप्त करता है और संबंधित तर्क निष्पादित कर सकता है — URL खोलना, सर्वर को अनुरोध भेजना या इंटरफ़ेस अपडेट करना।

प्रदर्शन सीमाएँ

Content Extension अपने स्वयं के रन लूप और लगभग 50 MB की मेमोरी सीमा के साथ एक अलग प्रक्रिया में काम करता है। एक्सटेंशन का प्रदर्शन महत्वपूर्ण है क्योंकि सिस्टम वॉचडॉग सीमा पार होने पर प्रक्रिया को समाप्त कर देता है। Content Extension के अंदर भारी गणना, बड़ी छवियाँ लोड करने और लंबे नेटवर्क अनुरोधों से बचने की अनुशंसा की जाती है।

मीडिया अटैचमेंट और UNNotificationAttachment

UNNotificationAttachment एक ऑब्जेक्ट है जो पुश नोटिफिकेशन में मीडिया फ़ाइल जोड़ता है: छवि, वीडियो, ऑडियो या GIF। अटैचमेंट एक स्थानीय फ़ाइल URL से बनाया जाता है जो एक्सटेंशन के सैंडबॉक्स में होना चाहिए। अटैचमेंट का अधिकतम आकार 10 MB से अधिक नहीं होना चाहिए, अन्यथा सिस्टम इसे बनाते समय अस्वीकार कर देगा।

समर्थित प्रारूप

Apple मीडिया अटैचमेंट के लिए सीमित प्रारूपों का समर्थन करता है। छवियाँ — JPEG, PNG, GIF (एनिमेटेड सहित), TIFF। वीडियो — MPEG, MP4, MOV अधिकतम 30 सेकंड की अवधि के साथ। ऑडियो — MP3, AAC, WAV, CAF। प्रत्येक प्रारूप के लिए UNNotificationAttachmentOptionsTypeHintKey के माध्यम से प्रकार निर्दिष्ट किया जा सकता है, जो सिस्टम को फ़ाइल को सही ढंग से प्रोसेस करने में मदद करता है।

नेटवर्क से अटैचमेंट डाउनलोड करना

चूँकि पुश पेलोड में केवल URL होता है, फ़ाइल स्वयं नहीं, अटैचमेंट डाउनलोड Service Extension के अंदर किया जाना चाहिए। अधिकतम डाउनलोड समय 30 सेकंड तक सीमित है, इसलिए न्यूनतम सेटिंग्स के साथ URLSession का उपयोग करने और कमजोर सिग्नल पर डाउनलोड अक्षम करने की अनुशंसा की जाती है। यदि अटैचमेंट समय पर लोड नहीं होता है, तो नोटिफिकेशन बिना मीडिया के प्रदर्शित होता है — यह डिफ़ॉल्ट सिस्टम व्यवहार है।

Swift में कार्यान्वयन उदाहरण

आइए एक पूर्ण Notification Extension उदाहरण देखें जो एक छवि डाउनलोड करता है, उसे सहेजता है और नोटिफिकेशन में जोड़ता है। NotificationService UNNotificationServiceExtension से इनहेरिट करता है और didReceive विधि को ओवरराइड करता है। उदाहरण वैकल्पिक फ़ील्ड को संभालने, अटैचमेंट बनाने और संशोधित सामग्री के साथ completion handler को कॉल करने को दर्शाता है।

swift
import UserNotifications

class NotificationService: UNNotificationServiceExtension {

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

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

        guard let attachmentURLString =
            bestAttemptContent?.userInfo["attachment-url"] as? String,
            let url = URL(string: attachmentURLString)
        else {
            contentHandler(request.content)
            return
        }

        URLSession.shared.downloadTask(with: url) {
            [weak self] localURL, _, error in
            guard let localURL = localURL, error == nil
            else {
                contentHandler(request.content)
                return
            }
            let attachment = try! UNNotificationAttachment(
                identifier: "media", url: localURL)
            self?.bestAttemptContent?.attachments = [attachment]
            contentHandler(self?.bestAttemptContent
                ?? request.content)
        }.resume()
    }

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

एक्सटेंशन के लिए Info.plist कॉन्फ़िगर करना

एक्सटेंशन के सही ढंग से काम करने के लिए, Info.plist में नोटिफिकेशन श्रेणियाँ पंजीकृत करना आवश्यक है। NSExtensionPointIdentifier कुंजी Service Extension के लिए com.apple.usernotifications.service या Content Extension के लिए com.apple.usernotifications.content पर सेट की जाती है। श्रेणियाँ AppDelegate में UNUserNotificationCenter के माध्यम से एप्लिकेशन लॉन्च के समय परिभाषित की जाती हैं, और एक्सटेंशन केवल पेलोड में मेल खाने वाली श्रेणी वाले नोटिफिकेशन के लिए सक्रिय होता है।

अक्सर पूछे जाने वाले प्रश्न

Service Extension और Content Extension में क्या अंतर है?

Service Extension नोटिफिकेशन दिखाने से पहले सामग्री संशोधित करता है — मीडिया जोड़ता है, टेक्स्ट बदलता है, डेटा डिक्रिप्ट करता है। Content Extension उपयोगकर्ता इंटरैक्शन के बाद नोटिफिकेशन इंटरफ़ेस को कस्टम इंटरफ़ेस से बदलता है। Service Extension प्रदर्शन से पहले काम करता है, Content Extension बाद में।

Service Extension में प्रोसेसिंग के लिए कितना समय दिया जाता है?

सिस्टम didReceive में कोड निष्पादन के लिए 30 सेकंड आवंटित करता है। यदि प्रोसेसिंग इस समय के भीतर पूरी नहीं होती है, तो serviceExtensionTimeWillExpire कॉल किया जाता है, जहाँ वर्तमान परिणाम भेजना होता है। अटैचमेंट डाउनलोड को ध्यान में रखते हुए 10–15 सेकंड के भीतर रहने की अनुशंसा की जाती है।

क्या Content Extension में SwiftUI का उपयोग किया जा सकता है?

हाँ, SwiftUI iOS 16 से Content Extension में समर्थित है। View को UIHostingController में लपेटा जाता है और storyboard में जोड़ा जाता है। हालाँकि, मेमोरी सीमाओं के कारण, SwiftUI का उपयोग केवल न्यूनतम तत्वों वाले सरल इंटरफ़ेस के लिए करने की अनुशंसा की जाती है।

अटैचमेंट डाउनलोड त्रुटियों को कैसे संभालें?

डाउनलोड त्रुटि या समय समाप्ति की स्थिति में, बिना अटैचमेंट के मूल सामग्री के साथ completion handler को कॉल करें। सिस्टम नोटिफिकेशन प्रदर्शित करेगा बिना मीडिया के मानक रूप में। निदान के लिए OSLog के माध्यम से त्रुटियों को लॉग करें, लेकिन नोटिफिकेशन प्रदर्शन को अवरुद्ध न करें।

Notification Extension की मेमोरी सीमाएँ क्या हैं?

एक्सटेंशन लगभग 50 MB की सीमा के साथ एक अलग प्रक्रिया में काम करता है। इससे अधिक होने पर, सिस्टम वॉचडॉग के माध्यम से प्रक्रिया को समाप्त कर देता है। बड़ी फ़ाइलें लोड करने, मेमोरी में छवियाँ संग्रहीत करने और URLSession के साथ काम करते समय लीक से बचें।

सारांश

  • Notification Extension — पुश नोटिफिकेशन को संशोधित करने के लिए एक iOS तंत्र, जिसमें Service Extension (सामग्री) और Content Extension (इंटरफ़ेस) शामिल हैं।
  • Service Extension 30 सेकंड की सीमा के साथ नोटिफिकेशन प्रदर्शन से पहले पेलोड प्रोसेस करता है, मीडिया अटैचमेंट जोड़ सकता है और डेटा डिक्रिप्ट कर सकता है।
  • Content Extension इंटरैक्टिव बटन के समर्थन के साथ UIKit या SwiftUI के माध्यम से मानक बैनर को कस्टम इंटरफ़ेस से बदलता है।
  • UNNotificationAttachment नोटिफिकेशन में छवियाँ, वीडियो और ऑडियो जोड़ता है, JPEG, PNG, MP4, MP3 और अन्य प्रारूपों का समर्थन करता है।
  • एक्सटेंशन पंजीकरण सक्रियण के लिए NSExtensionPointIdentifier और नोटिफिकेशन श्रेणियों के साथ Info.plist के माध्यम से किया जाता है।
  • सीमाएँ — 50 MB मेमोरी सीमा, मुख्य एप्लिकेशन तक पहुँच के बिना अलग सैंडबॉक्स, सीमित निष्पादन समय।
  • Notification Extension समृद्ध उपयोगकर्ता नोटिफिकेशन बनाने के लिए एक महत्वपूर्ण उपकरण है, जो iOS में पुश संचार की सहभागिता और कार्यक्षमता बढ़ाता है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें