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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

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

यह भी पढ़ें