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