ऐप्लिकेशन अनुमतियों के सबसे सही तरीके

अनुमति मांगने के अनुरोध, किसी डिवाइस पर उपलब्ध संवेदनशील जानकारी की सुरक्षा करते हैं. इसका इस्तेमाल सिर्फ़ तब किया जाना चाहिए, जब आपके ऐप्लिकेशन के काम करने के लिए जानकारी को ऐक्सेस करना ज़रूरी हो. इस दस्तावेज़ में ऐसे तरीकों के बारे में सलाह दी गई है जिन्हें इस्तेमाल करने पर, ऐसी जानकारी को ऐक्सेस किए बिना उसी (या बेहतर) फ़ंक्शन को इस्तेमाल किया जा सकता है. इसमें इनके बारे में पूरी जानकारी नहीं दी गई है कि Android ऑपरेटिंग सिस्टम में अनुमतियां कैसे काम करती हैं.

Android की अनुमतियों के बारे में ज़्यादा जानने के लिए, कृपया अनुमतियों की खास जानकारी देखें. अपने कोड में अनुमतियों का इस्तेमाल करने के तरीके के बारे में जानने के लिए, ऐप्लिकेशन अनुमतियों के लिए अनुरोध करना देखें.

Android 6.0 और उसके बाद के वर्शन में अनुमतियां

Android 6.0 (एपीआई लेवल 23) और उसके बाद के वर्शन में, ऐप्लिकेशन इंस्टॉल होने से पहले के बजाय, रनटाइम के दौरान उपयोगकर्ता से अनुमतियों का अनुरोध कर सकते हैं. इससे ऐप्लिकेशन को अनुमतियों का अनुरोध करने की अनुमति मिलती है. ऐसा तब किया जाता है, जब ऐप्लिकेशन को सेवाओं या सेवाओं से सुरक्षित किए गए डेटा की ज़रूरत होती है. हालांकि, इससे ऐप्लिकेशन के व्यवहार में ज़रूरी नहीं है कि कोई बदलाव हो, लेकिन उपयोगकर्ता के संवेदनशील डेटा को मैनेज करने के तरीके में कुछ बदलाव होते हैं:

स्थिति के हिसाब से संदर्भ को बेहतर बनाया

आपके ऐप्लिकेशन के हिसाब से, रनटाइम के दौरान उपयोगकर्ताओं से पूछा जाता है कि वे उन अनुमतियों के ग्रुप में शामिल फ़ंक्शन को ऐक्सेस करने की अनुमति दें या नहीं. उपयोगकर्ता, अनुमति के अनुरोध के संदर्भ को लेकर ज़्यादा संवेदनशील होते हैं. अगर अनुरोध और आपके ऐप्लिकेशन के मकसद में कोई अंतर है, तो उपयोगकर्ता को इस बारे में पूरी जानकारी देना ज़्यादा ज़रूरी हो जाता है कि अनुमति का अनुरोध क्यों किया जा रहा है. जब भी संभव हो, आपको अनुरोध के समय और उपयोगकर्ता के अनुरोध को अस्वीकार करने पर, फ़ॉलो-अप डायलॉग में, अपने अनुरोध के बारे में जानकारी देनी चाहिए.

अनुमति के अनुरोध को स्वीकार किए जाने की संभावना बढ़ाने के लिए, सिर्फ़ तब अनुरोध करें जब किसी खास सुविधा की ज़रूरत हो. उदाहरण के लिए, माइक्रोफ़ोन का ऐक्सेस पाने के लिए, सिर्फ़ तब प्रॉम्प्ट दिखाएं, जब उपयोगकर्ता माइक्रोफ़ोन बटन पर क्लिक करे. उपयोगकर्ता, ऐसी अनुमति देने की संभावना ज़्यादा रखते हैं जिसकी उन्हें ज़रूरत है.

अनुमतियां देने में ज़्यादा सुविधाएं

