सूचना के रनटाइम की अनुमति

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

हमारा सुझाव है कि आप जल्द से जल्द Android 13 या इसके बाद के वर्शन को टारगेट करें, ताकि आपको इस सुविधा के अतिरिक्त कंट्रोल और फ़्लेक्सिबिलिटी का फ़ायदा मिल सके. अगर 12L (एपीआई लेवल 32) या इससे पहले के वर्शन को टारगेट किया जाता है, तो ऐप्लिकेशन की सुविधाओं के हिसाब से अनुमति मांगने के मामले में आपको कुछ पाबंदियों का सामना करना पड़ सकता है.

अनुमति के बारे में जानकारी देना

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

आपको ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में जिस अनुमति का एलान करना है वह इस कोड स्निपेट में दिखती है:

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

ऐप्लिकेशन की सुविधाएं, अनुमतियों वाले डायलॉग बॉक्स में उपयोगकर्ता के चुने गए विकल्प पर निर्भर करती हैं

इस डायलॉग में, उपयोगकर्ताओं के लिए ये कार्रवाइयां उपलब्ध होती हैं:

यहां दिए गए सेक्शन में बताया गया है कि उपयोगकर्ता की कार्रवाई के आधार पर, आपका ऐप्लिकेशन कैसे काम करता है.

उपयोगकर्ता "अनुमति दें" विकल्प चुनता है

अगर उपयोगकर्ता अनुमति दें विकल्प चुनता है, तो आपका ऐप्लिकेशन ये काम कर सकता है:

उपयोगकर्ता "अनुमति न दें" विकल्प चुनता है

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

चेतावनी: अगर आपका ऐप्लिकेशन 12L या इससे कम वर्शन को टारगेट करता है और उपयोगकर्ता अनुमति न दें पर एक बार भी टैप करता है, तो उसे फिर से प्रॉम्प्ट नहीं किया जाएगा. ऐसा तब तक होगा, जब तक इनमें से कोई एक कार्रवाई नहीं हो जाती:

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

उपयोगकर्ता ने डायलॉग को स्वाइप करके खारिज कर दिया

अगर उपयोगकर्ता डायलॉग को खारिज कर देता है, तो सूचना पाने की अनुमति की स्थिति में कोई बदलाव नहीं होता. इसका मतलब है कि वह अनुमति दें या अनुमति न दें में से किसी भी विकल्प को नहीं चुनता है.

नए ऐप्लिकेशन पर असर

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

अनुमति मांगने वाला डायलॉग कब दिखेगा, यह आपके ऐप्लिकेशन के टारगेट एसडीके वर्शन पर निर्भर करता है:

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

मौजूदा ऐप्लिकेशन के अपडेट पर असर

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

अनुमति मिलने से पहले, उसे ऐक्सेस करने की ज़रूरी शर्तें

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

अगर किसी उपयोगकर्ता ने 12L या इससे पुराने वर्शन वाले डिवाइस पर, आपके ऐप्लिकेशन के लिए सूचनाएं बंद कर दी हैं, तो डिवाइस को Android 13 या इसके बाद के वर्शन पर अपग्रेड करने पर भी सूचनाएं बंद रहेंगी.

छूट

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

मीडिया सेशन

मीडिया सेशन से जुड़ी सूचनाओं पर, इस बदलाव का असर नहीं पड़ेगा.

फ़ोन कॉल को खुद मैनेज करने के लिए कॉन्फ़िगर किए गए ऐप्लिकेशन

अगर आपका ऐप्लिकेशन, फ़ोन कॉल को खुद मैनेज करने के लिए कॉन्फ़िगर किया गया है, तो आपको POST_NOTIFICATIONS अनुमति की ज़रूरत नहीं है. इससे आपका ऐप्लिकेशन, Notification.CallStyle सूचना स्टाइल का इस्तेमाल करने वाली सूचनाएं भेज पाएगा.

सिस्टम यह मानता है कि आपके ऐप्लिकेशन ने फ़ोन कॉल मैनेज करने की सुविधा को खुद ही कॉन्फ़िगर किया है. हालांकि, ऐसा तब होता है, जब ऐप्लिकेशन ये सभी काम करता हो:

  1. MANAGE_OWN_CALLS अनुमति के बारे में बताता है.
  2. यह ConnectionService इंटरफ़ेस लागू करता है.
  3. यह डिवाइस की टेलीकॉम सेवा देने वाली कंपनी के साथ रजिस्टर करता है. इसके लिए, यह registerPhoneAccount() को कॉल करता है.

अपने ऐप्लिकेशन का परीक्षण करें

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

  • ऐप्लिकेशन को Android 13 या इसके बाद के वर्शन वाले डिवाइस पर हाल ही में इंस्टॉल किया गया हो:

    adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed
  • जब उपयोगकर्ता ने 12L या इससे पहले के वर्शन वाले डिवाइस पर ऐप्लिकेशन इंस्टॉल किया हो और सूचनाएं पाने की सुविधा चालू रखी हो. इसके बाद, डिवाइस को Android 13 या इसके बाद के वर्शन पर अपग्रेड किया गया हो:

    adb shell pm grant PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm set-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed
  • जब उपयोगकर्ता, 12L या इससे पहले के वर्शन वाले डिवाइस पर ऐप्लिकेशन इंस्टॉल करता है और सूचनाएं मैन्युअल तरीके से बंद कर देता है. इसके बाद, डिवाइस को Android 13 या इसके बाद के वर्शन पर अपग्रेड किया जाता है:

    adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm set-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed

सबसे सही तरीके

इस सेक्शन में, सूचनाएं पाने की नई अनुमति का इस्तेमाल अपने ऐप्लिकेशन में सबसे असरदार तरीके से करने के कई तरीके बताए गए हैं.

अपने ऐप्लिकेशन के टारगेट एसडीके वर्शन को अपडेट करना

अनुमति का डायलॉग कब दिखे, इस बारे में अपने ऐप्लिकेशन को ज़्यादा विकल्प देने के लिए, अपने ऐप्लिकेशन को अपडेट करें, ताकि वह Android 13 या उसके बाद के वर्शन को टारगेट करे.

सूचना की अनुमति मांगने वाला प्रॉम्प्ट दिखाने में लगने वाला समय

उपयोगकर्ताओं से कोई अनुमति मांगने से पहले, उन्हें अपने ऐप्लिकेशन के बारे में जानकारी दें.

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

  • जब उपयोगकर्ता "सूचना की घंटी" बटन पर टैप करता है.
  • जब कोई उपयोगकर्ता, किसी दूसरे व्यक्ति के सोशल मीडिया खाते को फ़ॉलो करता है.
  • उपयोगकर्ता, खाना डिलीवर करने का ऑर्डर सबमिट करता है.

पहली इमेज में, सूचना पाने की अनुमति का अनुरोध करने के लिए, सुझाया गया वर्कफ़्लो दिखाया गया है. जब तक shouldShowRequestPermissionRationale(), true नहीं दिखाता, तब तक आपके ऐप्लिकेशन को बीच वाली स्क्रीन दिखाने की ज़रूरत नहीं है. इस स्क्रीन पर टाइटल टेक्स्ट "सूचना पाएं!" होता है.

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

उपयोगकर्ता के साइन इन करने के बाद, उसे यात्रा से जुड़े अपडेट की सूचना पाने का न्योता दिया जाता है. जब उपयोगकर्ता &#39;मैं सहमत हूं&#39; बटन दबाता है, तब ऐप्लिकेशन नई अनुमति का अनुरोध करता है. इससे सिस्टम डायलॉग बॉक्स दिखता है
पहली इमेज. सूचना पाने की अनुमति का अनुरोध करने के लिए, उपयोगकर्ता के हिसाब से सुझाया गया वर्कफ़्लो. बीच वाली स्क्रीन सिर्फ़ तब ज़रूरी होती है, जब shouldShowRequestPermissionRationale(), true दिखाता है.

कॉन्टेक्स्ट के हिसाब से अनुमति का अनुरोध करना

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

इस मौके का इस्तेमाल करके, अपने इरादों के बारे में पारदर्शिता दिखाएं. इससे उपयोगकर्ताओं के आपके ऐप्लिकेशन को सूचनाएं भेजने की अनुमति देने की संभावना बढ़ जाती है.

देखें कि आपका ऐप्लिकेशन सूचनाएं भेज सकता है या नहीं

आपका ऐप्लिकेशन सूचना भेजे, इससे पहले पुष्टि करें कि उपयोगकर्ता ने आपके ऐप्लिकेशन के लिए सूचनाएं पाने की सुविधा चालू की है या नहीं. इसके लिए, areNotificationsEnabled() को कॉल करें.

अनुमति का इस्तेमाल ज़िम्मेदारी से करना

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