ऐप एक्सटेंशन अलग-अलग निष्पादन योग्य मॉड्यूल हैं जो मोबाइल ऐप की क्षमताओं को उसके मुख्य इंटरफ़ेस से परे विस्तारित करते हैं: होम स्क्रीन पर Today Widget, CallKit के माध्यम से VoIP कॉल हैंडलिंग और BroadcastReceiver के माध्यम से सिस्टम इवेंट पर प्रतिक्रिया। सिस्टम इंटीग्रेशन ऐप को ऑपरेटिंग सिस्टम के साथ गहरे स्तर पर बातचीत करने की अनुमति देते हैं, सामान्य स्क्रीन के लिए अनुपलब्ध सुविधाओं को अनलॉक करते हैं। Apple डेवलपर दस्तावेज़ीकरण के अनुसार, प्रत्येक एक्सटेंशन एक पृथक प्रक्रिया में चलता है और मुख्य ऐप से स्वतंत्र रूप से सिस्टम द्वारा प्रबंधित किया जाता है। मोबाइल ऐप में ऐप एक्सटेंशन मुख्य प्रक्रिया में अनुपलब्ध सुविधाओं को लागू करने की अनुमति देते हैं।
मुख्य बिंदु
iOS पर ऐप एक्सटेंशन iOS 8 में दिखाई दिए और मोबाइल डेवलपमेंट में सिस्टम इंटीग्रेशन की नींव बन गए। ये अलग बाइनरी हैं जो मुख्य ऐप के साथ बंडल होते हैं लेकिन एक पृथक प्रक्रिया में लॉन्च होते हैं। प्रत्येक एक्सटेंशन का अपना Info.plist और NSExtensionPrincipalClass के माध्यम से परिभाषित प्रवेश बिंदु होता है। सिस्टम ऐप एक्सटेंशन के जीवनचक्र का प्रबंधन करता है — वे कार्य पूरा करने के बाद पृष्ठभूमि में नहीं रह सकते।
WidgetKit (iOS 14+) होम स्क्रीन पर विजेट बनाने के लिए एक आधुनिक फ्रेमवर्क है। WidgetKit इंटरफ़ेस विवरण के लिए SwiftUI और अपडेट शेड्यूल परिभाषित करने के लिए TimelineProvider का उपयोग करता है। विजेट तीन आकारों में आते हैं: छोटा (2×2 सेल), मध्यम (4×2) और बड़ा (4×4)। UICollectionViewController पर आधारित पुराना Today Widget अभी भी समर्थित है, लेकिन Apple WidgetKit पर माइग्रेट करने की सलाह देता है। WidgetKit पर ऐप एक्सटेंशन एनीमेशन, कीबोर्ड इनपुट या जेस्चर का समर्थन नहीं करते — ये आवधिक अपडेट के साथ स्थिर या छद्म-एनिमेटेड तत्व हैं।
Share Extension किसी भी ऐप से आपके ऐप में सिस्टम शेयर शीट के माध्यम से सामग्री भेजने की अनुमति देता है। Share Extension NSExtensionItem के माध्यम से डेटा प्राप्त करता है और UI के लिए SLComposeServiceViewController का उपयोग करता है। Action Extension सामग्री को स्थान पर संसाधित करता है — उदाहरण के लिए, किसी अन्य ऐप पर स्विच किए बिना ब्राउज़र में टेक्स्ट का अनुवाद करता है। दोनों प्रकारों को सीमित समय में कार्य पूरा करना होगा, अन्यथा सिस्टम एक्सटेंशन को "खत्म" कर देता है। यह मोबाइल ऐप में ऐप एक्सटेंशन की एक महत्वपूर्ण सीमा है — पृष्ठभूमि कार्य एक्सटेंशन स्तर पर उपलब्ध नहीं हैं।
iOS पर सिस्टम इंटीग्रेशन विजेट से कहीं आगे जाते हैं: CallKit, PushKit और SiriKit मोबाइल ऐप को सिस्टम स्तर पर काम करने की अनुमति देते हैं। इन फ्रेमवर्क को विशेष entitlements की आवश्यकता होती है लेकिन उपयोगकर्ता को एक सहज अनुभव देते हैं — CallKit के माध्यम से कॉल सामान्य फोन कॉल की तरह दिखती हैं, और Siri ऐप खोले बिना अनुरोधों को संसाधित करता है।
CallKit तीसरे पक्ष के ऐप कॉल को सिस्टम कॉल स्क्रीन में एकीकृत करता है, जिसमें लॉक की गई स्क्रीन भी शामिल है। CXProvider ऐप को VoIP सेवा के रूप में पंजीकृत करता है, और CXCallController कॉल का प्रबंधन करता है। CallKit स्वचालित रूप से डुप्लिकेट कॉल को ब्लॉक करता है और अवांछित नंबरों को ब्लॉक करने के लिए Call Directory Extension का समर्थन करता है। CallKit के साथ मोबाइल डेवलपमेंट में सिस्टम इंटीग्रेशन वॉयस कम्युनिकेशन ऐप्स के लिए महत्वपूर्ण हैं — WhatsApp, Skype और Zoom इसका उपयोग इनकमिंग कॉल प्रदर्शित करने के लिए करते हैं।
PushKit उपयोगकर्ता को दिखाए बिना सीधे मोबाइल ऐप में पुश सूचनाएं पहुंचाता है। PushKit ऐप को "मारे गए" स्थिति से जगाता है और PKPushRegistryDelegate के माध्यम से डेटा पास करता है। यह VoIP ऐप्स के लिए प्राथमिक तंत्र है: PushKit कॉल जानकारी पहुंचाता है, और CallKit इसे प्रदर्शित करता है। PushKit की सामान्य पुश सूचनाओं की तुलना में उच्च वितरण प्राथमिकता है और बैनर दिखाने की आवश्यकता नहीं है। मोबाइल ऐप में ऐप एक्सटेंशन अक्सर वॉयस कम्युनिकेशन के लिए PushKit को CallKit के साथ जोड़ते हैं।
SiriKit Siri और शॉर्टकट ऐप के माध्यम से अनुरोधों को संसाधित करने की अनुमति देता है। Intents Extension एक अलग ऐप एक्सटेंशन है जो समर्थित इंटेंट को पंजीकृत करता है और उन्हें संसाधित करता है। SiriKit 20+ डोमेन का समर्थन करता है: कॉल, संदेश, भुगतान, नोट्स, वर्कआउट। शॉर्टकट उपयोगकर्ता को ऑटोमेशन बनाने की अनुमति देते हैं — उदाहरण के लिए, "Siri के माध्यम से WhatsApp में संदेश भेजें।" SiriKit और शॉर्टकट के साथ सिस्टम इंटीग्रेशन जुड़ाव बढ़ाते हैं क्योंकि उपयोगकर्ता ऐप खोले बिना कार्य करता है।
BroadcastReceiver एक Android घटक है जो सिस्टम ब्रॉडकास्ट संदेशों पर प्रतिक्रिया करता है। iOS ऐप एक्सटेंशन के विपरीत, BroadcastReceiver को अलग बाइनरी की आवश्यकता नहीं है — मेनिफेस्ट में या Context.registerReceiver के माध्यम से कोड में रिसीवर को पंजीकृत करना पर्याप्त है। Android पर सिस्टम इंटीग्रेशन अक्सर BroadcastReceiver से शुरू होते हैं: डिवाइस बूट पर सेवा शुरू करने से लेकर नेटवर्क कनेक्शन पर प्रतिक्रिया करने तक।
IntentFilter BroadcastReceiver को एक विशिष्ट सिस्टम इवेंट से बांधता है। सामान्य इवेंट: BOOT_COMPLETED (डिवाइस बूट), CONNECTIVITY_ACTION (नेटवर्क परिवर्तन), BATTERY_LOW (कम बैटरी), TIME_SET (समय परिवर्तन)। रिसीवर AndroidManifest.xml में या डायनामिक रजिस्ट्रेशन के लिए Context.registerReceiver के माध्यम से पंजीकृत किया जाता है। डायनामिक रजिस्ट्रेशन बेहतर है — इसे मेनिफेस्ट में अनुमतियों की आवश्यकता नहीं है और यह केवल ऐप सक्रिय होने पर काम करता है। Android पर ऐप एक्सटेंशन एक अवधारणा के रूप में मौजूद नहीं हैं, लेकिन BroadcastReceiver समान भूमिका निभाता है — यह सिस्टम इंटीग्रेशन के माध्यम से ऐप क्षमताओं का विस्तार करता है।
NotificationListenerService एक सेवा है जो सभी सिस्टम सूचनाएं प्राप्त करती है। NotificationListenerService को BIND_NOTIFICATION_LISTENER_SERVICE अनुमति और एक्सेसिबिलिटी सेटिंग्स के माध्यम से पहुंच की आवश्यकता है। AccessibilityService सिस्टम इंटीग्रेशन के लिए अधिक शक्तिशाली उपकरण है: यह स्क्रीन सामग्री पढ़ सकता है, क्लिक का अनुकरण कर सकता है और कार्यों को स्वचालित कर सकता है। दोनों सेवाओं को सेटिंग्स में उपयोगकर्ता द्वारा स्पष्ट रूप से सक्षम करने की आवश्यकता होती है, जो सुरक्षा में सुधार करता है। AccessibilityService के माध्यम से मोबाइल ऐप में सिस्टम इंटीग्रेशन का उपयोग ऑटो-फिलर्स, स्क्रीन रीडर और एक्सेसिबिलिटी टूल के लिए किया जाता है।
class BootReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
WorkManager.getInstance(context)
.enqueueUniqueWork("post-boot", ...)
}
}
}
उदाहरण BOOT_COMPLETED इवेंट के लिए BroadcastReceiver पंजीकृत करता है। WorkManager का उपयोग डिवाइस बूट के बाद विलंबित कार्य निष्पादन के लिए किया जाता है — यह Android ऐप्स के लिए मानक दृष्टिकोण है।
Android पर App Widget Provider विजेट संदर्भ में iOS ऐप एक्सटेंशन का समकक्ष है: यह एक घटक है जो होम स्क्रीन पर इंटरैक्टिव सामग्री प्रदर्शित करता है। WidgetKit के विपरीत, Android विजेट उपयोगकर्ता इनपुट — क्लिक, टॉगल और जेस्चर स्वीकार कर सकते हैं। App Widget Provider आकार और अपडेट आवृत्ति के XML विवरण के माध्यम से मेनिफेस्ट में पंजीकृत होता है।
RemoteViews XML लेआउट के माध्यम से विजेट इंटरफ़ेस का वर्णन करता है और केवल सीमित व्यू सेट का समर्थन करता है। RemoteViews कस्टम व्यू की अनुमति नहीं देता — केवल मानक घटक: TextView, ImageView, Button, ProgressBar। AppWidgetProvider आधार वर्ग है जो विजेट अपडेट, सक्षमीकरण और विलोपन को संभालता है। onUpdate विधि updatePeriodMillis के माध्यम से टाइमर द्वारा या सटीक नियंत्रण के लिए WorkManager के माध्यम से कॉल की जाती है। Android पर विजेट के साथ सिस्टम इंटीग्रेशन में सावधानी की आवश्यकता होती है — बहुत बार-बार अपडेट बैटरी खत्म करता है।
Glance API XML के बजाय Kotlin DSL का उपयोग करके विजेट बनाने के लिए Jetpack लाइब्रेरी है। Glance API RemoteViews में संकलित होता है और Compose-जैसे सिंटैक्स का समर्थन करता है: GlanceComposable, Column, Row, Text। लाइब्रेरी जटिल XML कोड की समस्या को हल करती है और JUnit के माध्यम से विजेट का परीक्षण करने की अनुमति देती है। Glance API अभी तक सभी RemoteViews सुविधाओं का समर्थन नहीं करता — जटिल इंटरैक्टिव विजेट के लिए क्लासिक दृष्टिकोण बेहतर है। Android पर मोबाइल डेवलपमेंट में ऐप एक्सटेंशन Glance API की ओर विकसित हो रहे हैं, जिससे विजेट निर्माण और रखरखाव सरल हो रहा है।
Content Provider एकीकृत ContentResolver इंटरफ़ेस के माध्यम से ऐप्स के बीच संरचित डेटा साझा करने के लिए Android घटक है। iOS ऐप एक्सटेंशन के विपरीत, Content Provider अलग प्रक्रिया नहीं बनाता — कॉल करने वाले ऐप के संदर्भ में डेटा का अनुरोध सिंक्रोनस रूप से किया जाता है। Content Provider Android पर सिस्टम इंटीग्रेशन की नींव है: संपर्क, मीडिया फ़ाइलें, कैलेंडर और मानक ऐप डेटा प्रकाशित करने के लिए इसका उपयोग करते हैं।
FileProvider ऐप्स के बीच सुरक्षित फ़ाइल स्थानांतरण के लिए ContentProvider का उपवर्ग है। FileProvider सीधे file:// पथों के बजाय अस्थायी content:// URI उत्पन्न करता है, जो Android 7+ पर प्रतिबंधित हैं। उपयोग के लिए, XML कॉन्फ़िगरेशन में files-path या external-files-path निर्दिष्ट करना होगा। Android पर मोबाइल डेवलपमेंट में ऐप एक्सटेंशन एक अलग अवधारणा के रूप में मौजूद नहीं हैं, लेकिन FileProvider उनका कार्य करता है — यह डेटा साझाकरण क्षमताओं को एक ऐप से परे विस्तारित करता है।
iOS पर, फ़ाइल साझाकरण की भूमिका File Provider Extension द्वारा निभाई जाती है। File Provider Extension NSFileProviderManager के माध्यम से ऐप की फ़ाइलों को Files ऐप में प्रकाशित करता है। FileProvider के विपरीत, iOS एक्सटेंशन को अलग बाइनरी की आवश्यकता होती है और यह एक पृथक प्रक्रिया में चलता है। File Provider Extension फ़ाइल विवरण के लिए NSFileProviderItem और फ़ोल्डर नेविगेशन के लिए NSFileProviderEnumerator का समर्थन करता है। File Provider Extension के माध्यम से मोबाइल ऐप में सिस्टम इंटीग्रेशन उपयोगकर्ता को ऐप खोले बिना Files ऐप से ऐप फ़ाइलों को प्रबंधित करने की अनुमति देता है।
class MyFileProviderExtension: NSFileProviderExtension {
override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
return MyFileProviderItem(identifier: identifier)
}
}
उदाहरण Swift में File Provider Extension का न्यूनतम कार्यान्वयन दिखाता है। item(for:) विधि पहचानकर्ता द्वारा NSFileProviderItem ऑब्जेक्ट लौटाती है — सिस्टम Files ऐप में फ़ाइलें प्रदर्शित करते समय इसे कॉल करता है।
अक्सर पूछे जाने वाले प्रश्न
ऐप एक्सटेंशन अलग बाइनरी हैं जो ऐप की कार्यक्षमता को उसकी प्रक्रिया से परे बढ़ाते हैं: Today Widget, Share Extension, Action Extension, Keyboard Extension और अन्य प्रकार जो एक पृथक वातावरण में चलते हैं।
CallKit VoIP कॉल को सिस्टम कॉल इंटरफ़ेस में लॉक की गई स्क्रीन पर प्रदर्शन के साथ एकीकृत करता है। PushKit उपयोगकर्ता को दिखाए बिना पृष्ठभूमि पुश सूचनाएं पहुंचाता है — यह डेटा संसाधित करने के लिए ऐप को जगाता है, जैसे इनकमिंग कॉल के बारे में जानकारी।
BroadcastReceiver एक Android घटक है जो सिस्टम ब्रॉडकास्ट संदेशों पर प्रतिक्रिया करता है: डिवाइस बूट (BOOT_COMPLETED), नेटवर्क कनेक्शन (CONNECTIVITY_ACTION), एयरप्लेन मोड परिवर्तन और अन्य OS इवेंट।
विजेट इंटरफ़ेस निर्माण के लिए AppWidgetProvider का RemoteViews के साथ या Kotlin DSL दृष्टिकोण के लिए Glance API (Jetpack) का उपयोग करें। विजेट आकार और अपडेट आवृत्ति निर्दिष्ट करने वाले XML विवरण के माध्यम से मेनिफेस्ट में पंजीकृत होता है।
Content Provider ContentResolver के माध्यम से ऐप्स के बीच डेटा साझा करने के लिए Android घटक है। इसका उपयोग संपर्कों, मीडिया फ़ाइलों और अन्य ऐप्स से किसी भी संरचित डेटा तक पहुंच के लिए किया जाता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।