अरबों और उपकरणों के लिए ऑटो-रीसेट अनुमतियाँ


पीटर विसोंटे, सॉफ्टवेयर इंजीनियर द्वारा पोस्ट किया गया; बेसी जियांग, सॉफ्टवेयर इंजीनियर

योगदानकर्ता: इनारा रामजी, सॉफ्टवेयर इंजीनियर; रोड्रिगो फेरेल, इंटरेक्शन डिजाइनर; जेम्स केली, उत्पाद प्रबंधक; हेनरी चिन, प्रोग्राम मैनेजर।

फोन पकड़े हुए व्यक्ति की तस्वीर

अधिकांश उपयोगकर्ता अपने स्मार्टफोन पर बहुत समय बिताते हैं। चाहे काम करना हो, खेल खेलना हो या दोस्तों के साथ जुड़ना हो, लोग अक्सर अपने डिजिटल जीवन के प्राथमिक प्रवेश द्वार के रूप में ऐप्स का उपयोग करते हैं। काम करने के लिए, ऐप्स को अक्सर कुछ अनुमतियों का अनुरोध करने की आवश्यकता होती है, लेकिन किसी दिए गए डिवाइस पर दर्जनों एप्लिकेशन के साथ, आपके द्वारा पहले दी गई अनुमतियों को बनाए रखना मुश्किल हो सकता है – खासकर यदि आपने एक विस्तारित अवधि के लिए किसी एप्लिकेशन का उपयोग नहीं किया है समय की।

Android 11 में, हमने पेश किया स्वचालित रीसेट सुविधा की अनुमति दें. यह सुविधा एप्लिकेशन को स्वचालित रूप से रीसेट करके उपयोगकर्ता की गोपनीयता की रक्षा करने में मदद करती है रनटाइम अनुमतियाँ – जो अनुमतियां हैं जो अनुरोध किए जाने पर उपयोगकर्ता को संकेत प्रदर्शित करती हैं – यदि एप्लिकेशन का उपयोग कुछ महीनों के लिए नहीं किया जाता है। दिसंबर 2021 से, हम इसे अरबों और उपकरणों में विस्तारित कर रहे हैं। यह सुविधा संबंधित उपकरणों पर स्वचालित रूप से सक्षम हो जाएगी गूगल प्ले सेवाएं Android 6.0 (API Level 23) या बाद के वर्शन चलाने वाले।

यह सुविधा डिफ़ॉल्ट रूप से Android 11 (API स्तर 30) या उच्चतर को लक्षित करने वाले ऐप्स के लिए सक्षम की जाएगी। हालांकि, उपयोगकर्ता 23 से 29 एपीआई स्तरों को लक्षित करने वाले एप्लिकेशन के लिए मैन्युअल ऑटो-रीसेट अनुमतियों को सक्षम कर सकते हैं।

तो डेवलपर्स के लिए इसका क्या मतलब है?

अपवाद

कुछ एप्लिकेशन और अनुमतियां स्वचालित रूप से निरस्तीकरण से मुक्त हो जाती हैं, जैसे एंटरप्राइज़ द्वारा उपयोग किए जाने वाले सक्रिय डिवाइस प्रबंधक एप्लिकेशन और एंटरप्राइज़ नीति द्वारा निर्दिष्ट अनुमतियां।

उपयोगकर्ता से ऑटो-रीसेट अक्षम करने का अनुरोध करें

यदि आवश्यक हो, तो डेवलपर्स उपयोगकर्ता से सिस्टम को उनकी एप्लिकेशन अनुमतियों को रीसेट करने से रोकने के लिए कह सकते हैं। यह उन स्थितियों में उपयोगी है जहां उपयोगकर्ता अपेक्षा करते हैं कि एप्लिकेशन मुख्य रूप से पृष्ठभूमि में काम करे, इसके साथ बातचीत किए बिना। मुख्य उपयोग के मामले सूचीबद्ध हैं यहां.

वर्तमान और नए व्यवहारों की तुलना

