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
को हटा दिया गया है. इसमें वॉइस आईएमई, RecognitionService
, और इंटेंट पर आधारित एपीआई शामिल हैं.
Android 12 में ये बदलाव हुए हैं:
SpeechService
की सुविधाओं को Speech Services by Google ऐप्लिकेशन पर माइग्रेट कर दिया गया है. यह ऐप्लिकेशन,SpeechService
की सेवा देने वाली डिफ़ॉल्ट कंपनी बन गई है.- डिवाइस पर बोली पहचानने की सुविधा के साथ काम करने के लिए,
RecognitionService
की सुविधा को Android System Intelligence ऐप्लिकेशन में ले जाया गया है.
Android 12 पर ऐप्लिकेशन के साथ काम करने की सुविधा बनाए रखने के लिए, Google ऐप्लिकेशन ट्रैफ़िक को 'Google की Speech Services' ऐप्लिकेशन पर भेजने के लिए ट्रैंपोलिन का इस्तेमाल करता है. Android 13 में, इस ट्रैंपोलिन को हटा दिया गया है.
ऐप्लिकेशन को SpeechService
के लिए, किसी खास ऐप्लिकेशन को हार्ड-कोड करने के बजाय, डिवाइस के डिफ़ॉल्ट प्रॉवाइडर का इस्तेमाल करना चाहिए.