अनुमति के अनुरोधों से, डिवाइस पर मौजूद संवेदनशील जानकारी सुरक्षित रहती है. इनका इस्तेमाल सिर्फ़ तब किया जाना चाहिए, जब आपके ऐप्लिकेशन के काम करने के लिए जानकारी को ऐक्सेस करना ज़रूरी हो. इस दस्तावेज़ में, ऐसी जानकारी को ऐक्सेस किए बिना, उसी (या बेहतर) सुविधा को हासिल करने के तरीकों के बारे में सुझाव दिए गए हैं. इसमें, 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 की अनुमतियों के लिए, Material Design के दिशा-निर्देश
- Android Marshmallow 6.0: Asking For Permission: इस वीडियो में, Android के रनटाइम की अनुमतियों वाले मॉडल के बारे में बताया गया है. साथ ही, उपयोगकर्ताओं से अनुमतियां मांगने का सही तरीका बताया गया है.
- बताएं कि ऐप्लिकेशन को अनुमतियों की ज़रूरत क्यों है
- यूनीक आइडेंटिफ़ायर के लिए सबसे सही तरीके