विशेष अनुमतियों का अनुरोध करें

खास अनुमति, सिस्टम के उन संसाधनों के ऐक्सेस को सुरक्षित रखती है जो खास तौर पर संवेदनशील होते हैं या सीधे तौर पर उपयोगकर्ता की निजता से नहीं जुड़े होते हैं. ये अनुमतियां, ऐप्लिकेशन इंस्टॉल करते समय दी जाने वाली अनुमतियों और रनटाइम अनुमतियों से अलग होती हैं.

पहली इमेज. सिस्टम सेटिंग में मौजूद, ऐप्लिकेशन के लिए खास ऐक्सेस स्क्रीन.

खास अनुमतियों के कुछ उदाहरण यहां दिए गए हैं:

  • एग्ज़ैक्ट अलार्म शेड्यूल करना.
  • अन्य ऐप्लिकेशन के ऊपर दिखाया जा रहा है और उस पर ड्रॉ किया जा रहा है.
  • सभी स्टोरेज डेटा को ऐक्सेस करना.

खास अनुमति का एलान करने वाले ऐप्लिकेशन, सिस्टम सेटिंग में ऐप्लिकेशन के लिए खास ऐक्सेस पेज पर दिखते हैं (पहली इमेज). ऐप्लिकेशन को खास अनुमति देने के लिए, उपयोगकर्ता को इस पेज पर जाना होगा: सेटिंग > ऐप्लिकेशन > ऐप्लिकेशन के लिए खास ऐक्सेस.

वर्कफ़्लो

खास अनुमति का अनुरोध करने के लिए, यह तरीका अपनाएं:

  1. अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में, उन खास अनुमतियों का एलान करें जिनके लिए आपका ऐप्लिकेशन अनुरोध कर सकता है.
  2. अपने ऐप्लिकेशन के यूज़र एक्सपीरियंस को इस तरह से डिज़ाइन करें कि ऐप्लिकेशन में की जाने वाली खास कार्रवाइयां, खास अनुमतियों से जुड़ी हों. उपयोगकर्ताओं को बताएं कि किन कार्रवाइयों के लिए, उन्हें आपके ऐप्लिकेशन को उपयोगकर्ता के निजी डेटा को ऐक्सेस करने की अनुमति देनी पड़ सकती है.
  3. उपयोगकर्ता के अनुरोध का इंतज़ार करें, ताकि वह आपके ऐप्लिकेशन में कोई ऐसा टास्क या कार्रवाई शुरू कर सके जिसके लिए, उपयोगकर्ता के निजी डेटा को ऐक्सेस करने की ज़रूरत हो. ऐसे में, आपका ऐप्लिकेशन उस डेटा को ऐक्सेस करने के लिए, खास अनुमति का अनुरोध कर सकता है.
  4. देखें कि उपयोगकर्ता ने आपके ऐप्लिकेशन को वह खास अनुमति पहले ही दे दी है या नहीं. इसके लिए, हर अनुमति के कस्टम चेकिंग फ़ंक्शन का इस्तेमाल करें. अनुमति मिलने पर, आपका ऐप्लिकेशन उपयोगकर्ता के निजी डेटा को ऐक्सेस कर सकता है. अगर ऐसा नहीं है, तो अगले चरण पर जाएं. ध्यान दें: आपको यह देखना होगा कि आपके पास हर बार वह अनुमति है या नहीं, जब आपको कोई ऐसी कार्रवाई करनी हो जिसके लिए उस अनुमति की ज़रूरत हो.
  5. यूज़र इंटरफ़ेस (यूआई) एलिमेंट में उपयोगकर्ता को वजह बताएं. इससे उपयोगकर्ता को साफ़ तौर पर यह पता चलेगा कि आपका ऐप्लिकेशन कौनसा डेटा ऐक्सेस करने की कोशिश कर रहा है. साथ ही, यह भी पता चलेगा कि खास अनुमति देने पर, ऐप्लिकेशन उपयोगकर्ता को क्या फ़ायदे दे सकता है. इसके अलावा, आपका ऐप्लिकेशन लोगों को अनुमति देने के लिए सिस्टम सेटिंग पर भेजता है. इसलिए, इसमें ऐसे छोटे निर्देश भी शामिल करें जिनसे लोगों को यह पता चले कि वे वहां अनुमति कैसे दे सकते हैं. अनुमति देने की वजह बताने वाले यूज़र इंटरफ़ेस (यूआई) में, उपयोगकर्ता को अनुमति न देने का विकल्प साफ़ तौर पर दिखना चाहिए. जब उपयोगकर्ता वजह स्वीकार कर ले, तब अगले चरण पर जाएं.
  6. खास अनुमति का अनुरोध करें, जो आपके ऐप्लिकेशन को उपयोगकर्ता के निजी डेटा को ऐक्सेस करने के लिए ज़रूरी है. इसमें सिस्टम सेटिंग में मौजूद उस पेज पर जाने का इरादा शामिल होता है जहां उपयोगकर्ता अनुमति दे सकता है. रनटाइम अनुमतियों के उलट, इसमें अनुमति के लिए कोई पॉप-अप डायलॉग नहीं होता.
  7. onResume() तरीके में, उपयोगकर्ता के जवाब की जांच करें. देखें कि उसने खास अनुमति देने का विकल्प चुना है या नहीं.
  8. अगर उपयोगकर्ता ने आपके ऐप्लिकेशन को अनुमति दी है, तो आपके पास उपयोगकर्ता के निजी डेटा को ऐक्सेस करने का विकल्प होता है. अगर उपयोगकर्ता ने अनुमति देने से इनकार कर दिया है, तो ऐप्लिकेशन के अनुभव को बेहतर बनाएं, ताकि वह उपयोगकर्ता को ऐसी सुविधाएं दे सके जिनके लिए उस जानकारी की ज़रूरत नहीं होती जिसे उस अनुमति के तहत सुरक्षित किया गया है.
