Android 13 प्लैटफ़ॉर्म में कुछ ऐसे बदलाव किए गए हैं जिनका असर आपके ऐप्लिकेशन पर पड़ सकता है. Android 13 पर चलने वाले सभी ऐप्लिकेशन पर, यहां दिए गए बदलाव लागू होते हैं. भले ही, targetSdkVersion कुछ भी हो. आपको अपने ऐप्लिकेशन की जांच करनी चाहिए. इसके बाद, जहां ज़रूरी हो वहां इन सुविधाओं को सही तरीके से काम करने के लिए, ऐप्लिकेशन में बदलाव करना चाहिए.
Android 13 को टारगेट करने वाले ऐप्लिकेशन पर असर डालने वाले बदलावों की सूची भी ज़रूर देखें.
परफ़ॉर्मेंस और बैटरी
टास्क मैनेजर
Android 13 (एपीआई लेवल 33) से, उपयोगकर्ता सूचना पैनल से किसी वर्कफ़्लो को पूरा कर सकते हैं. इससे, फ़ोरग्राउंड में चल रहे ऐप्लिकेशन को बंद किया जा सकता है. इसे इमेज 1 में दिखाया गया है. इस सुविधा को टास्क मैनेजर कहा जाता है. ऐप्लिकेशन में, उपयोगकर्ता के अनुरोध पर, वीडियो को रोकने की सुविधा होनी चाहिए.
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 क्लाउड से मैसेज (FCM) भेजने के लिए, ज़्यादा प्राथमिकता वाले कोटा
Android 13 (एपीआई लेवल 33) में, Firebase क्लाउड से मैसेज (FCM) के कोटा अपडेट किए गए हैं. इससे, ज़्यादा प्राथमिकता वाले FCM की डिलीवरी को ज़्यादा भरोसेमंद बनाया जा सकेगा. यह उन ऐप्लिकेशन के लिए है जो ज़्यादा प्राथमिकता वाले FCM के जवाब में सूचनाएं दिखाते हैं. Android 13 (एपीआई लेवल 33) में ये बदलाव किए गए हैं:
- ऐप्लिकेशन स्टैंडबाय बकेट अब यह तय नहीं करते कि कोई ऐप्लिकेशन, ज़्यादा प्राथमिकता वाले कितने FCM इस्तेमाल कर सकता है.
- अगर सिस्टम को पता चलता है कि कोई ऐप्लिकेशन लगातार ऐसे मैसेज भेज रहा है जिन्हें ज़्यादा प्राथमिकता दी गई है, लेकिन उनसे कोई सूचना नहीं मिलती है, तो सिस्टम अब उन मैसेज की प्राथमिकता कम कर देता है.
Android के पिछले वर्शन की तरह ही, कोटा से ज़्यादा होने पर ज़्यादा प्राथमिकता वाले FCM को सामान्य प्राथमिकता पर डाउनग्रेड कर दिया जाता है. FCM के जवाब में फ़ोरग्राउंड सेवाएं (एफ़जीएस) शुरू करते समय, हमारा सुझाव है कि आप RemoteMessage.getPriority() के नतीजे की जांच करें और पुष्टि करें कि यह PRIORITY_HIGH है. साथ ही, संभावित ForegroundServiceStartNotAllowedException अपवादों को मैनेज करें.
अगर आपका ऐप्लिकेशन, ज़्यादा प्राथमिकता वाले एफसीएम के जवाब में हमेशा सूचनाएं पोस्ट नहीं करता है, तो हमारा सुझाव है कि आप इन एफसीएम की प्राथमिकता को सामान्य पर सेट करें. इससे, सूचना देने वाले मैसेज को डाउनग्रेड नहीं किया जाएगा.
निजता
सूचनाओं के लिए रनटाइम की अनुमति
Android 13 (एपीआई लेवल 33) में, रनटाइम के दौरान सूचना पाने की अनुमति देने की सुविधा जोड़ी गई है:
POST_NOTIFICATIONS.
इस बदलाव से, लोगों को उन सूचनाओं पर ध्यान देने में मदद मिलती है जो उनके लिए सबसे ज़्यादा ज़रूरी हैं.
हमारा सुझाव है कि आप जल्द से जल्द Android 13 या इसके बाद के वर्शन को टारगेट करें, ताकि आपको इस सुविधा के अतिरिक्त कंट्रोल और फ़्लेक्सिबिलिटी का फ़ायदा मिल सके.
ऐप्लिकेशन अनुमतियों से जुड़े सबसे सही तरीकों के बारे में ज़्यादा जानें.
क्लिपबोर्ड से संवेदनशील कॉन्टेंट छिपाना
अगर आपका ऐप्लिकेशन, उपयोगकर्ताओं को पासवर्ड या क्रेडिट कार्ड की जानकारी जैसे संवेदनशील कॉन्टेंट को क्लिपबोर्ड पर कॉपी करने की अनुमति देता है, तो आपको ClipDescription को कॉल करने से पहले, ClipData के ClipDescription में एक फ़्लैग जोड़ना होगा.ClipboardManager#setPrimaryClip() इस फ़्लैग को जोड़ने से, संवेदनशील कॉन्टेंट को कॉन्टेंट की झलक में दिखने से रोका जा सकता है.
संवेदनशील कॉन्टेंट को फ़्लैग करने के लिए, 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:sharedUserMaxSdkVersion को कभी तय ही नहीं किया था.android:sharedUserId अपडेट किए गए ऐप्लिकेशन अब भी शेयर किए गए मौजूदा उपयोगकर्ता आईडी का इस्तेमाल करते हैं.
शेयर किए गए यूज़र आईडी की वजह से, पैकेज मैनेजर में अनिश्चितता वाली स्थिति पैदा होती है. इसके बजाय, आपके ऐप्लिकेशन को कम्यूनिकेशन के सही तरीकों का इस्तेमाल करना चाहिए. जैसे, सेवाएं और कॉन्टेंट उपलब्ध कराने वाली कंपनियां. इससे शेयर किए गए कॉम्पोनेंट के बीच इंटरऑपरेबिलिटी को बेहतर बनाया जा सकता है.
उपयोगकर्ता अनुभव
फ़ोरग्राउंड सेवा की सूचनाएं खारिज की जा सकती हैं
Android 13 या इसके बाद के वर्शन वाले डिवाइसों पर, उपयोगकर्ता फ़ोरग्राउंड सेवाओं से जुड़ी सूचनाओं को डिफ़ॉल्ट रूप से खारिज कर सकते हैं.
मुख्य फ़ंक्शन
स्पीच सेवा लागू करने की लेगसी कॉपी हटा दी गई है
Android 13 में, Google ऐप्लिकेशन से SpeechService को हटा दिया गया है. इसमें वॉइस आईएमई, RecognitionService, और इंटेंट-आधारित एपीआई शामिल हैं.
Android 12 में, ये बदलाव हुए हैं:
SpeechServiceकी सुविधाओं को Speech Services by Google ऐप्लिकेशन पर माइग्रेट कर दिया गया है. यह ऐप्लिकेशन,SpeechServiceकी सुविधा देने वाला डिफ़ॉल्ट ऐप्लिकेशन बन गया है.RecognitionServiceसुविधा को Android System Intelligence ऐप्लिकेशन में ट्रांसफ़र कर दिया गया है, ताकि डिवाइस पर बोली पहचानने की सुविधा काम कर सके.
Android 12 पर ऐप्लिकेशन के साथ काम करने की सुविधा को बनाए रखने के लिए, Google ऐप्लिकेशन, Speech Services by Google ऐप्लिकेशन पर ट्रैफ़िक को डाइवर्ट करने के लिए ट्रैम्पोलिन का इस्तेमाल करता है. Android 13 में, इस ट्रैम्पोलिन को हटा दिया गया है.
ऐप्लिकेशन को SpeechService के लिए, डिवाइस के डिफ़ॉल्ट प्रोवाइडर का इस्तेमाल करना चाहिए. इसके बजाय, किसी ऐप्लिकेशन को हार्ड-कोड नहीं करना चाहिए.