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

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

अन्य संसाधन