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 सेकंड तक बैकग्राउंड निष्पादन उपलब्ध।
  • मुख्य उपयोग केस: payload डिक्रिप्शन, इमेज और वीडियो डाउनलोड, सामग्री सत्यापन।
  • एक्सटेंशन सूचना प्रदर्शन में देरी कर सकता है या contentHandler के माध्यम से इसे पूरी तरह रद्द कर सकता है।

Notification Service Extension क्या है

Notification Service Extension iOS में एक ऐप एक्सटेंशन है जो push सूचना प्रदर्शित होने से पहले चलता है। यह सर्वर को न्यूनतम payload भेजने की अनुमति देता है जबकि एक्सटेंशन इसे सामग्री से समृद्ध करता है: इमेज डाउनलोड करना, डेटा डिक्रिप्ट करना, टेक्स्ट बदलना। उपयोगकर्ता पहले से प्रोसेस्ड सूचना देखता है।

यह कैसे काम करता है

जब iOS को push सूचना प्राप्त होती है, सिस्टम जांचता है कि ऐप के लिए कोई एक्सटेंशन मौजूद है या नहीं। यदि एक्सटेंशन पंजीकृत है, iOS इसे बैकग्राउंड प्रक्रिया में शुरू करता है और didReceive(_:withContentHandler:) मेथड के माध्यम से सूचना सामग्री प्रेषित करता है। एक्सटेंशन सामग्री प्रोसेस करता है और संशोधित सामग्री के साथ contentHandler को कॉल करता है। यदि एक्सटेंशन 30 सेकंड के भीतर पूरा नहीं होता, सिस्टम मूल सूचना प्रदर्शित करता है।

Service Extension का उपयोग कब करें

Service Extension उन परिदृश्यों में आवश्यक है जहां सूचना सामग्री को डिवाइस पर प्रोसेसिंग की आवश्यकता होती है। सुरक्षित संचार: सर्वर एन्क्रिप्टेड payload भेजता है, एक्सटेंशन इसे स्थानीय रूप से डिक्रिप्ट करता है। रिच मीडिया सूचनाएं: सर्वर इमेज 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)
        }
    }
}

एन्क्रिप्टेड payload को डिक्रिप्ट करना

Service Extension के प्रमुख उपयोगों में से एक डिवाइस पर सूचना सामग्री को डिक्रिप्ट करना है। सर्वर एक एन्क्रिप्टेड payload भेजता है और एक्सटेंशन इसे Keychain या App Group में संग्रहीत कुंजी का उपयोग करके डिक्रिप्ट करता है। यह सुनिश्चित करता है कि ट्रांसमिशन के दौरान सामग्री को इंटरसेप्ट नहीं किया जा सकता।

सुरक्षित वितरण आर्किटेक्चर

सर्वर सममित कुंजी (AES-256) का उपयोग करके सूचना बॉडी को एन्क्रिप्ट करता है। एन्क्रिप्शन कुंजी क्लाइंट और सर्वर के बीच पूर्व-सहमत होती है। एक्सटेंशन payload के data फ़ील्ड में एन्क्रिप्टेड स्ट्रिंग प्राप्त करता है, इसे डिक्रिप्ट करता है और सूचना फ़ील्ड में प्रतिस्थापित करता है। उपयोगकर्ता कुंजी प्रमाणीकरण के बाद 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 में संग्रहीत नहीं की जानी चाहिए। iOS Keychain का उपयोग App Group के माध्यम से पहुंच के साथ करें ताकि ऐप और एक्सटेंशन दोनों कुंजी पढ़ सकें। क्लाइंट पर कुंजी जनरेशन के लिए AES-256-GCM एल्गोरिदम के साथ Security.framework का उपयोग करें।

मीडिया अटैचमेंट डाउनलोड और संलग्न करना

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

मीडिया डाउनलोड और अटैचमेंट प्रक्रिया

एक्सटेंशन सूचना payload फ़ील्ड से इमेज 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 टाइमआउट का उपयोग करें ताकि पूरी सीमा एक ही ऑपरेशन पर खर्च न हो।

त्रुटियों पर फ़ॉलबैक

यदि इमेज डाउनलोड विफल होता है या payload डिक्रिप्शन त्रुटि देता है, तो एक्सटेंशन को मूल सामग्री के साथ 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 कॉल करते हैं, तो सूचना प्रदर्शित नहीं होगी। इसका उपयोग स्पैम सूचनाओं या गलत डेटा को फ़िल्टर करने के लिए किया जाता है।

मीडिया डाउनलोड के लिए प्राधिकरण टोकन कैसे पास करें?

टोकन को सूचना payload के userInfo में पास किया जा सकता है या App Group के माध्यम से Keychain से प्राप्त किया जा सकता है। एक्सटेंशन UserDefaults में टोकन संग्रहीत करने की अनुशंसा नहीं की जाती है।

क्या एक्सटेंशन के लिए विशेष प्रमाणपत्र कॉन्फ़िगरेशन आवश्यक है?

एक्सटेंशन को उसी डेवलपर प्रमाणपत्र से हस्ताक्षरित होना चाहिए जो मुख्य ऐप के लिए उपयोग होता है। प्रोडक्शन के लिए, Push Notifications क्षमता सक्षम के साथ प्रोडक्शन प्रमाणपत्र आवश्यक है।

वास्तविक डिवाइस पर एक्सटेंशन को कैसे डीबग करें?

डिवाइस को Xcode से कनेक्ट करें, रन स्कीम में एक्सटेंशन target चुनें और Firebase Console के माध्यम से push सूचना भेजें। एक्सटेंशन में ब्रेकपॉइंट मुख्य ऐप की तरह ही काम करते हैं।

सारांश

  • Notification Service Extension — प्रदर्शन से पहले push सूचनाओं की बैकग्राउंड प्रोसेसिंग के लिए iOS एक्सटेंशन।
  • अधिकतम निष्पादन समय 30 सेकंड है, जिसके बाद सिस्टम मूल सामग्री प्रदर्शित करता है।
  • मुख्य उपयोग केस: payload डिक्रिप्शन, मीडिया डाउनलोड, सामग्री सत्यापन और स्थानीयकरण।
  • एक्सटेंशन UNNotificationServiceExtension से didReceive और serviceExtensionTimeWillExpire मेथड्स के साथ इनहेरिट करता है।
  • मीडिया डाउनलोड के लिए URLSession का उपयोग करें, कुंजी भंडारण के लिए iOS Keychain का।
  • हमेशा फ़ॉलबैक प्रदान करें — त्रुटियों पर मूल सामग्री के साथ contentHandler कॉल करें।
  • सूचनाओं पर पूर्ण नियंत्रण के लिए Service Extension को Content Extension के साथ संयोजित करें।

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

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

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

यह भी पढ़ें