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