ऑप्ट-इन करने पर सूचनाएं पाने की अनुमति

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

इस पेज पर बताया गया है कि इस बदलाव के साथ काम करने के लिए, OEM को क्या करना होगा और लागू करने की पुष्टि कैसे की जा सकती है.

ऑप्ट-इन करने की सूचनाओं के लिए बदलाव लागू करना

Android 13 के बाद, ऐप्लिकेशन को सूचनाएं भेजने से पहले, सिस्टम से android.permission.POST_NOTIFICATION रनटाइम की अनुमति का अनुरोध करके, सूचनाएं भेजने के अपने इरादे का एलान करना होगा.

Android 13 और उसके बाद के वर्शन में, अनुमति देने वाले सिस्टम में वह सेटिंग सेव होती है जिससे यह तय होता है कि कोई ऐप्लिकेशन, उपयोगकर्ता को सूचनाएं भेज सकता है या नहीं. Android 13 से पहले, यह सेटिंग सूचना सिस्टम में सेव की जाती थी. इसलिए, OEM को सूचना सिस्टम से रनटाइम की अनुमति देने वाले सिस्टम में, सूचना भेजने की अनुमति वाले ऐप्लिकेशन के मौजूदा डेटा को माइग्रेट करना होगा. OEM को सूचना सिस्टम में मौजूदा एपीआई भी बनाए रखने होंगे, जो ऐप्लिकेशन डेवलपर को वह डेटा दिखाते हैं.

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

ऑप्ट-इन मॉडल में उपयोगकर्ता सूचनाओं का व्यवहार

नीचे दी गई टेबल में, Android 13 वाले डिवाइस पर ऐप्लिकेशन के अलग-अलग वर्शन के लिए सूचना के व्यवहार के बारे में बताया गया है:

Android 13 पर काम करने वाला डिवाइस Android 13 या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन Android 13 से पहले के वर्शन को टारगेट करने वाले ऐप्लिकेशन
नया इंस्टॉल ऐप्लिकेशन से सूचनाएं मिलने तक, सूचनाएं ब्लॉक रहती हैं.

ऐप्लिकेशन यह कंट्रोल करते हैं कि उन्हें कब अनुमति मांगनी है.

सूचनाएं तब तक ब्लॉक रहती हैं, जब तक ओएस से सूचनाएं पाने का अनुरोध नहीं किया जाता.

ऐप्लिकेशन को पहली बार चलाने पर, अनुमति मांगी जाती है.

मौजूदा ऐप्लिकेशन (अपग्रेड) ऐप्लिकेशन से सूचनाएं तब तक मिलती रहेंगी, जब तक वह आपसे अनुमति नहीं मांगता.

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

सूचनाएं तब तक भेजी जा सकती हैं, जब तक ओएस से सूचनाएं भेजने का अनुरोध नहीं किया जाता.

ऐप्लिकेशन को पहली बार चलाने तक, कुछ समय के लिए अनुमति दी जाती है.

लागू करने के लिए दिशा-निर्देश

रेफ़रंस लागू करने के लिए, सूचना सेवा, अनुमति सेवा, और नीति सेवा देखें. डिफ़ॉल्ट अनुमति हैंडलर के लिए अपवाद लागू करने के लिए, रनटाइम की अनुमतियां देखें.

लागू करने के दौरान, Android 13 या उससे पहले के SDK टूल को टारगेट करने वाले ऐप्लिकेशन के लिए, उपयोगकर्ता को सूचना देने के तरीके के बारे में इन दिशा-निर्देशों का पालन करें:

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

    • Android 13 और उसके बाद के वर्शन के SDK टूल को टारगेट करने वाले ऐप्लिकेशन के लिए, अगर उपयोगकर्ता ने पहले कभी ऐप्लिकेशन या NotificationChannel लेवल पर, इस ऐप्लिकेशन के लिए सूचना सेटिंग को पसंद के मुताबिक नहीं बनाया है, तो कुछ समय के लिए दी गई अनुमति रद्द कर दें. इसके बाद, ऐप्लिकेशन को सूचनाएं भेजने की अनुमति जारी रखने से पहले, उपयोगकर्ता से अनुमति लेनी होगी.

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

    • जिन ऐप्लिकेशन के लिए टारगेट किए गए SDK टूल का वर्शन, Android 13 से पहले का है उनके लिए, ऐप्लिकेशन के कम से कम एक NotificationChannel बनाने के बाद, पहली गतिविधि शुरू होने पर, अनुमति का अनुरोध दिखाने के लिए, इंटरसेप्ट करें. इस अनुरोध में उपयोगकर्ता से पूछा जाएगा कि क्या उसे ऐप्लिकेशन से सूचनाएं चाहिए.

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

  • बैक अप लेने और डेटा वापस लाने की सुविधा, Android 13 डिवाइस और किसी पुराने ऑपरेटिंग सिस्टम वाले डिवाइस के बीच काम करनी चाहिए. Android 13 डिवाइस से जनरेट किए गए डेटा का बैकअप, OS के पुराने वर्शन पर वापस लाया जा सकता है. साथ ही, OS के पुराने वर्शन से जनरेट किए गए डेटा का बैकअप, Android 13 डिवाइस पर वापस लाया जा सकता है.

  • चल रहे मीडिया के प्लेबैक से जुड़ी मीडिया सूचनाओं को, सूचना पाने की अनुमति से छूट दी जानी चाहिए.

सूचना और अनुमति सिस्टम में किए गए बदलावों की पुष्टि करना

लागू करने की पुष्टि करने के लिए, ये टेस्ट चलाएं:

  • PreferencesHelperTest, NotificationManagerServiceTest में बताई गई यूनिट टेस्ट.

  • ऐसा कोई भी मैन्युअल टेस्ट जिसमें अपग्रेड, बैकअप, और डेटा वापस लाने की जांच की जाती है.

  • सूचनाएं भेजने वाला, सीटीएस की अनुमति और सूचना सिस्टम का कोई भी टेस्ट. इनमें से कुछ टेस्ट, cts/tests/tests/permission/, NotificationManagerTest.java, और cts/tests/tests/notificationlegacy/ में मौजूद हैं.