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