अनुमति के अनुरोधों से, डिवाइस पर मौजूद संवेदनशील जानकारी सुरक्षित रहती है. इनका इस्तेमाल सिर्फ़ तब किया जाना चाहिए, जब आपके ऐप्लिकेशन के काम करने के लिए जानकारी को ऐक्सेस करना ज़रूरी हो. इस दस्तावेज़ में, ऐसी जानकारी को ऐक्सेस किए बिना, उसी (या बेहतर) सुविधा को हासिल करने के तरीकों के बारे में सलाह दी गई है. इसमें, Android ऑपरेटिंग सिस्टम में अनुमतियों के काम करने के तरीके के बारे में पूरी जानकारी नहीं दी गई है.
Android की अनुमतियों के बारे में सामान्य जानकारी पाने के लिए, कृपया अनुमतियों की खास जानकारी देखें. अपने कोड में अनुमतियों का इस्तेमाल करने के तरीके के बारे में जानने के लिए, ऐप्लिकेशन की अनुमतियों का अनुरोध करना लेख पढ़ें.
Android 6.0 और इसके बाद के वर्शन में अनुमतियां
Android 6.0 (एपीआई लेवल 23) और इसके बाद के वर्शन में, ऐप्लिकेशन इंस्टॉल करने से पहले अनुमति मांगने के बजाय, रनटाइम के दौरान उपयोगकर्ता से अनुमति मांग सकते हैं. इससे ऐप्लिकेशन को, उन सेवाओं या डेटा के लिए अनुमतियों का अनुरोध करने की अनुमति मिलती है जिनकी सुरक्षा इन सेवाओं के ज़रिए की जाती है. इससे ऐप्लिकेशन के व्यवहार में (ज़रूरी नहीं कि) कोई बदलाव हो. हालांकि, इससे उपयोगकर्ता के संवेदनशील डेटा को हैंडल करने के तरीके में कुछ बदलाव होते हैं:
ज़्यादा जानकारी
रनटाइम के दौरान, उपयोगकर्ताओं को आपके ऐप्लिकेशन के संदर्भ में, अनुमति के लिए प्रॉम्प्ट किया जाता है. इससे वे अनुमति ग्रुप में शामिल सुविधाओं को ऐक्सेस कर पाते हैं. उपयोगकर्ता इस बात को लेकर ज़्यादा संवेदनशील होते हैं कि किस संदर्भ में अनुमति का अनुरोध किया गया है. अगर आपके अनुरोध और ऐप्लिकेशन के मकसद के बीच कोई अंतर है, तो उपयोगकर्ता को यह बताना और भी ज़रूरी हो जाता है कि आपने अनुमति का अनुरोध क्यों किया है. जब भी संभव हो, आपको अनुरोध के समय और अनुरोध अस्वीकार किए जाने पर फ़ॉलो-अप डायलॉग में, अनुरोध की वजह बतानी चाहिए.
अनुमति के अनुरोध को स्वीकार किए जाने की संभावना बढ़ाने के लिए, सिर्फ़ तब प्रॉम्प्ट करें, जब किसी सुविधा की ज़रूरत हो. उदाहरण के लिए, जब कोई व्यक्ति माइक्रोफ़ोन बटन पर क्लिक करे, तब ही उससे माइक्रोफ़ोन का ऐक्सेस मांगा जाना चाहिए. इस बात की संभावना ज़्यादा होती है कि उपयोगकर्ता, उस अनुमति को स्वीकार करें जिसकी उन्हें उम्मीद है.
अनुमतियां देने में ज़्यादा आसानी
उपयोगकर्ता, अनुमतियों का अनुरोध किए जाने पर और सेटिंग में जाकर, किसी अनुमति को अस्वीकार कर सकते हैं. हालांकि, ऐसा करने पर भी उन्हें हैरानी हो सकती है, क्योंकि इससे ऐप्लिकेशन की कुछ सुविधाएं काम नहीं करती हैं. यह देखना अच्छा होता है कि कितने उपयोगकर्ता अनुमतियां अस्वीकार कर रहे हैं. उदाहरण के लिए, Google Analytics का इस्तेमाल करके यह देखा जा सकता है. इससे, आपके पास दो विकल्प होते हैं. पहला, अपने ऐप्लिकेशन को इस तरह से फिर से तैयार करें कि उसे उस अनुमति की ज़रूरत न पड़े. दूसरा, यह बेहतर तरीके से बताएं कि आपके ऐप्लिकेशन को ठीक से काम करने के लिए उस अनुमति की ज़रूरत क्यों है. आपको यह भी पक्का करना चाहिए कि जब उपयोगकर्ता, अनुमति के अनुरोधों को अस्वीकार करते हैं या सेटिंग में अनुमतियों को टॉगल करके बंद करते हैं, तो आपका ऐप्लिकेशन अपवादों को हैंडल करता हो.
लेन-देन से जुड़ी ज़िम्मेदारी बढ़ना
उपयोगकर्ताओं से, अनुमति ग्रुप के लिए अलग-अलग ऐक्सेस देने के लिए कहा जाता है, न कि एक सेट के तौर पर. इसलिए, यह बहुत ज़रूरी है कि आप कम से कम अनुमतियों का अनुरोध करें. इससे अनुमतियां देने के लिए, उपयोगकर्ता पर ज़्यादा दबाव पड़ता है. इसलिए, इस बात की संभावना बढ़ जाती है कि कम से कम एक अनुरोध अस्वीकार कर दिया जाएगा.
डिफ़ॉल्ट हैंडलर बनने के लिए ज़रूरी अनुमतियां
कुछ ऐप्लिकेशन, कॉल लॉग और एसएमएस से जुड़ी संवेदनशील जानकारी ऐक्सेस करने पर निर्भर होते हैं. अगर आपको कॉल लॉग और एसएमएस मैसेज से जुड़ी अनुमतियों का अनुरोध करना है और अपने ऐप्लिकेशन को Play Store पर पब्लिश करना है, तो आपको उपयोगकर्ता को यह सूचना देनी होगी कि वह आपके ऐप्लिकेशन को सिस्टम के मुख्य फ़ंक्शन के लिए डिफ़ॉल्ट हैंडलर के तौर पर सेट करे. इसके बाद ही, रनटाइम की इन अनुमतियों का अनुरोध किया जा सकेगा.
डिफ़ॉल्ट हैंडलर के बारे में ज़्यादा जानकारी के लिए, सिर्फ़ डिफ़ॉल्ट हैंडलर में इस्तेमाल की जाने वाली अनुमतियों के बारे में गाइड देखें. इसमें उपयोगकर्ताओं को डिफ़ॉल्ट हैंडलर का प्रॉम्प्ट दिखाने के बारे में दिशा-निर्देश भी शामिल हैं.
जानें कि आपको किन लाइब्रेरी के साथ काम करना है
कभी-कभी, आपके ऐप्लिकेशन में इस्तेमाल की जाने वाली लाइब्रेरी को अनुमतियों की ज़रूरत होती है. उदाहरण के लिए, विज्ञापन और आंकड़ों से जुड़ी लाइब्रेरी को ज़रूरी फ़ंक्शन लागू करने के लिए, LOCATION अनुमतियों के ग्रुप का ऐक्सेस चाहिए होता है. हालांकि, उपयोगकर्ता के नज़रिए से, अनुमति का अनुरोध आपके ऐप्लिकेशन से आता है, न कि लाइब्रेरी से.
उपयोगकर्ता ऐसे ऐप्लिकेशन चुनते हैं जो एक जैसी सुविधा के लिए कम अनुमतियों का इस्तेमाल करते हैं. इसी तरह, डेवलपर को अपनी लाइब्रेरी की समीक्षा करनी चाहिए और तीसरे पक्ष के ऐसे एसडीके चुनने चाहिए जो गैर-ज़रूरी अनुमतियों का इस्तेमाल नहीं करते हैं. उदाहरण के लिए, अगर आपको जगह की जानकारी देने वाली लाइब्रेरी का इस्तेमाल करना है, तो पक्का करें कि आपने FINE_LOCATION अनुमति का अनुरोध न किया हो. ऐसा तब तक करें, जब तक आपको जगह के हिसाब से टारगेटिंग की सुविधा का इस्तेमाल न करना हो.
बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की सुविधा सीमित करना
जब आपका ऐप्लिकेशन बैकग्राउंड में चल रहा हो, तब जगह की जानकारी का ऐक्सेस, ऐप्लिकेशन के मुख्य फ़ंक्शन के लिए ज़रूरी होना चाहिए. साथ ही, इससे लोगों को साफ़ तौर पर फ़ायदा मिलना चाहिए.
अनुमतियों के दोनों मॉडल के लिए टेस्ट
Android 6.0 (एपीआई लेवल 23) और इसके बाद के वर्शन में, उपयोगकर्ता ऐप्लिकेशन इंस्टॉल करते समय अनुमतियां देने और रद्द करने के बजाय, रन टाइम के दौरान ऐसा करते हैं. इसलिए, आपको अलग-अलग स्थितियों में अपने ऐप्लिकेशन की जांच करनी होगी. Android 6.0 से पहले, यह माना जाता था कि अगर आपका ऐप्लिकेशन चल रहा है, तो उसके पास वे सभी अनुमतियां हैं जिनके बारे में उसने ऐप्लिकेशन मेनिफ़ेस्ट में बताया है. अब उपयोगकर्ता, एपीआई लेवल के बावजूद किसी भी ऐप्लिकेशन के लिए अनुमतियां चालू या बंद कर सकता है. आपको यह जांच करनी चाहिए कि अनुमति से जुड़े अलग-अलग मामलों में, आपका ऐप्लिकेशन ठीक से काम कर रहा है या नहीं.
यहां दी गई सलाह से, आपको एपीआई लेवल 23 या उसके बाद के वर्शन पर काम करने वाले डिवाइसों पर, अनुमतियों से जुड़ी कोड की समस्याओं का पता लगाने में मदद मिलेगी:
- अपने ऐप्लिकेशन की मौजूदा अनुमतियों और उनसे जुड़े कोड पाथ की पहचान करें.
- अनुमति से सुरक्षित सेवाओं और डेटा के लिए, उपयोगकर्ता फ़्लो की जांच करें.
- अनुमति देने या रद्द करने के अलग-अलग कॉम्बिनेशन के साथ टेस्ट करें. उदाहरण के लिए, कोई कैमरा ऐप्लिकेशन अपने मेनिफ़ेस्ट में
CAMERA,READ_CONTACTS, औरACCESS_FINE_LOCATIONको शामिल कर सकता है. आपको इन सभी अनुमतियों को चालू और बंद करके, ऐप्लिकेशन की जांच करनी चाहिए. इससे यह पक्का किया जा सकेगा कि ऐप्लिकेशन, अनुमति से जुड़े सभी कॉन्फ़िगरेशन को सही तरीके से मैनेज कर सकता है. - कमांड लाइन से अनुमतियां मैनेज करने के लिए, adb टूल का इस्तेमाल करें:
- ग्रुप के हिसाब से अनुमतियों और उनकी स्थिति की सूची बनाएं:
$ adb shell pm list permissions -d -g
- एक या उससे ज़्यादा अनुमतियां दें या रद्द करें:
$ adb shell pm [grant|revoke] <permission-name> ...
- ग्रुप के हिसाब से अनुमतियों और उनकी स्थिति की सूची बनाएं:
- अपने ऐप्लिकेशन का विश्लेषण करके पता लगाएं कि कौनसी सेवाएं अनुमतियों का इस्तेमाल करती हैं.
अन्य संसाधन
- Android की अनुमतियों के लिए, मटीरियल डिज़ाइन के दिशा-निर्देश
- Android Marshmallow 6.0: Asking For Permission: इस वीडियो में, Android के रनटाइम की अनुमतियों वाले मॉडल के बारे में बताया गया है. साथ ही, उपयोगकर्ताओं से अनुमतियां मांगने का सही तरीका बताया गया है.
- बताएं कि ऐप्लिकेशन को अनुमतियों की ज़रूरत क्यों है
- यूनीक आइडेंटिफ़ायर के लिए सबसे सही तरीके