वर्तमान व्यवहार नया व्यवहार
अनुमतियां स्वचालित रूप से रीसेट हो जाती हैं Android 11 (API स्तर 30) और उच्चतर उपकरण निम्नलिखित डिवाइस पर अनुमतियां स्वचालित रूप से रीसेट हो जाती हैं:

  • उपकरण एंड्रॉइड 6.0 (एपीआई लेवल 23) और एंड्रॉइड 10 (एपीआई लेवल 29) के बीच चलने वाली Google Play सेवाओं के साथ, व्यापक।
  • सभी उपकरण चल रहे हैं Android 11 (API स्तर 30) और उच्चतर उपकरण
Android 11 या बाद के संस्करण को लक्षित करने वाले एप्लिकेशन के लिए अनुमतियां डिफ़ॉल्ट रूप से रीसेट की जाती हैं। उपयोगकर्ता Android 6.0 (API स्तर 23) या बाद के संस्करण को लक्षित करने वाले एप्लिकेशन के लिए मैन्युअल रूप से ऑटो-रीसेट सक्षम कर सकते हैं। वर्तमान व्यवहार में कोई बदलाव नहीं है।
एप्लिकेशन उपयोगकर्ता से एप्लिकेशन के लिए ऑटो-रीसेट को अक्षम करने का अनुरोध कर सकते हैं। वर्तमान व्यवहार में कोई बदलाव नहीं है।

आवश्यक कोड परिवर्तन

यदि कोई एप्लिकेशन कम से कम एपीआई 30 को लक्षित करता है, और उपयोगकर्ता को ऑटो-रीसेट अनुमति को अक्षम करने के लिए कहता है, तो डेवलपर्स को कोड में कुछ सरल परिवर्तन करने की आवश्यकता होगी। यदि एप्लिकेशन ऑटो-रीसेट को अक्षम नहीं करता है, तो कोई कोड परिवर्तन की आवश्यकता नहीं है।

नोट: यह एपीआई केवल उन अनुप्रयोगों के लिए है जो एसडीके एपीआई 30 या उच्चतर को लक्षित करते हैं, क्योंकि अनुमति ऑटो-रीसेट केवल डिफ़ॉल्ट रूप से इन अनुप्रयोगों पर लागू होती है। यदि एप्लिकेशन लक्ष्य SDK API 29 या उससे कम है, तो डेवलपर्स को कुछ भी बदलने की आवश्यकता नहीं है।

निम्न तालिका नए, क्रॉस-प्लेटफ़ॉर्म एपीआई को सारांशित करती है (इसमें प्रकाशित एपीआई की तुलना में एंड्रॉइड 11):

कार्य एंड्रॉइड 11 एपीआई
(केवल Android 11 और बाद के उपकरणों पर काम करता है)
नया, क्रॉस-प्लेटफ़ॉर्म API
(एंड्रॉइड 6.0 और बाद के उपकरणों पर काम करता है, जिसमें एंड्रॉइड 11 और बाद के संस्करण शामिल हैं)
जांचें कि क्या डिवाइस की ऑटो-रीसेट अनुमति सक्षम है अगर जांच Build.VERSION.SDK_INT >= Build.VERSION_CODES.R बुलाना androidx.core.content.PackageManagerCompat.getUnusedAppRestrictionsStatus()
जांचें कि क्या आपके एप्लिकेशन के लिए ऑटो-रीसेट अक्षम है बुलाना PackageManager.
isAutoRevokeWhitelisted()
बुलाना androidx.core.content.
PackageManagerCompat.
getUnusedAppRestrictionsStatus()
अनुरोध करें कि उपयोगकर्ता आपके एप्लिकेशन के लिए ऑटो-रीसेट अक्षम करें कार्रवाई के साथ उद्देश्य भेजें
Intent.ACTION_AUTO_REVOKE_PERMISSIONS
के साथ बनाया गया उद्देश्य भेजें androidx.core.content.
IntentCompat.
createManageUnusedAppRestrictionsIntent()

यह क्रॉस-प्लेटफ़ॉर्म API का हिस्सा है जेटपैक कोर लाइब्रेरी और जेटपैक कोर v1.7.0.1 में उपलब्ध होंगे। यह एपीआई अब बीटा में उपलब्ध है।

किसी एप्लिकेशन के लिए नमूना तर्क जिसके लिए उपयोगकर्ता को ऑटो-रीसेट अक्षम करने की आवश्यकता होती है:

val future: ListenableFuture<Int> =
    PackageManagerCompat.getUnusedAppRestrictionsStatus(context)
future.addListener(
  { onResult(future.get()) },
   ContextCompat.getMainExecutor(context)
)

fun onResult(appRestrictionsStatus: Int) {
  when (appRestrictionsStatus) {
    // Status could not be fetched. Check logs for details.
    ERROR -> { }

    // Restrictions do not apply to your app on this device.
    FEATURE_NOT_AVAILABLE -> { }
    // Restrictions have been disabled by the user for your app.
    DISABLED -> { }

    // If the user doesn't start your app for months, its permissions 
    // will be revoked and/or it will be hibernated. 
    // See the API_* constants for details.
    API_30_BACKPORT, API_30, API_31 -> 
      handleRestrictions(appRestrictionsStatus)
  }
}

fun handleRestrictions(appRestrictionsStatus: Int) {
  // If your app works primarily in the background, you can ask the user
  // to disable these restrictions. Check if you have already asked the
  // user to disable these restrictions. If not, you can show a message to 
  // the user explaining why permission auto-reset and Hibernation should be 
  // disabled. Tell them that they will now be redirected to a page where 
  // they can disable these features.

  Intent intent = IntentCompat.createManageUnusedAppRestrictionsIntent
    (context, packageName)

  // Must use startActivityForResult(), not startActivity(), even if 
  // you don't use the result code returned in onActivityResult().
  startActivityForResult(intent, REQUEST_CODE)
}

उपरोक्त तर्क Android 6.0 – Android 10 और Android 11+ उपकरणों पर काम करेगा। बस नए एपीआई का उपयोग करना काफी है; अब आपको Android 11 ऑटो-रीसेट API को कॉल करने की आवश्यकता नहीं है।

Android 12 . में ऐप हाइबरनेशन के साथ संगतता

नए एपीआई के साथ भी संगत Android 12 . द्वारा पेश किया गया हाइबरनेशन ऐप (एपीआई स्तर 31)। हाइबरनेशन अप्रयुक्त अनुप्रयोगों पर लागू एक नया प्रतिबंध है। यह सुविधा Android 12 से पहले के OS संस्करणों पर उपलब्ध नहीं है।

इस getUnusedAppRestrictionsStatus() एपीआई वापस आ जाएगा API_31 यदि अनुमति ऑटो-रीसेट और ऐप हाइबरनेशन दोनों पर लागू होती है।

लॉन्च टाइमलाइन

  • 15 सितंबर, 2021 – क्रॉस-प्लेटफ़ॉर्म ऑटो-रीसेट एपीआई अब बीटा (जेटपैक कोर 1.7.0 बीटा लाइब्रेरी) में हैं, इसलिए डेवलपर्स आज इस एपीआई का उपयोग शुरू कर सकते हैं। वे उन उपकरणों पर भी उपयोग करने के लिए सुरक्षित हैं जो ऑटो-रीसेट अनुमति का समर्थन नहीं करते हैं (एपीआई इन उपकरणों पर FEATURE_NOT_AVAILABLE लौटाएगा)।
  • अक्टूबर 2021 – क्रॉस-प्लेटफ़ॉर्म ऑटो-रीसेट एपीआई एक स्थिर एपीआई (जेटपैक कोर 1.7.0) के रूप में उपलब्ध हैं।
  • दिसंबर 2021 – अनुमति ऑटो-रीसेट सुविधा एंड्रॉइड 6.0 और एंड्रॉइड 10 के बीच चलने वाले Google Play सेवाओं द्वारा संचालित उपकरणों पर धीरे-धीरे रोलआउट शुरू करेगी। इन उपकरणों पर, उपयोगकर्ता अब ऑटो-रीसेट सेटिंग्स पृष्ठ पर जा सकते हैं और ऑटो को सक्षम / अक्षम कर सकते हैं। विशिष्ट अनुप्रयोगों के लिए -Reset। डिवाइस पर सुविधा शुरू होने के कुछ सप्ताह बाद सिस्टम स्वचालित रूप से अप्रयुक्त अनुप्रयोगों की अनुमतियों को रीसेट करना शुरू कर देगा।
  • Q1 2022 – अनुमति ऑटो-रीसेट सुविधा Android 6.0 और Android 10 के बीच संस्करण चलाने वाले सभी उपकरणों पर उपलब्ध होगी।
Dev

Leave a Reply

Your email address will not be published.