Android 13 प्लैटफ़ॉर्म में कुछ बदलाव होते हैं, जिनका असर आपके ऐप्लिकेशन पर पड़ सकता है. ये बदलाव, Android 13 पर चलने वाले सभी ऐप्लिकेशन पर लागू होते हैं. भले ही, targetSdkVersion
कुछ भी हो. आपको अपने ऐप्लिकेशन की जांच करनी चाहिए. इसके बाद, जहां लागू हो वहां इन सुविधाओं के सही तरीके से काम करने के लिए, ज़रूरत के हिसाब से उसमें बदलाव करना चाहिए.
काम करने के तरीके में हुए उन बदलावों की सूची भी देखना न भूलें जिनका असर सिर्फ़ Android 13 को टारगेट करने वाले ऐप्लिकेशन पर पड़ता है.
परफ़ॉर्मेंस और बैटरी
टास्क मैनेजर
Android 13 (एपीआई लेवल 33) से, उपयोगकर्ता सूचना ड्रॉर से एक वर्कफ़्लो पूरा कर सकते हैं. इससे, वे उन ऐप्लिकेशन को रोक सकते हैं जिनकी फ़ोरग्राउंड सेवाएं चालू हैं. इसकी जानकारी, पहले चित्र में दी गई है. इस सुविधा को टास्क मैनेजर कहा जाता है. ऐप्लिकेशन के पास उपयोगकर्ता की ओर से शुरू की गई इस रुकावट को मैनेज करने की सुविधा होनी चाहिए.
JobScheduler का इस्तेमाल करके, प्रीफ़ेच जॉब को बेहतर तरीके से मैनेज करना
JobScheduler, ऐप्लिकेशन को कुछ खास जॉब को "प्रीफ़ेच" जॉब के तौर पर मार्क करने का विकल्प देता है. इसके लिए, JobInfo.Builder.setPrefetch()
का इस्तेमाल किया जाता है. इसका मतलब है कि उपयोगकर्ता अनुभव को बेहतर बनाने के लिए, ये जॉब ऐप्लिकेशन के अगले लॉन्च के आस-पास और उससे पहले चलने चाहिए.
अब तक, JobScheduler ने सिग्नल का इस्तेमाल सिर्फ़ इसलिए किया है, ताकि टास्क को पहले से लोड करने की सुविधा, मुफ़्त या अतिरिक्त डेटा का फ़ायदा ले सके.
Android 13 (एपीआई लेवल 33) और उसके बाद वाले वर्शन में, सिस्टम यह तय करने की कोशिश करता है कि ऐप्लिकेशन को अगली बार कब लॉन्च किया जाएगा. साथ ही, इस अनुमान का इस्तेमाल करके, प्रीफ़ेच जॉब चलाए जाते हैं. ऐप्लिकेशन को ऐसे किसी भी काम के लिए प्रीफ़ेच जॉब का इस्तेमाल करने की कोशिश करनी चाहिए जिन्हें वे अगले ऐप्लिकेशन लॉन्च से पहले पूरा करना चाहते हैं.
बैटरी का इस्तेमाल
Android 13 (एपीआई लेवल 33) में, सिस्टम को डिवाइस की बैटरी लाइफ़ को बेहतर तरीके से मैनेज करने के लिए ये तरीके दिए गए हैं:
- सिस्टम आपके ऐप्लिकेशन को "प्रतिबंधित" ऐप्लिकेशन स्टैंडबाय बकेट में कब डालता है, इसके बारे में अपडेट किए गए नियम.
- बैकग्राउंड में बैटरी इस्तेमाल करने के लिए, जब उपयोगकर्ता आपके ऐप्लिकेशन को "प्रतिबंधित" स्थिति में डालता है, तो आपके ऐप्लिकेशन के काम करने की नई सीमाएं.
इन बदलावों के साथ अपने ऐप्लिकेशन को टेस्ट करते समय, इन चीज़ों की जांच ज़रूर करें:
देखें कि जब सिस्टम आपके ऐप्लिकेशन को "प्रतिबंधित" ऐप्लिकेशन स्टैंडबाय बकेट में डालता है, तो उस पर क्या असर पड़ता है. अपने ऐप्लिकेशन को इस बकेट में असाइन करने के लिए, यहां दिए गए Android डीबग ब्रिज (ADB) कमांड का इस्तेमाल करें:
adb shell am set-standby-bucket PACKAGE_NAME restricted
देखें कि आपका ऐप्लिकेशन, बैकग्राउंड में बैटरी खर्च करने पर, इन पाबंदियों का जवाब कैसे देता है. आम तौर पर, ये पाबंदियां उन ऐप्लिकेशन पर लागू होती हैं जिन पर बैकग्राउंड में बैटरी खर्च करने से जुड़ी पाबंदी "लागू" होती है:
- फ़ोरग्राउंड सेवाएं लॉन्च नहीं की जा सकीं
- फ़ोरग्राउंड से जुड़ी मौजूदा सेवाओं को हटा दिया गया है
- अलार्म ट्रिगर नहीं हो रहे हैं
- जॉब लागू नहीं होते
अपने ऐप्लिकेशन को इस "प्रतिबंधित" स्थिति में रखने के लिए, यहां दिए गए ADB कमांड का इस्तेमाल करें:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
ज़्यादा प्राथमिकता वाले Firebase Cloud Message (FCM) कोटा
Android 13 (एपीआई लेवल 33) में, Firebase क्लाउड से मैसेज (FCM) के कोटे अपडेट किए गए हैं. इससे, उन ऐप्लिकेशन के लिए, FCM की सूचनाओं की डिलीवरी की भरोसेमंदता को बेहतर बनाने में मदद मिलेगी जो सूचनाएं दिखाने के लिए, FCM की सूचनाओं की प्राथमिकता को ध्यान में रखते हैं. Android 13 (एपीआई लेवल 33) में ये बदलाव हुए हैं:
- ऐप्लिकेशन स्टैंडबाय बकेट से यह तय नहीं होता कि कोई ऐप्लिकेशन, ज़्यादा प्राथमिकता वाले कितने FCM का इस्तेमाल कर सकता है.
- ज़्यादा प्राथमिकता वाले FCM कोटा को, ज़्यादा प्राथमिकता वाले FCM के जवाब में उपयोगकर्ता को दिखाई जाने वाली सूचनाओं की संख्या के अनुपात में बढ़ाया जाता है.
Android के पिछले वर्शन की तरह ही, ज़्यादा प्राथमिकता वाले ऐसे FCM जिन्हें कोटा से ज़्यादा भेजा जाता है उन्हें सामान्य प्राथमिकता पर डाउनग्रेड कर दिया जाता है. हमारा सुझाव है कि FCM के जवाब में फ़ोरग्राउंड सेवाएं (एफ़जीएस) शुरू करते समय, RemoteMessage.getPriority()
के नतीजे की जांच करें और पक्का करें कि यह PRIORITY_HIGH
हो और/या किसी भी संभावित ForegroundServiceStartNotAllowedException
अपवाद को हैंडल करे.
अगर आपका ऐप्लिकेशन, हमेशा ज़्यादा प्राथमिकता वाले एफ़सीएम के जवाब में सूचनाएं पोस्ट नहीं करता है, तो हमारा सुझाव है कि आप इन एफ़सीएम की प्राथमिकता को सामान्य पर सेट करें. इससे, सूचना देने वाले मैसेज को डाउनग्रेड नहीं किया जाएगा.
निजता
सूचनाओं के लिए रनटाइम की अनुमति
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
तय नहीं किया हो. अपडेट किए गए ऐप्लिकेशन अब भी शेयर किए गए मौजूदा यूज़र आईडी
का इस्तेमाल करते हैं.
शेयर किए गए User-ID की वजह से, पैकेज मैनेजर में गड़बड़ियां हो सकती हैं. इसके बजाय, आपके ऐप्लिकेशन को शेयर किए गए कॉम्पोनेंट के बीच इंटरऑपरेबिलिटी को आसान बनाने के लिए, सेवाओं और कॉन्टेंट की सेवा देने वाली कंपनियों जैसी सही कम्यूनिकेशन सुविधाओं का इस्तेमाल करना चाहिए.
उपयोगकर्ता अनुभव
फ़ोरग्राउंड सेवा से जुड़ी खारिज की जा सकने वाली सूचनाएं
Android 13 या इसके बाद के वर्शन वाले डिवाइसों पर, उपयोगकर्ता डिफ़ॉल्ट रूप से, फ़ोरग्राउंड सेवाओं से जुड़ी सूचनाओं को खारिज कर सकते हैं.
मुख्य फ़ंक्शन
बोली को लिखाई में बदलने की सेवा को लागू करने की लेगसी कॉपी हटाई गई
Android 13, Google ऐप्लिकेशन से SpeechService
को लागू करने वाली प्रोसेस को हटा देता है. इसमें Voice IME, RecognitionService
, और इंटेंट के मुताबिक एपीआई शामिल है.
Android 12 में ये बदलाव किए गए हैं:
SpeechService
की सुविधाओं को Speech Services by Google ऐप्लिकेशन पर माइग्रेट कर दिया गया है. यह ऐप्लिकेशन,SpeechService
की सेवा देने वाली डिफ़ॉल्ट कंपनी बन गई है.- डिवाइस पर बोली पहचानने की सुविधा के साथ काम करने के लिए,
RecognitionService
की सुविधा को Android System Intelligence ऐप्लिकेशन में ले जाया गया है.
Android 12 पर ऐप्लिकेशन के साथ काम करने की सुविधा बनाए रखने के लिए, Google ऐप्लिकेशन ट्रैफ़िक को 'Google की Speech Services' ऐप्लिकेशन पर भेजने के लिए ट्रैंपोलिन का इस्तेमाल करता है. Android 13 में, इस ट्रैंपोलिन को हटा दिया गया है.
ऐप्लिकेशन को SpeechService
के लिए, किसी खास ऐप्लिकेशन को हार्ड-कोड करने के बजाय, डिवाइस के डिफ़ॉल्ट प्रोवाइडर का इस्तेमाल करना चाहिए.