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

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

Android 13 को टारगेट करने वाले ऐप्लिकेशन पर असर डालने वाले बदलावों की सूची भी देखें.

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

काम का मैनेजर

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

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

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 क्लाउड से मैसेज (एफ़सीएम) के कोटा

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

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

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

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

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

फ़ोरग्राउंड सेवा की सूचनाएं खारिज करने की सुविधा

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 के लिए, डिवाइस के डिफ़ॉल्ट प्रोवाइडर का इस्तेमाल करना चाहिए. इसके लिए, किसी खास ऐप्लिकेशन को हार्ड-कोड नहीं करना चाहिए.