दूसरी इमेज. Android पर खास अनुमतियों का एलान करने और उनके लिए अनुरोध करने का वर्कफ़्लो.

खास अनुमतियों का अनुरोध करना

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

यहां दिए गए सैंपल कोड में बताया गया है कि उपयोगकर्ताओं से SCHEDULE_EXACT_ALARMS की खास अनुमति का अनुरोध कैसे किया जाता है:

val alarmManager = getSystemService<AlarmManager>()!!
when {
   // if permission is granted, proceed with scheduling exact alarms…
   alarmManager.canScheduleExactAlarms() -> {
       alarmManager.setExact(...)
   }
   else -> {
       // ask users to grant the permission in the corresponding settings page
       startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
   }
}

onResume() में अनुमति की जांच करने और उपयोगकर्ता के फ़ैसलों को मैनेज करने के लिए सैंपल कोड:

override fun onResume() {
   // ...

   if (alarmManager.canScheduleExactAlarms()) {
       // proceed with the action (setting exact alarms)
       alarmManager.setExact(...)
   }
   else {
       // permission not yet approved. Display user notice and gracefully degrade
       your app experience.
       alarmManager.setWindow(...)
   }
}

सबसे सही तरीके और सुझाव

यहां कुछ सबसे सही तरीके और ज़रूरी बातें दी गई हैं. इनका इस्तेमाल करके, खास अनुमतियों का अनुरोध किया जा सकता है.

हर अनुमति की जांच करने का अपना तरीका होता है

खास अनुमतियां, रनटाइम अनुमतियों से अलग तरीके से काम करती हैं. इसके बजाय, अनुमतियों के एपीआई रेफ़रंस पेज पर जाएं और हर खास अनुमति के लिए, कस्टम ऐक्सेस की जांच करने वाले फ़ंक्शन का इस्तेमाल करें. उदाहरण के लिए, SCHEDULE_EXACT_ALARMS अनुमति के लिए AlarmManager#canScheduleExactAlarms() और MANAGE_EXTERNAL_STORAGE अनुमति के लिए Environment#isExternalStorageManager().

कॉन्टेक्स्ट के हिसाब से अनुरोध करना

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

अनुरोध के बारे में जानकारी

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