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

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

काम करने के तरीके में हुए उन बदलावों की सूची भी देखना न भूलें जिनका असर सिर्फ़ Android 13 को टारगेट करने वाले ऐप्लिकेशन पर पड़ता है.

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

टास्क मैनेजर

सूचनाओं वाले पैनल के नीचे एक बटन मौजूद होता है, जो बैकग्राउंड में फ़िलहाल चल रहे ऐप्लिकेशन
  की संख्या बताता है. इस बटन को दबाने पर, एक डायलॉग बॉक्स दिखता है. इसमें अलग-अलग ऐप्लिकेशन के नाम दिखते हैं. 'रोकें' बटन हर ऐप्लिकेशन की दाईं ओर होता है
पहला डायग्राम. टास्क मैनेजर के लिए वर्कफ़्लो, जिसकी मदद से उपयोगकर्ता, उन ऐप्लिकेशन को बंद कर सकते हैं जिनमें फ़ोरग्राउंड सेवाएं चालू हैं. यह वर्कफ़्लो सिर्फ़ उन डिवाइसों पर दिखता है जिन पर 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 ऐप्लिकेशन Speech Services by Google ऐप्लिकेशन पर ट्रैफ़िक भेजने के लिए, ट्रैंपोलिन का इस्तेमाल करता है. Android 13 में, इस ट्रैंपोलिन को हटा दिया गया है.

ऐप्लिकेशन को किसी खास ऐप्लिकेशन को हार्ड-कोड करने के बजाय, SpeechService के लिए डिवाइस के डिफ़ॉल्ट प्रोवाइडर का इस्तेमाल करना चाहिए.