Normal Permission Android में अनुमतियों की एक श्रेणी है जो सिस्टम उपयोगकर्ता से पूछे बिना स्वचालित रूप से प्रदान करता है। Android Developer Documentation, 2024 के अनुसार, सामान्य अनुमतियों में ProtectionLevel normal होता है और खतरनाक अनुमतियों के विपरीत, उन्हें runtime संवाद की आवश्यकता नहीं होती। उनमें इंटरनेट, नेटवर्क स्थिति और कंपन तक पहुंच शामिल है, जो उपयोगकर्ता के संवेदनशील डेटा के लिए जोखिम पैदा नहीं करतीं।
मुख्य बातें
Normal Permission Android में ProtectionLevel normal के साथ एक सिस्टम अनुमति प्रकार है, जो इंस्टालेशन के समय एप्लिकेशन को स्वचालित रूप से प्रदान की जाती है। डेवलपर को इसे अनुरोधित करने के लिए कोड लिखने की आवश्यकता नहीं है — बस AndroidManifest.xml में अनुमति घोषित करना काफी है। उपयोगकर्ता कोई संवाद नहीं देखता और वह किसी सामान्य अनुमति को अलग से रव्क नहीं कर सकता, केवल पूरे एप्लिकेशन को हटाकर।
Android सिस्टम सामान्य अनुमतियों को निम्न-जोखिम के रूप में वर्गीकृत करता है — ये व्यक्तिगत डेटा, कैमरा या माइक्रोफोन तक पहुंच प्रदान नहीं करतीं। विशिष्ट उदाहरण: इंटरनेट पहुंच, कंपन नियंत्रण, Wi-Fi स्थिति पढ़ना। Android Security Model (2024) के अनुसार, लगभग 40 प्रतिशत सिस्टम अनुमतियाँ सामान्य श्रेणी में आती हैं।
एक महत्वपूर्ण गुण — सामान्य अनुमतियों को सेटिंग्स के माध्यम से runtime में रव्क नहीं किया जा सकता। यदि उपयोगकर्ता पहुंच को प्रतिबंधित करना चाहता है, तो एकमात्र तरीका एप्लिकेशन को हटाना है। डेवलपर्स को आर्किटेक्चर में इसे ध्यान में रखना चाहिए, लेकिन उपयोगकर्ताओं के लिए यह दृष्टिकोण अंतरक्रिया को सरल बनाता है: पहली लॉन्च पर कोई संवाद नहीं।
सामान्य और खतरनाक अनुमतियों में विभागन Android 6.0 Marshmallow (API 23) में दिखाई दिया। इस संस्करण से पहले, सभी अनुमतियाँ इंस्टालेशन पर अनुरोधित की जाती थीं — उपयोगकर्ता एक सूची देखता था और इसे पूरी तरह से स्वीकार या अस्वीकार करता था। Normal Permission ने निम्न-जोखिम कार्यों के लिए इस मॉडल को बनाये रखा, जबकि Dangerous runtime अनुरोध पर स्विच कर गया। इस बदलाव ने उपयोगकर्ता अनुभव में सुधार किया और साथ ही सुरक्षा में वृद्धि की।
कई Android सिस्टम API को एक सामान्य अनुमति की स्पष्ट घोषणा की आवश्यकता होती है, भले ही पहुंच स्वचालित हो। उदाहरण के लिए, ConnectivityManager क्लास को ACCESS_NETWORK_STATE की आवश्यकता होती है, VibratorService को VIBRATE की, WifiManager को ACCESS_WIFI_STATE की। अनुरूप uses-permission की घोषणा किए बिना, इन API को कॉल करने से SecurityException उत्पन्न होगा।
ProtectionLevel normal Android अनुमति प्रणाली में न्यूनतम सुरक्षा स्तर है। इस स्तर के साथ अनुमतियों की मैनिफेस्ट में घोषणा की जाती है, और सिस्टम इंस्टालेशन पर घोषणा की जाँच करता है, उपयोगकर्ता के हस्तक्षेप के बिना पहुंच प्रदान करता है। कोई UI तत्व नहीं दिखाए जाते, कोई कॉलबैक नहीं बुलाए जाते।
सत्यापन तंत्र PackageManager स्तर पर काम करता है। APK इंस्टालेशन के दौरान, सिस्टम सभी uses-permission टैग्स को स्कैन करता है, permissions.xml फ़ाइलों में सिस्टम परिभाषाओं के साथ मिलान करके प्रत्येक अनुमति का सुरक्षा स्तर निर्धारित करता है, और सामान्य स्तर के लिए बस पहुंच पंजीकृत करता है। यह प्रक्रिया मिलीसेकंड में पूरी होती है और उपयोगकर्ता इंटरफ़ेस के साथ किसी अंतरक्रिया की आवश्यकता नहीं होती।
प्रदान एल्गोरिथम इस प्रकार काम करता है:
उपयोगकर्ता इंटरफ़ेस के माध्यम से सामान्य अनुमति को रव्क नहीं कर सकता। एप्लिकेशन सेटिंग्स के अनुमति अनुभाग में, केवल खतरनाक अनुमतियाँ प्रदर्शित होती हैं। यह iOS के विपरीत है, जहाँ प्रत्येक अनुमति को कार्य की संवेदनशीलता स्तर के बावजूद अलग पुष्टिकरण की आवश्यकता होती है।
Normal और Dangerous Permission Android में सुरक्षा की दो विपरीत श्रेणियाँ हैं। मुख्य अंतर प्रदान की विधि में है: सामान्य अनुमतियाँ इंस्टालेशन पर स्वचालित रूप से दी जाती हैं, खतरनाक अनुमतियों को runtime संवाद के माध्यम से स्पष्ट सहमति की आवश्यकता होती है। यह अंतर Android 6.0 Marshmallow संस्करण से शुरू होकर Android सुरक्षा आर्किटेक्चर में निर्मित है।
मुख्य विशेषताओं की तुलना:
| विशेषता | Normal Permission | Dangerous Permission |
|---|---|---|
| ProtectionLevel | normal | dangerous |
| उपयोगकर्ता अनुरोध | आवश्यक नहीं | runtime संवाद अनिवार्य |
| रव्क की क्षमता | नहीं, केवल एप्लिकेशन हटाने पर | हाँ, किसी भी समय सेटिंग्स के माध्यम से |
| कोड में जाँच | हमेशा PERMISSION_GRANTED | checkSelfPermission अनिवार्य |
| उदाहरण | INTERNET, VIBRATE, ACCESS_NETWORK_STATE | CAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION |
Normal Permission का अनुरोध करने पर उपयोगकर्ता कोई संवाद नहीं देखता। यदि एक एप्लिकेशन को INTERNET की आवश्यकता है — यह इसे चुपचाप प्राप्त करता है। Dangerous Permission के लिए, सिस्टम अनुरोधित पहुंच का वर्णन करते हुए एक मॉडल संवाद दिखाता है। उपयोगकर्ता अनुमति या अस्वीकार दबाता है, और बाद में किसी भी समय सेटिंग्स के माध्यम से अनुमति रव्क कर सकता है। यह एक मुख्य UX अंतर है जो इंटरफ़ेस डेवलपमेंट रणनीति को निर्धारित करता है।
Normal का उपयोग सभी मामलों में किया जाना चाहिए जहाँ पहुंच संवेदनशील डेटा से संबंधित नहीं है। कनेक्टिविटी की जाँच के लिए ACCESS_NETWORK_STATE, हैप्टिक फ़ीडबैक के लिए VIBRATE, HTTP अनुरोधों के लिए INTERNET — ये सभी सामान्य अनुमतियाँ हैं। जहाँ normal पर्याप्त है, वहाँ dangerous स्तर का उपयोग करना खराब अभ्यास है, जो अनावश्यक संवाद बनाता है और एप्लिकेशन में उपयोगकर्ता का विश्वास कम करता है।
Android परिभाषित करता है कई दर्जन सामान्य अनुमतियाँ, प्रत्येक एक विशिष्ट सिस्टम फ़ंक्शन के अनुरूप होती है। ये सभी Manifest.permission क्लास के कंस्टेंट के माध्यम से उपलब्ध हैं। नीचे एप्लिकेशन डेवलपमेंट में सबसे अधिक उपयोग की जाने वाली अनुमतियों की सूची दी गई है।
| कंस्टेंट | पहुंच | विवरण |
|---|---|---|
| INTERNET | नेटवर्क | HTTP अनुरोधों के लिए नेटवर्क सॉकेट खोलना |
| ACCESS_NETWORK_STATE | नेटवर्क | नेटवर्क स्थिति के बारे में जानकारी प्राप्त करना |
| ACCESS_WIFI_STATE | Wi-Fi | Wi-Fi कनेक्शन के बारे में जानकारी पढ़ना |
| VIBRATE | कंपन | डिवाइस वाइब्रेटर को नियंत्रित करना |
| BLUETOOTH | Bluetooth | Bluetooth डिवाइसों से कनेक्ट होना |
| WAKE_LOCK | पावर | प्रोसेसर को सीप मोड में जाने से रोकना |
| SET_ALARM | अलार्म | AlarmManager के माध्यम से अलार्म सेट करना |
| CHANGE_NETWORK_STATE | नेटवर्क | नेटवर्क कनेक्शन स्थिति को बदलना |
सामान्य अनुमतियाँ UI प्रदर्शन उद्देश्यों के लिए «Permission Group» में समूहीकृत नहीं होतीं। Android में समूह सेटिंग्स स्क्रीन के लिए होते हैं, जहाँ केवल खतरनाक अनुमतियाँ दिखाई जाती हैं। हालाँकि, सामान्य अनुमतियों को तर्कसंगत रूप से श्रेणियों में विभाजित किया जा सकता है: नेटवर्क (INTERNET, ACCESS_NETWORK_STATE), हार्डवेयर (VIBRATE, WAKE_LOCK), सिस्टम (SET_ALARM) और Bluetooth अनुमतियाँ।
Manifest.permission के कुछ कंस्टेंट Android के विभिन्न संस्करणों पर अपना सुरक्षा स्तर बदल सकते हैं। उदाहरण के लिए, BLUETOOTH_CONNECT Android 12+ पर runtime अनुरोद के साथ एक खतरनाक अनुमति बन गया, हालाँकि पुराने संस्करणों पर यह सामान्य था। डेवलपर्स को दस्तावेज़ीकरण के माध्यम से लक्ष्य API के लिए वर्तमान protectionLevel की जाँच करने की सलाह दी जाती है।
एक डेवलपर PackageManager के माध्यम से प्रोग्रामात्मक रूप से जाँच सकता है कि कोई अनुमति सामान्य है या नहीं। getPermissionInfo विधि PermissionInfo लौटाती है जिसका protectionLevel फ़ील्ड PermissionInfo.PROTECTION_NORMAL फ़्लैग रखता है। यह डायनेमिक हैंडलिंग और डिबगिंग के लिए उपयोगी है।
fun isNormalPermission(permission: String): Boolean {
val pm = packageManager
val info = pm.getPermissionInfo(
permission,
PackageManager.GET_META_DATA
)
return info.protectionLevel ==
PermissionInfo.PROTECTION_NORMAL
}
Normal Permission की घोषणा AndroidManifest.xml में सबसे सरल ऑपरेशन है, जिसमें केवल एक uses-permission टैग की आवश्यकता होती है। किसी अतिरिक्त protectionLevel कंफ़िगरेशन की आवश्यकता नहीं है, क्योंकि सुरक्षा स्तर सिस्टम परिभाषा द्वारा निर्धारित होता है, एप्लिकेशन मैनिफेस्ट द्वारा नहीं। डेवलपर बस पूरा कंस्टेंट नाम निर्दिष्ट करता है।
<!-- AndroidManifest.xml -->
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
android:name="android.permission.VIBRATE" />
सिस्टम इंस्टालेशन पर सभी घोषणाओं को संसाधित करता है। यदि घोषित अनुमतियों में से कम से कम एक का भी protectionLevel normal से भिन्न है, तो runtime अनुरोध की आवश्यकता होगी। INTERNET सबसे लोकप्रिय सामान्य अनुमति है, जो अधिकांश Android एप्लिकेशनों में मौजूद होता है, विशेष रूप से बे HTTP अनुरोध करते हैं या नेटवर्क से सामग्री लोड करते हैं।
सामान्य और खतरनाक अनुमतियों के साथ AndroidManifest.xml का एक पूर्ण उदाहरण अंतर को दर्शाता है: व्याकरणिक रूप से uses-permission टैग समान हैं, लेकिन runtime पर INTERNET और VIBRATE स्वचालित रूप से प्रदान किए जाएंगे, जबकि CAMERA को एक संवाद की आवश्यकता होगी।
<manifest
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Normal permissions -->
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.VIBRATE" />
<!-- Dangerous permission -->
<uses-permission
android:name="android.permission.CAMERA" />
</manifest>
लाइब्रेरीज — Google Play Services, Firebase, Glide — का उपयोग करते समय, वे Manifest Merger के माध्यम से अपने स्वयं के uses-permission अंतिम मैनिफेस्ट में जोड़ सकते हैं। उनमें से कुछ सामान्य (Firebase के लिए INTERNET), अन्य खतरनाक (Google Maps के लिए ACCESS_FINE_LOCATION) होते हैं। डेवलपर को प्रकाशन से पहले build/outputs/logs/manifest-merger-report.txt में अंतिम मर्ज्ड मैनिफेस्ट की जाँच करनी चाहिए।
Normal Permission की दो मौलिक सीमाएँ हैं: उपयोगकर्ता द्वारा इसे रव्क करने में असमर्थता और प्रबंधन UI का अभाव। यदि उपयोगकर्ता एप्लिकेशन पर भरोसा नहीं करता है लेकिन सामान्य अनुमति पहले ही स्वचालित रूप से प्रदान कर दी गई है — एकमात्र समाधान एप्लिकेशन को हटाना है। यह एक निश्चित जोखिम पैदा करता है, क्योंकि सामान्य अनुमतियों को Android के मानक सदनों से अवरुद्ध नहीं किया जा सकता।
एक अतिरिक्त सीमा एकाधिक प्रोफ़ाइल (Work Profile, Multiple Users) वाले डिवाइसों पर दिखाई देती है। Normal Permission सभी प्रोफ़ाइल्स को एक साथ प्रदान किया जाता है — एप्लिकेशन अनुमति को केवल एक तक सीमित नहीं कर सकता। एंटरप्राइज परिदृश्यों में इसे Managed Configurations के माध्यम से संबोधित किया जाता है।
यह जाँचना संभव नहीं है कि कोई एप्लिकेशन किसी समय Normal Permission का उपयोग कर रहा है या नहीं। सिस्टम विधि checkSelfPermission केवल खतरनाक अनुमतियों के लिए काम करती है। सामान्य अनुमतियों के लिए यह हमेशा PERMISSION_GRANTED लौटाती है, जो वास्तविक गतिविधि को प्रतिबिम्बित नहीं करता। सुरक्षा ऑडिट और एप्लिकेशन व्यवहार विश्लेषण के दौरान इसे ध्यान में रखना चाहिए।
यह भी याद रखना चाहिए कि कुछ डिवाइस निर्माता (Xiaomi, Huawei, Samsung) अनुमतियों के मानक व्यवहार में बदलाव करते हैं। उनके फ़र्मवेयर पर, Normal Permission को MIUI या EMUI शेल में अतिरिक्त अनुमतियों की आवश्यकता हो सकती है। डेवलपर्स को विभिन्न वेंडर्स के वास्तविक डिवाइसों पर परीक्षण करने की सलाह दी जाती है।
अक्सर पूछे जाने वाले प्रश्न
Normal Permission इंस्टालेशन पर बिना संवाद के स्वचालित रूप से प्रदान की जाती है। Dangerous को उपयोगकर्ता की स्पष्ट सहमति के साथ runtime अनुरोध की आवश्यकता होती है और इसे सेटिंग्स के माध्यम से रव्क किया जा सकता है। Normal ProtectionLevel normal का उपयोग करता है, Dangerous protectionLevel dangerous का।
नहीं, सामान्य अनुमतियों के लिए AndroidManifest.xml में uses-permission घोषित करना पर्याप्त है। अनुरोध कोड की आवश्यकता नहीं है — सिस्टम स्वचालित रूप से पहुंच प्रदान करता है। यह उन्हें खतरनाक अनुमतियों से अलग करता है, जहाँ ActivityCompat.requestPermissions की आवश्यकता होती है।
सबसे अधिक उपयोग किए जाने वाले: INTERNET (नेटवर्क अनुरोध), ACCESS_NETWORK_STATE (कनेक्शन जाँच), VIBRATE (हैप्टिक फ़ीडबैक) और WAKE_LOCK (प्रोसेसर को जाग्रत रखना)। लगभग हर Android एप्लिकेशन कम से कम INTERNET का उपयोग करता है।
नहीं, Normal Permission को एप्लिकेशन सेटिंग्स के माध्यम से रव्क नहीं किया जा सकता। पहुंच को रोकने का एकमात्र तरीका एप्लिकेशन को हटाना है। यह खतरनाक अनुमतियों से एक मुख्य अंतर है, जिन्हें उपयोगकर्ता किसी भी समय अक्षम कर सकता है।
PackageManager.getPermissionInfo का उपयोग करें, अनुमति का स्ट्रिंग नाम पास करें। यह विधि PermissionInfo को protectionLevel फ़ील्ड के साथ लौटाती है। श्रेणी निर्धारित करने के लिए इसे PermissionInfo.PROTECTION_NORMAL या PROTECTION_DANGEROUS कंस्टेंट से तुलना करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें