Android 11 में अनुमतियों के अपडेट

Android 11 में, उपयोगकर्ताओं को जगह की जानकारी, माइक्रोफ़ोन, और कैमरे के लिए ज़्यादा बारीकी से अनुमतियां तय करने की सुविधा मिलती है. इसके अलावा, सिस्टम उन ऐप्लिकेशन की अनुमतियों को रीसेट कर देता है जो Android 11 या इसके बाद के वर्शन को टारगेट करते हैं और जिनका इस्तेमाल नहीं किया जाता. साथ ही, अगर ऐप्लिकेशन, सिस्टम अलर्ट विंडो का इस्तेमाल करते हैं या फ़ोन नंबर से जुड़ी जानकारी पढ़ते हैं, तो उन्हें अपनी अनुमतियों को अपडेट करना पड़ सकता है.

एक बार के लिए अनुमतियां

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

इस बारे में ज़्यादा जानें कि सिस्टम, एक बार के लिए दी जाने वाली अनुमतियों को कैसे मैनेज करता है.

इस्तेमाल न किए जाने वाले ऐप्लिकेशन से अनुमतियां अपने-आप रीसेट होने की सुविधा

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

इस बारे में ज़्यादा जानें कि सिस्टम, इस्तेमाल न किए जाने वाले ऐप्लिकेशन की अनुमतियों को अपने-आप कैसे रीसेट करता है.

अनुमति वाले डायलॉग बॉक्स के दिखने की सेटिंग

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

यह पता लगाने के लिए कि किसी ऐप्लिकेशन को अनुमतियां देने से हमेशा के लिए मना कर दिया गया है या नहीं (डीबग करने और टेस्ट करने के मकसद से), इस कमांड का इस्तेमाल करें:

adb shell dumpsys package PACKAGE_NAME

इसमें PACKAGE_NAME उस पैकेज का नाम है जिसकी जांच करनी है.

कमांड के आउटपुट में ऐसे सेक्शन होते हैं जो इस तरह दिखते हैं:

...
runtime permissions:
  android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
...

जिन अनुमतियों को उपयोगकर्ता ने एक बार अस्वीकार कर दिया है उन्हें USER_SET से फ़्लैग किया जाता है. जिन अनुमतियों को दो बार अनुमति न दें को चुनकर हमेशा के लिए अस्वीकार कर दिया गया है उन्हें USER_FIXED से फ़्लैग किया जाता है.

टेस्टिंग के दौरान, हो सकता है कि आप इन फ़्लैग को रीसेट करना चाहें. इससे यह पक्का किया जा सकेगा कि अनुरोध वाला डायलॉग बॉक्स न दिखने पर, टेस्टर को हैरानी न हो. इसके लिए, इस निर्देश का इस्तेमाल करें:

adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed

PERMISSION_NAME उस अनुमति का नाम है जिसे आपको रीसेट करना है. Android ऐप्लिकेशन की अनुमतियों की पूरी सूची देखने के लिए, अनुमतियों के एपीआई के रेफ़रंस पेज पर जाएं.

अपने ऐप्लिकेशन में अनुमति न मिलने की स्थिति को मैनेज करने के तरीके के बारे में ज़्यादा जानें.

सिस्टम से जुड़ी सूचना वाली विंडो में बदलाव

Android 11 में, ऐप्लिकेशन को SYSTEM_ALERT_WINDOW अनुमति देने के तरीके में कई बदलाव किए गए हैं. इन बदलावों का मकसद, उपयोगकर्ताओं को सुरक्षित रखना है. इसके लिए, अनुमति देने की प्रोसेस को ज़्यादा सोच-समझकर और सोच-विचार के साथ पूरा किया जाता है.

अनुरोध करने पर, कुछ ऐप्लिकेशन को SYSTEM_ALERT_WINDOW अनुमति अपने-आप मिल जाती है

अनुरोध करने पर, कुछ खास तरह के ऐप्लिकेशन को SYSTEM_ALERT_WINDOW की अनुमति अपने-आप मिल जाती है:

  • जिस ऐप्लिकेशन के पास ROLE_CALL_SCREENING है और जो SYSTEM_ALERT_WINDOW का अनुरोध करता है उसे अनुमति अपने-आप मिल जाती है. अगर ऐप्लिकेशन से ROLE_CALL_SCREENING को हटा दिया जाता है, तो उसके पास अनुमति नहीं रहेगी.

  • MediaProjection के ज़रिए स्क्रीन कैप्चर करने वाले और SYSTEM_ALERT_WINDOW का अनुरोध करने वाले किसी भी ऐप्लिकेशन को अनुमति अपने-आप मिल जाती है. हालांकि, ऐसा तब नहीं होता, जब उपयोगकर्ता ने ऐप्लिकेशन को अनुमति देने से साफ़ तौर पर मना किया हो. स्क्रीन कैप्चर करना बंद करने पर, ऐप्लिकेशन को मिली अनुमति वापस ले ली जाती है. इस सुविधा का इस्तेमाल, मुख्य तौर पर गेम की लाइव स्ट्रीमिंग करने वाले ऐप्लिकेशन के लिए किया जाता है.

SYSTEM_ALERT_WINDOW की अनुमति पाने के लिए, इन ऐप्लिकेशन को ACTION_MANAGE_OVERLAY_PERMISSION भेजने की ज़रूरत नहीं है. ये ऐप्लिकेशन, सीधे तौर पर SYSTEM_ALERT_WINDOW का अनुरोध कर सकते हैं.

MANAGE_OVERLAY_PERMISSION इंटेंट, उपयोगकर्ता को हमेशा सिस्टम की अनुमतियों वाली स्क्रीन पर ले जाते हैं

Android 11 से, ACTION_MANAGE_OVERLAY_PERMISSION इंटेंट हमेशा उपयोगकर्ता को टॉप-लेवल की सेटिंग स्क्रीन पर ले जाते हैं. यहां उपयोगकर्ता, ऐप्लिकेशन के लिए SYSTEM_ALERT_WINDOW अनुमतियां दे सकता है या उन्हें वापस ले सकता है. इंटेंट में मौजूद package: डेटा को अनदेखा कर दिया जाता है.

Android के पुराने वर्शन में, ACTION_MANAGE_OVERLAY_PERMISSION इंटेंट किसी पैकेज के बारे में बता सकता था. इससे उपयोगकर्ता को अनुमति मैनेज करने के लिए, ऐप्लिकेशन के हिसाब से स्क्रीन पर ले जाया जाता था. यह सुविधा, Android 11 के बाद से काम नहीं करती. इसके बजाय, उपयोगकर्ता को पहले वह ऐप्लिकेशन चुनना होगा जिसके लिए उसे अनुमति देनी है या वापस लेनी है. इस बदलाव का मकसद, उपयोगकर्ताओं को सुरक्षित रखना है. इसके लिए, अनुमति देने की प्रोसेस को ज़्यादा सोच-समझकर पूरा किया जाता है.

फ़ोन नंबर

Android 11 में, फ़ोन से जुड़ी उस अनुमति में बदलाव किया गया है जिसका इस्तेमाल आपका ऐप्लिकेशन, फ़ोन नंबर पढ़ने के लिए करता है.

अगर आपका ऐप्लिकेशन Android 11 या इसके बाद के वर्शन को टारगेट करता है और उसे यहां दी गई सूची में मौजूद फ़ोन नंबर एपीआई को ऐक्सेस करना है, तो आपको READ_PHONE_STATE अनुमति के बजाय READ_PHONE_NUMBERS अनुमति का अनुरोध करना होगा.

  • TelephonyManager क्लास और TelecomManager क्लास, दोनों में getLine1Number() तरीका.
  • TelephonyManager क्लास में, getMsisdn() मेथड का इस्तेमाल नहीं किया जा सकता.

अगर आपका ऐप्लिकेशन, पिछली सूची में दिए गए तरीकों के अलावा, अन्य तरीकों को कॉल करने के लिए READ_PHONE_STATE का एलान करता है, तो Android के सभी वर्शन पर READ_PHONE_STATE का अनुरोध करना जारी रखा जा सकता है. अगर READ_PHONE_STATE अनुमति का इस्तेमाल सिर्फ़ पिछली सूची में दिए गए तरीकों के लिए किया जाता है, तो अपनी मेनिफ़ेस्ट फ़ाइल को इस तरह अपडेट करें:

  1. READ_PHONE_STATE के एलान में बदलाव करें, ताकि आपका ऐप्लिकेशन सिर्फ़ Android 10 (एपीआई लेवल 29) और इससे पहले के वर्शन पर अनुमति का इस्तेमाल करे.
  2. READ_PHONE_NUMBERS की अनुमति जोड़ें.

मेनिफ़ेस्ट फ़ाइल में जानकारी देने वाले इस स्निपेट से, इस प्रोसेस के बारे में पता चलता है:

<manifest>
    <!-- Grants the READ_PHONE_STATE permission only on devices that run
         Android 10 (API level 29) and lower. -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
</manifest>

अन्य संसाधन

Android 11 में अनुमतियों से जुड़े बदलावों के बारे में ज़्यादा जानने के लिए, यह कॉन्टेंट देखें:

वीडियो

Android 11 में निजता से जुड़े नए बदलावों के साथ ऐप्लिकेशन डेवलप करना