उपयोगकर्ता, अनुमतियों का अनुरोध किए जाने पर और सेटिंग में जाकर, अलग-अलग अनुमतियों का ऐक्सेस अस्वीकार कर सकते हैं. हालांकि, इस वजह से ऐप्लिकेशन के काम न करने पर, वे हैरान हो सकते हैं. यह पता लगाना अच्छा होता है कि कितने उपयोगकर्ता अनुमतियों (उदाहरण के लिए, Google Analytics का इस्तेमाल करने की अनुमति) को अस्वीकार कर रहे हैं. इससे, उस अनुमति पर निर्भर रहने से बचने के लिए, अपने ऐप्लिकेशन को फिर से तैयार किया जा सकता है या यह बेहतर तरीके से बताया जा सकता है कि आपके ऐप्लिकेशन को सही तरीके से काम करने के लिए, अनुमति की ज़रूरत क्यों है. आपको यह भी पक्का करना चाहिए कि जब उपयोगकर्ता अनुमतियों के अनुरोधों को अस्वीकार करते हैं या सेटिंग में जाकर अनुमतियों को टॉगल करके बंद करते हैं, तब आपका ऐप्लिकेशन अपवादों को मैनेज करता है.

लेन-देन से जुड़ी समस्याओं में बढ़ोतरी

उपयोगकर्ताओं को अनुमति ग्रुप के लिए, एक सेट के तौर पर नहीं, बल्कि अलग-अलग ऐक्सेस देने के लिए कहा जाता है. इस वजह से, अनुरोध की जा रही अनुमतियों की संख्या को कम करना बहुत ज़रूरी हो जाता है. इससे, उपयोगकर्ताओं को अनुमतियां देने का बोझ बढ़ जाता है. इसलिए, इस बात की संभावना बढ़ जाती है कि कम से कम किसी एक अनुरोध को अस्वीकार किया जाएगा.

ऐसी अनुमतियां जिनके लिए डिफ़ॉल्ट हैंडलर बनाना ज़रूरी है

कुछ ऐप्लिकेशन, कॉल लॉग और एसएमएस मैसेज से जुड़ी उपयोगकर्ता की संवेदनशील जानकारी के ऐक्सेस पर निर्भर होते हैं. अगर आपको कॉल लॉग और मैसेज (एसएमएस) से जुड़ी अनुमतियों का अनुरोध करना है और अपने ऐप्लिकेशन को Play Store पर पब्लिश करना है, तो आपको रनटाइम की इन अनुमतियों का अनुरोध करने से पहले, उपयोगकर्ता को सिस्टम के मुख्य फ़ंक्शन के लिए, अपने ऐप्लिकेशन को डिफ़ॉल्ट हैंडलर के तौर पर सेट करने के लिए कहना होगा.

डिफ़ॉल्ट हैंडलर के बारे में ज़्यादा जानकारी के लिए, सिर्फ़ डिफ़ॉल्ट हैंडलर में इस्तेमाल की जाने वाली अनुमतियों के बारे में गाइड देखें. इसमें, उपयोगकर्ताओं को डिफ़ॉल्ट हैंडलर प्रॉम्प्ट दिखाने के बारे में भी दिशा-निर्देश शामिल हैं.

उन लाइब्रेरी को जानें जिनके साथ आप काम कर रहे हैं

कभी-कभी, आपके ऐप्लिकेशन में इस्तेमाल की जाने वाली लाइब्रेरी के लिए अनुमतियां ज़रूरी होती हैं. उदाहरण के लिए, ज़रूरी फ़ंक्शन लागू करने के लिए, विज्ञापन और आंकड़ों की लाइब्रेरी को LOCATION अनुमति ग्रुप का ऐक्सेस चाहिए. हालांकि, उपयोगकर्ता के नज़रिए से, अनुमति का अनुरोध लाइब्रेरी से नहीं, बल्कि आपके ऐप्लिकेशन से आता है.

उपयोगकर्ता, एक ही तरह की सुविधा के लिए कम अनुमतियां मांगने वाले ऐप्लिकेशन चुनते हैं. इसी तरह, डेवलपर को अपनी लाइब्रेरी की समीक्षा करनी चाहिए और ऐसे तीसरे पक्ष के SDK टूल चुनने चाहिए जो ग़ैर-ज़रूरी अनुमतियों का इस्तेमाल न करते हों. उदाहरण के लिए, अगर आपने ऐसी लाइब्रेरी का इस्तेमाल किया है जो जगह की जानकारी की सुविधा उपलब्ध कराती है, तो पक्का करें कि आपने 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> ...
  • अनुमतियों का इस्तेमाल करने वाली सेवाओं के लिए, अपने ऐप्लिकेशन का विश्लेषण करें.

अन्य संसाधन