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

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

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

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

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

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

वर्कफ़्लो

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

  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 अनुमति का अनुरोध तब तक न करें, जब तक उपयोगकर्ता किसी खास समय पर ईमेल भेजने के लिए शेड्यूल न कर दे.

अनुरोध के बारे में बताएं

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