Notification Content Extension एक iOS एक्सटेंशन है जो पुश नूटिफिकेशन के मानक इंटरफ़ेस को कस्टम UIView से बदलने की अनुमति देता है। डेवलपर को सामग्री प्रदर्शन पर पूरा नियंत्रण मिलता है: छवियाँ, वीडियो, एनिमेशन, कस्टम फ़ॉंट और इंटरैक्टिव तत्व। Apple Developer, 2025 के अनुसार, Notification Content Extension नूटिफिकेशन की सीमित जगह में किसी भी UIKit इंटरफ़ेस का समर्थन करता है।
मुख्य बातें
Notification Content Extension iOS में एक ऐप एक्सटेंशन है जो पुश नूटिफिकेशन के मानक प्रदर्शन टेम्पलेट को कस्टम UIView से बदल देता है। एक सामान्य नूटिफिकेशन के विपरीत जहाँ सामग्री शीर्षक, उपशीर्षक और मुख्य पाठ तक सीमित होती है, यह एक्सटेंशन किसी भी UIKit इंटरफ़ेस को प्रदर्शित करने की अनुमति देता है: निर्देशांकों के साथ मानचित्र, चार्ट, छवि गैलरी या इनपुट फ़ॉर्म।
जब iOS किसी निर्दिष्ट categoryIdentifier के साथ एक पुश नूटिफिकेशन प्राप्त करता है, तो सिस्टम जाँचता है कि क्या इस श्रेणी के लिए कोई एक्सटेंशन पंजीकृत है। यदि है, तो सिस्टम एक्सटेंशन को एक अलग प्रक्रिया में लॉन्च करता है और उसे नूटिफिकेशन सामग्री भेजता है। एक्सटेंशन मानक के बजाय अपना इंटरफ़ेस प्रदर्शित करता है। उपयोगकर्ता मुख्य ऐप खोले बिना कस्टम इंटरफ़ेस के साथ इंटरैक्ट करता है।
Notification Content Extension और Notification Service Extension को भूलना नहीं चाहिए। Service Extension नूटिफिकेशन दिखाए जाने से पहले सामग्री को संसाधित करता है (अटैचमेंट डाउनलोड करना, डिक्रिप्शन)। Content Extension तैयार सामग्री प्राप्त करने के बाद इंटरफ़ेस को बदल देता है। दोनों एक्सटेंशन एक साथ काम कर सकते हैं: Service Extension डेटा तैयार करता है, Content Extension उसे प्रदर्शित करता है।
| विशेषता | Content Extension | Service Extension |
|---|---|---|
| उद्देश्य | कस्टम नूटिफिकेशन UI | प्रदर्शन से पहले सामग्री संशोधन |
| निष्पादन समय | जब तक उपयोगकर्ता नूटिफिकेशन देखता है | पृष्ठभूमि में 30 सेकंड तक |
| इंटरफ़ेस | पूर्ण UIKit UIView | कोई इंटरफ़ेस नहीं |
| API | UNNotificationContentExtension | UNNotificationServiceExtension |
Notification Content Extension सीमित संसाधनों के साथ एक पृथक प्रक्रिया में चलता है। App Group को छोड़कर एक्सटेंशन की NSUserDefaults के माध्यम से मुख्य ऐप स्टोरेज तक पहुंच नहीं है। एक्सटेंशन का आकार असंपीड़ित रूप में 50 MB तक सीमित है। सामग्री प्रदर्शित करने का समय भी सीमित है — यदि एक्सटेंशन एक उचित समय में अपडेट पूरा नहीं करता, तो सिस्टम उसे बंद कर देता है।
Xcode में एक्सटेंशन बनाने के लिए, आपको Notification Content Extension प्रकार का एक नया target जोड़ना होगा। Xcode स्वचालित रूप से MainInterface.storyboard एक कंट्रोलर के साथ बनाएगा जो UIViewController से विरासत पाता है और UNNotificationContentExtension को लागू करता है।
Xcode में, File → New → Target → Notification Content Extension चुनें। एक्सटेंशन का नाम, भाषा (Swift या Objective-C) निर्दिष्ट करें और सुनिश्चित करें कि परियोजना उसी डेवलपमेंट टीम से जुड़ा है। target बनने के बाद, तीन फ़ाइलों के साथ एक फ़ोल्डर दिखाइ देगा: MainInterface.storyboard, Info.plist और कंट्रोलर फ़ाइल।
एक्सटेंशन के Info.plist में, UNNotificationExtensionCategory की कुंजी के साथ NSExtensionAttributes एरे निर्दिष्ट करना अनिवार्य है। इस एरे में उन नूटिफिकेशन की श्रेणियों के पहचानकर्ता होते हैं जिनके लिए एक्सटेंशन सक्रिय होगा। ऐच्छिक कुंजी UNNotificationExtensionInitialContentSizeRatio सही स्थान निर्धारण के लिए कस्टम इंटरफ़ेस का प्रारंभिक पहलू अनुपात निर्धारित करती है।
एक्सटेंशन target में एक स्वच्छ आर्किटेक्चर बनाये रखने की अनुशंसा है: कंट्रोलर के लिए अलग फ़ोल्डर, कस्टम व्यू के लिए अलग। चूँकि एक्सटेंशन एक अलग बाइनरी है, मुख्य ऐप का कोड सीधे उपलब्ध नहीं होता है। कोड साझा करने के लिए, एक अलग framework बनाएं या डेटा के लिए App Group का उपयोग करें।
UNNotificationContentExtension एक प्रोटोकॉल है जिसे Notification Content Extension में कंट्रोलर को लागू करना होता है। एकमात्र अनिवार्य विधि didReceive(_:with:) है, जो एक नूटिफिकेशन प्राप्त होने पर बुलाई जाती है। कंट्रोलर नूटिफिकेशन और एक तैयार व्यू कंट्रोलर प्राप्त करता है जिसे डेटा के साथ अपडेट करने की आवश्यकता होती है।
एक्सटेंशन कंट्रोलर को UIViewController से विरासत पाकर UNNotificationContentExtension को लागू करना चाहिए। एक Storyboard या xib इस कंट्रोलर से जुड़ा होता है। जब कोई नूटिफिकेशन प्राप्त होता है, तो didReceive विधि सामग्री भेजती है और कंट्रोलर अपने व्यू को अपडेट करता है।
import UIKit
import UserNotifications
import UserNotificationsUI
class CustomNotificationViewController: UIViewController {
@IBOutlet var titleLabel: UILabel!
@IBOutlet var customImageView: UIImageView!
func didReceive(
notification: UNNotification
) {
let content = notification.request.content
titleLabel.text = content.title
loadAttachment(content.attachments.first)
}
private func loadAttachment(attachment: UNNotificationAttachment?) {
guard let url = attachment?.URL else { return }
if let image = UIImage(contentsOfFile: url.path) {
customImageView.image = image
}
}
}
extension CustomNotificationViewController: UNNotificationContentExtension {
func didReceive(
notification: UNNotification
) {
didReceive(notification: notification)
}
}
सिस्टम Info.plist में UNNotificationExtensionInitialContentSizeRatio की कुंजी और वर्तमान सामग्री के आधार पर कस्टम इंटरफ़ेस का आकार निर्धारित करता है। न्यूनतम प्रारंभिक आकार के लिए इस कुंजी को 0.1 पर सेट करने की अनुशंसा है, और फिर सामग्री लोड होने के बाद preferredContentSize के माध्यम से आकार बदलें।
Notification Content Extension इंटरफ़ेस बनाने में पूरी आजादी देता है। आप किसी भी UIKit घटक का उपयोग कर सकते हैं: UITableView, MKMapView, WKWebView, UIStackView। हालाँकि, नूटिफिकेशन की सीमित जगह को ध्यान में रखना और प्रदर्शन का ऑप्टिमाइजेशन करना महत्वपूर्ण है।
एक लोकप्रिय परिदृश्य एक स्थान के साथ मानचित्र दिखाना है। ऐसा करने के लिए, एक्सटेंशन Storyboard में MKMapView जोड़ें, और कंट्रोलर नूटिफिकेशन सामग्री से निर्देशांक भेजता है। एक्सटेंशन target में MapKit जोड़ना न भूलें। मानचित्र का उपयोग करते समय, एक्सटेंशन की मेमरी सीमा को ध्यान में रखें — जटिल टाइल्स लोड करने से उपलब्ध संसाधन समाप्त हो सकते हैं।
Notification Content Extension UIView एनिमेशन का समर्थन करता है, जिसमें आकार बदलना, स्थानांतरण और तत्वों की पारदर्शिता शामिल है। विस्तृत नूटिफिकेशन मोड में प्रवेश करने पर, आप सामग्री प्रकट होने का एक एनिमेशन शुरू कर सकते हैं। एनिमेशन छोटे (अधिकतम 0.5 सेकंड) होने चाहिए और उपयोगकर्ता के नूटिफिकेशन के साथ इंटरैक्शन में बाधा नहीं डालना चाहिए। अनंत एनिमेशन से बचें — वे बैटरी खाते हैं और प्रदर्शन कम करते हैं।
चूँकि एक्सटेंशन एक पूर्ण UIViewController है, आप जेस्चर और क्लिक हैंडलर जोड़ सकते हैं। UIKit जेस्चर (UITapGestureRecognizer, UIButton) मानक रूप से काम करते हैं। ऐप खोलने की आवश्यकता वाली कार्रवाई के लिए, एक्सटेंशन डिलीगेट या userNotificationCenter का उपयोग करें। इंटरैक्टिव तत्व सीमित जगह में आरामदायक क्लिक के लिए पर्याप्त बड़े होने चाहिए — Apple की अनुशंसाओं के अनुसार न्यूनतम टच टार्गेट आकार 44x44 पॉइंट है।
मीडिया सामग्री Notification Content Extension की एक मुख्य क्षमता है। एक नूटिफिकेशन में छवियाँ, GIF, ऑडियो और वीडियो हो सकते हैं जो कस्टम इंटरफ़ेस में प्रदर्शित होते हैं। अटैचमेंट UNNotificationAttachment के माध्यम से पहुंचाए जाते हैं, जिसे सर्वर प्रेजिमस के माध्यम से या डाउनलोड करने के बाद Notification Service Extension के माध्यम से जोड़ा जा सकता है। समर्थित फ़ॉर्मेट में JPEG, PNG, MPEG-4 और MP3 शामिल हैं।
एक छवि प्रदर्शित करने के लिए, नूटिफिकेशन सामग्री से UNNotificationAttachment प्राप्त करें और इसे स्थानीय URL से लोड करें। यह याद रखना महत्वपूर्ण है कि एक्सटेंशन की पहुंच केवल स्थानीय फ़ाइलों तक है — दूरस्थ संसाधनों को Service Extension द्वारा पहले से डाउनलोड किया जाना चाहिए। अधिकतम अटैचमेंट आकार iOS 15+ पर 50 MB है, यह सीमा प्रत्येक अपडेट के साथ बढ़ती है। एकाधिक छवियों के लिए, अलग-अलग पहचानकर्ताओं के साथ UNNotificationAttachment का उपयोग करें और उन्हें UIPageViewController के माध्यम से प्रदर्शित करें।
कस्टम इंटरफ़ेस में छवि प्रदर्शित करने के लिए, एक्सटेंशन नूटिफिकेशन सामग्री से UNNotificationAttachment प्राप्त करता है और इसे स्थानीय URL से लोड करता है। अटैचमेंट को Notification Service Extension द्वारा पहले से डाउनलोड किया जाना चाहिए — Content Extension की नेटवर्क तक पहुंच नहीं है। अधिकतम मीडिया अटैचमेंट आकार iOS 15+ पर 50 MB है, पहले के संस्करणों में यह सीमा 10 MB थी। एक्सटेंशन को अटैचमेंट की अनुपस्थिति को सही ढंग से संभालना चाहिए और एक फ़ॉलबैक इंटरफ़ेस प्रदर्शित करना चाहिए। कम रिजॉल्यूशन छवियों के प्री-लोडिंग के लिए, अटैच करने से पहले Service Extension द्वारा बनाए गए थंबनेल संस्करणों का उपयोग करें।
iOS Notification Content Extension में AVPlayerLayer के माध्यम से वीडियो चलाने का समर्थन करता है। एक्सटेंशन नूटिफिकेशन में ही नियंत्रण बटनों के साथ एक वीडियो प्लेयर प्रदर्शित कर सकता है। यह विशेष रूप से वीडियो निगरानी, स्ट्रीमिंग या सामग्री पूर्वावलोकन एप्लिकेशन के लिए उपयोगी है। बिना आवाज़ के ऑटोप्ले की अनुमति है बशर्ते कि उपयोगकर्ता इस नूटिफिकेशन में मीडिया सामग्री की आशा करता है। वीडियो प्लेयर लागू करते समय, नियंत्रण जोड़ें: प्ले/पॉज़, प्रगति बार और एक बंद करने का बटन। सुनिश्चित करें कि वीडियो आवाज़ के साथ स्वचालित रूप से शुरू न हो — यह Apple की उपयोगकर्ता अनुभव अनुशंसाओं का उल्लंघन है। एकाधिक छवियों की स्लाइड शो के लिए, उनके बीच पृष्ठ पलटने के विकल्प के साथ UIView.transition के माध्यम से एनिमेटेड ट्रांजिशन का उपयोग करें।
Notification Content Extension लगभग 50 MB की मेमरी सीमा के साथ एक सीमित वातावरण में चलता है। प्रदर्शन का ऑप्टिमाइजेशन करने के लिए, छवियों का आलसी लोडिंग करें, मुख्य थ्रेड पर भारी गणनाओं से बचें और सरल कंस्ट्रेंट के साथ Auto Layout लागू करें। छवि प्रसंस्करण या डेटा पार्सिंग जैसे भारी कार्य पृष्ठभूमि क्यू में (DispatchQueue.global) किए जाने चाहिए। मेमरी सीमा पार होने पर, सिस्टम एक्सटेंशन को समाप्त कर देगा और उपयोगकर्ता एक मानक नूटिफिकेशन देखेगा। प्रकाशन से पहले Instruments (Allocations और Time Profiler) के माध्यम से एक्सटेंशन का प्रोफ़ाइलिंग करने की अनुशंसा है, और विभिन्न iOS संस्करणों के वास्तविक उपकरणों पर मेमरी खपत की जाँच करें।
अक्सर पूछे जाने वाले प्रश्न
हाँ, iOS 16 से शुरू करके, Notification Content Extension UIHostingController के माध्यम से SwiftUI का समर्थन करता है। हालाँकि, एक्सटेंशन में SwiftUI के सीमित समर्थन के कारण जटिल इंटरफ़ेस के लिए UIKit अधिक स्थिर विकल्प बना हुआ है।
जाँचें कि नूटिफिकेशन पेलोड में categoryIdentifier एक्सटेंशन के Info.plist में UNNotificationExtensionCategory से मेल खाता है या नहीं। यह भी सुनिश्चित करें कि एक्सटेंशन मुख्य ऐप target में जोड़ा गया है और सही ढंग से हस्ताक्षरित है।
App Group का उपयोग करें — साझा स्टोरेज (UserDefaults suite) या फ़ाइल कंटेनर। मुख्य ऐप और एक्सटेंशन एक ही डेवलपमेंट टीम में होने चाहिए और App Groups क्षमता सक्रिय होनी चाहिए।
मीडिया नियंत्रण के लिए UNNotificationContentExtensionMediaPlayPauseButtonType के साथ didReceive(_:with:) विधि का उपयोग करें या डिलीगेट के माध्यम से अपडेट अनुरोध करें। बिना नए नूटिफिकेशन के पूर्ण सामग्री अपडेट संभव नहीं है।
Xcode में एक्सटेंशन target चुनें और सिमुलेटर पर चलाएं। एक सामान्य ऐप की तरह lldb और ब्रेकपॉइंट का उपयोग करें। परीक्षण के लिए, Firebase Console के माध्यम से या Pusher के माध्यम से स्थानीय रूप से एक पुश नूटिफिकेशन भेजें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें