ऐप्लिकेशन के व्यवहार में बदलाव: सभी ऐप्लिकेशन

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

व्यवहार में होने वाले उन बदलावों की सूची भी देखें जो सिर्फ़ Android 13 को टारगेट करने वाले ऐप्लिकेशन पर असर डालते हैं.

परफ़ॉर्मेंस और बैटरी

काम का मैनेजर

सूचना पैनल में सबसे नीचे एक बटन होता है. इससे पता चलता है कि फ़िलहाल बैकग्राउंड में कितने ऐप्लिकेशन चल रहे हैं. इस बटन को दबाने पर, एक डायलॉग बॉक्स दिखता है. इसमें अलग-अलग ऐप्लिकेशन के नाम होते हैं. 'बंद करें' बटन, हर ऐप्लिकेशन के दाईं ओर होता है
पहली इमेज. यह काम के मैनेजर का वर्कफ़्लो है. इसकी मदद से , उपयोगकर्ता उन ऐप्लिकेशन को बंद कर सकते हैं जो फ़ोरग्राउंड में सेवाएं दे रहे हैं. यह वर्कफ़्लो सिर्फ़ उन डिवाइसों पर दिखता है जो Android 13 या इसके बाद के वर्शन पर चलते हैं.

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

JobScheduler का इस्तेमाल करके, प्रीफ़ेच जॉब को बेहतर तरीके से हैंडल करना

JobScheduler, ऐप्लिकेशन को कुछ खास जॉब को "प्रीफ़ेच" जॉब के तौर पर मार्क करने की सुविधा देता है. इसके लिए, JobInfo.Builder.setPrefetch() का इस्तेमाल किया जाता है. इसका मतलब है कि उपयोगकर्ता अनुभव को बेहतर बनाने के लिए, इन जॉब को ऐप्लिकेशन के अगले लॉन्च से पहले और उसके आस-पास ही चलना चाहिए. पहले, JobScheduler सिर्फ़ इस सिग्नल का इस्तेमाल करता था, ताकि प्रीफ़ेच जॉब, खाली या अतिरिक्त डेटा का इस्तेमाल कर सकें.

Android 13 (एपीआई लेवल 33) और इसके बाद के वर्शन में, सिस्टम यह पता लगाने की कोशिश करता है कि कोई ऐप्लिकेशन अगली बार कब लॉन्च होगा. इसके बाद, वह अनुमान के आधार पर प्रीफ़ेच जॉब चलाता है. ऐप्लिकेशन को, अगले लॉन्च से पहले किए जाने वाले किसी भी काम के लिए, प्रीफ़ेच जॉब का इस्तेमाल करना चाहिए.

बैटरी के संसाधनों का इस्तेमाल

Android 13 (एपीआई लेवल 33) में, सिस्टम को डिवाइस की बैटरी लाइफ़ बेहतर तरीके से मैनेज करने के लिए, ये तरीके उपलब्ध कराए गए हैं:

अपने ऐप्लिकेशन की जांच करते समय, पक्का करें कि आपने इन चीज़ों की जांच की हो:

  • जांच करें कि सिस्टम, आपके ऐप्लिकेशन को "पाबंदी वाली" ऐप्लिकेशन स्टैंडबाय बकेट में रखने पर, वह कैसे काम करता है. अपने ऐप्लिकेशन को इस बकेट में असाइन करने के लिए, Android डीबग ब्रिज (एडीबी) के इस निर्देश का इस्तेमाल करें:

    adb shell am set-standby-bucket PACKAGE_NAME restricted
    
  • जांच करें कि आपका ऐप्लिकेशन, इन पाबंदियों पर कैसे काम करता है. ये पाबंदियां आम तौर पर, उन ऐप्लिकेशन पर लागू होती हैं जो बैकग्राउंड में बैटरी के इस्तेमाल के लिए "पाबंदी वाली" स्थिति में होते हैं:

    • फ़ोरग्राउंड में सेवाएं लॉन्च नहीं की जा सकतीं
    • फ़ोरग्राउंड में चल रही सेवाएं, फ़ोरग्राउंड से हटा दी जाती हैं
    • अलार्म ट्रिगर नहीं होते
    • जॉब नहीं चलती हैं

    अपने ऐप्लिकेशन को "पाबंदी वाली" स्थिति में रखने के लिए, एडीबी के इस निर्देश का इस्तेमाल करें:

    adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
    

ज़्यादा प्राथमिकता वाले Firebase क्लाउड मैसेज (FCM) के लिए कोटा

Android 13 (एपीआई लेवल 33), Firebase क्लाउड मैसेज (FCM) के कोटा को अपडेट करता है. इससे, ज़्यादा प्राथमिकता वाले FCM को उन ऐप्लिकेशन के लिए बेहतर तरीके से डिलीवर किया जा सकता है जो ज़्यादा प्राथमिकता वाले FCM के जवाब में सूचनाएं दिखाते हैं. Android 13 (एपीआई लेवल 33) में ये बदलाव किए गए हैं:

  • ऐप्लिकेशन स्टैंडबाय बकेट से यह तय नहीं होता कि कोई ऐप्लिकेशन, ज़्यादा प्राथमिकता वाले कितने FCM इस्तेमाल कर सकता है.
  • अगर सिस्टम को पता चलता है कि कोई ऐप्लिकेशन, लगातार ज़्यादा प्राथमिकता वाले ऐसे मैसेज भेज रहा है जिनसे सूचना नहीं मिलती, तो वह उन मैसेज की प्राथमिकता कम कर देता है.

Android के पिछले वर्शन की तरह, कोटा से ज़्यादा भेजे गए ज़्यादा प्राथमिकता वाले FCM की प्राथमिकता कम करके, उन्हें सामान्य प्राथमिकता वाले मैसेज में बदल दिया जाता है. FCM के जवाब में फ़ोरग्राउंड में सेवाएं (एफ़जीएस) शुरू करते समय, हमारा सुझाव है कि आप RemoteMessage.getPriority() के नतीजे की जांच करें. साथ ही, पुष्टि करें कि यह PRIORITY_HIGH है और/या ForegroundServiceStartNotAllowedException के संभावित अपवादों को हैंडल करें.

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

निजता

सूचनाओं के लिए रनटाइम अनुमति

Android 13 (एपीआई लेवल 33) में, सूचनाओं के लिए रनटाइम अनुमति जोड़ी गई है: POST_NOTIFICATIONS. इस बदलाव से, उपयोगकर्ताओं को उन सूचनाओं पर फ़ोकस करने में मदद मिलती है जो उनके लिए सबसे ज़रूरी हैं.

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

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

क्लिपबोर्ड से संवेदनशील कॉन्टेंट छिपाना

अगर आपका ऐप्लिकेशन, उपयोगकर्ताओं को क्लिपबोर्ड पर पासवर्ड या क्रेडिट कार्ड की जानकारी जैसे संवेदनशील कॉन्टेंट को कॉपी करने की अनुमति देता है, तो आपको ClipboardManager#setPrimaryClip() को कॉल करने से पहले, ClipData के ClipDescription में एक फ़्लैग जोड़ना होगा. यह फ़्लैग जोड़ने से, संवेदनशील कॉन्टेंट, कॉन्टेंट के प्रीव्यू में नहीं दिखता.

संवेदनशील कॉन्टेंट को फ़्लैग किए बिना, कॉपी किए गए टेक्स्ट की झलक
संवेदनशील कॉन्टेंट को फ़्लैग किए बिना, कॉपी किए गए टेक्स्ट का प्रीव्यू.
कॉपी किए गए टेक्स्ट की झलक में, संवेदनशील कॉन्टेंट को फ़्लैग किया गया है.
संवेदनशील कॉन्टेंट को फ़्लैग करने के बाद, कॉपी किए गए टेक्स्ट का प्रीव्यू.

संवेदनशील कॉन्टेंट को फ़्लैग करने के लिए, ClipDescription में बूलियन एक्स्ट्रा जोड़ें. सभी ऐप्लिकेशन को यह करना चाहिए. भले ही, टारगेट किया गया एपीआई लेवल कुछ भी हो.


// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
    }
}

// If your app is compiled with a lower SDK
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean("android.content.extra.IS_SENSITIVE", true)
    }
}

क्लिपबोर्ड के नए यूज़र इंटरफ़ेस (यूआई) के बारे में ज़्यादा जानने के लिए, कॉपी और पेस्ट करने की सुविधा वाला पेज देखें.

सुरक्षा

शेयर किए गए यूज़र आईडी का इस्तेमाल बंद करना

अगर आपका ऐप्लिकेशन, बंद किए जा चुके android:sharedUserId एट्रिब्यूट का इस्तेमाल करता है और अब वह इस एट्रिब्यूट की सुविधा पर निर्भर नहीं है, तो android:sharedUserMaxSdkVersion एट्रिब्यूट को 32 पर सेट किया जा सकता है. जैसा कि कोड के इस स्निपेट में दिखाया गया है:

<manifest ...>
    <!-- To maintain backward compatibility, continue to use
         "android:sharedUserId" if you already added it to your manifest. -->
    android:sharedUserId="SHARED_PACKAGE_NAME"
    android:sharedUserMaxSdkVersion="32"
    ...
</manifest>

इस एट्रिब्यूट से सिस्टम को पता चलता है कि आपका ऐप्लिकेशन अब शेयर किए गए यूज़र आईडी पर निर्भर नहीं है. अगर आपका ऐप्लिकेशन, android:sharedUserMaxSdkVersion का एलान करता है और उसे Android 13 या इसके बाद के वर्शन वाले डिवाइसों पर नया इंस्टॉल किया जाता है, तो आपका ऐप्लिकेशन ऐसे काम करता है जैसे आपने कभी android:sharedUserId को तय ही नहीं किया था. अपडेट किए गए ऐप्लिकेशन अब भी शेयर किए गए मौजूदा यूज़र आईडी का इस्तेमाल करते हैं.

शेयर किए गए यूज़र आईडी की वजह से, पैकेज मैनेजर में गैर-डिटरमिनिस्टिक व्यवहार होता है. आपके ऐप्लिकेशन को, शेयर किए गए कॉम्पोनेंट के बीच इंटरऑपरेबिलिटी को बेहतर बनाने के लिए, सेवाओं और कॉन्टेंट प्रोवाइडर जैसे सही कम्यूनिकेशन मैकेनिज़्म का इस्तेमाल करना चाहिए.

उपयोगकर्ता अनुभव

फ़ोरग्राउंड में चल रही सेवाओं की सूचनाएं बंद करने की सुविधा

Android 13 या इसके बाद के वर्शन वाले डिवाइसों पर, उपयोगकर्ता डिफ़ॉल्ट रूप से फ़ोरग्राउंड में चल रही सेवाओं से जुड़ीसूचनाएं बंद कर सकते हैं.

मुख्य फ़ंक्शन

स्पीच सेवा के लागू करने के पुराने वर्शन को हटाया गया

Android 13 में, Google ऐप्लिकेशन से SpeechService को लागू करने की सुविधा हटा दी गई है. इसमें Voice IME, RecognitionService और इंटेंट पर आधारित एपीआई शामिल हैं.

Android 12 में ये बदलाव किए गए थे:

  • SpeechService की सुविधाओं को, Speech Services by Google ऐप्लिकेशन पर माइग्रेट किया गया. यह अब SpeechService का डिफ़ॉल्ट प्रोवाइडर बन गया है.
  • डिवाइस पर बोली पहचानने की सुविधा देने के लिए, RecognitionService की सुविधा को Android System Intelligence ऐप्लिकेशन पर ले जाया गया.

Android 12 पर ऐप्लिकेशन की कंपैटिबिलिटी बनाए रखने के लिए, Google ऐप्लिकेशन, Speech Services by Google ऐप्लिकेशन पर ट्रैफ़िक डाइवर्ट करने के लिए ट्रैम्पोलिन का इस्तेमाल करता है. Android 13 में, इस ट्रैम्पोलिन को हटा दिया गया है.

ऐप्लिकेशन को, किसी खास ऐप्लिकेशन को हार्ड-कोड करने के बजाय, SpeechService के लिए डिवाइस के डिफ़ॉल्ट प्रोवाइडर का इस्तेमाल करना चाहिए.