खास अनुमति, सिस्टम के उन संसाधनों के ऐक्सेस को सुरक्षित रखती है जो खास तौर पर संवेदनशील होते हैं या सीधे तौर पर उपयोगकर्ता की निजता से नहीं जुड़े होते हैं. ये अनुमतियां, ऐप्लिकेशन इंस्टॉल करते समय दी जाने वाली अनुमतियों और रनटाइम अनुमतियों से अलग होती हैं.
खास अनुमतियों के कुछ उदाहरण यहां दिए गए हैं:
- एग्ज़ैक्ट अलार्म शेड्यूल करना.
- दूसरे ऐप्लिकेशन के ऊपर दिखाया जा रहा है और उस पर ड्रॉ किया जा रहा है.
- सभी स्टोरेज डेटा को ऐक्सेस करना.
खास अनुमति का एलान करने वाले ऐप्लिकेशन, सिस्टम सेटिंग में खास ऐप्लिकेशन के लिए ऐक्सेस पेज पर दिखते हैं (पहली इमेज). ऐप्लिकेशन को खास अनुमति देने के लिए, उपयोगकर्ता को इस पेज पर जाना होगा: सेटिंग > ऐप्लिकेशन > ऐप्लिकेशन के लिए खास ऐक्सेस.
वर्कफ़्लो
खास अनुमति का अनुरोध करने के लिए, यह तरीका अपनाएं:
- अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में, खास अनुमतियों का एलान करें. ये वे अनुमतियां हैं जिनके लिए आपका ऐप्लिकेशन अनुरोध कर सकता है.
- अपने ऐप्लिकेशन के यूज़र एक्सपीरियंस (UX) को इस तरह से डिज़ाइन करें कि ऐप्लिकेशन में की जाने वाली खास कार्रवाइयां, खास अनुमतियों से जुड़ी हों. लोगों को बताएं कि किन कार्रवाइयों के लिए, उन्हें आपके ऐप्लिकेशन को निजी डेटा ऐक्सेस करने की अनुमति देनी पड़ सकती है.
- उपयोगकर्ता के निजी डेटा को ऐक्सेस करने की ज़रूरत वाले टास्क या कार्रवाई को शुरू करने के लिए, उपयोगकर्ता के इंतज़ार करें. ऐसे में, आपका ऐप्लिकेशन उस डेटा को ऐक्सेस करने के लिए, खास अनुमति का अनुरोध कर सकता है.
- देखें कि उपयोगकर्ता ने आपके ऐप्लिकेशन को खास अनुमति पहले से दी है या नहीं. इसके लिए, हर अनुमति के कस्टम चेकिंग फ़ंक्शन का इस्तेमाल करें. अनुमति मिलने पर, आपका ऐप्लिकेशन उपयोगकर्ता के निजी डेटा को ऐक्सेस कर सकता है. अगर ऐसा नहीं है, तो अगले चरण पर जाएं. ध्यान दें: आपको यह देखना होगा कि हर बार कोई ऐसी कार्रवाई करने के लिए आपके पास अनुमति है या नहीं जिसके लिए अनुमति की ज़रूरत होती है.
- उपयोगकर्ता को यूज़र इंटरफ़ेस (यूआई) एलिमेंट में, अनुमति मांगने की वजह बताएं. इसमें साफ़ तौर पर यह जानकारी दें कि आपका ऐप्लिकेशन कौनसा डेटा ऐक्सेस करने की कोशिश कर रहा है. साथ ही, यह भी बताएं कि खास अनुमति देने पर, ऐप्लिकेशन उपयोगकर्ता को क्या फ़ायदे दे सकता है. इसके अलावा, आपका ऐप्लिकेशन अनुमति देने के लिए उपयोगकर्ताओं को सिस्टम सेटिंग पर भेजता है. इसलिए, इसमें ऐसे छोटे निर्देश भी शामिल करें जिनसे यह पता चले कि उपयोगकर्ता वहां अनुमति कैसे दे सकते हैं. अनुमति देने की वजह बताने वाले यूज़र इंटरफ़ेस (यूआई) में, उपयोगकर्ता को अनुमति देने से ऑप्ट-आउट करने का विकल्प साफ़ तौर पर दिखना चाहिए. जब उपयोगकर्ता वजह स्वीकार कर ले, तब अगले चरण पर जाएं.
- ऐसी खास अनुमति का अनुरोध करें जो आपके ऐप्लिकेशन को निजी उपयोगकर्ता डेटा को ऐक्सेस करने के लिए ज़रूरी है. इसमें सिस्टम सेटिंग में मौजूद उस पेज पर जाने का इरादा शामिल होता है जहां उपयोगकर्ता अनुमति दे सकता है. रनटाइम की अनुमतियों के उलट, इसमें अनुमति का कोई डायलॉग नहीं होता.
onResume()तरीके में, उपयोगकर्ता के जवाब की जांच करें. देखें कि उसने खास अनुमति देने का विकल्प चुना है या नहीं.- अगर उपयोगकर्ता ने आपके ऐप्लिकेशन को अनुमति दी है, तो आपके पास उपयोगकर्ता के निजी डेटा को ऐक्सेस करने का विकल्प होता है. अगर उपयोगकर्ता ने अनुमति नहीं दी है, तो ऐप्लिकेशन के काम करने के तरीके को इस तरह से बदलें कि उपयोगकर्ता को ऐप्लिकेशन की सुविधाएं मिलती रहें. हालांकि, उसे वह जानकारी न मिले जिसे इस अनुमति के तहत सुरक्षित रखा गया है.
खास अनुमतियों का अनुरोध करना
रनटाइम की अनुमतियों के उलट, उपयोगकर्ता को सिस्टम सेटिंग में जाकर खास ऐप्लिकेशन के लिए ऐक्सेस पेज पर जाकर खास अनुमतियां देनी होंगी. ऐप्लिकेशन, उपयोगकर्ताओं को इंटेंट का इस्तेमाल करके वहां भेज सकते हैं. इससे ऐप्लिकेशन रुक जाता है और दी गई खास अनुमति के लिए, सेटिंग पेज लॉन्च हो जाता है. जब उपयोगकर्ता ऐप्लिकेशन पर वापस आता है, तब ऐप्लिकेशन यह देख सकता है कि 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 अनुमति का अनुरोध तब तक न करें, जब तक उपयोगकर्ता किसी ईमेल को किसी खास समय पर भेजने के लिए शेड्यूल न कर ले.
अनुरोध के बारे में जानकारी देना
सिस्टम सेटिंग पर रीडायरेक्ट करने से पहले, वजह बताएं. उपयोगकर्ता खास अनुमतियां देने के लिए, ऐप्लिकेशन को कुछ समय के लिए छोड़ देते हैं. इसलिए, सिस्टम सेटिंग में खास ऐप्लिकेशन के लिए ऐक्सेस पेज पर इंटेंट लॉन्च करने से पहले, ऐप्लिकेशन में यूज़र इंटरफ़ेस (यूआई) दिखाएं. इस यूज़र इंटरफ़ेस (यूआई) में साफ़ तौर पर यह बताया जाना चाहिए कि ऐप्लिकेशन को अनुमति की ज़रूरत क्यों है. साथ ही, यह भी बताया जाना चाहिए कि उपयोगकर्ता को सेटिंग पेज पर जाकर अनुमति कैसे देनी चाहिए.