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

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

अनुमतियों वाला डायलॉग दिखने का समय, आपके ऐप्लिकेशन के टारगेट SDK टूल के वर्शन पर आधारित होता है:

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

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

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

पहले से दी जाने वाली अनुमति के लिए ज़रूरी शर्तें

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

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

छूट

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

मीडिया सेशन

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

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

अगर आपका ऐप्लिकेशन, फ़ोन कॉल को खुद मैनेज करने के लिए कॉन्फ़िगर किया गया है, तो आपको 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

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

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

अपने ऐप्लिकेशन के टारगेट SDK टूल का वर्शन अपडेट करना

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

सूचना की अनुमति का प्रॉम्प्ट दिखाने का इंतज़ार करें

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

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

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

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

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

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

संदर्भ के हिसाब से अनुमति का अनुरोध करना

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

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

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

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

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

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