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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

नए ऐप्लिकेशन पर पड़ने वाले असर

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

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

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

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

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

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

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

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

मुक्तियाँ

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

मीडिया सेशन

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

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

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

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

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

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

यह देखा जा सकता है कि Android 13 या उसके बाद के वर्शन पर काम करने वाले डिवाइस पर पहली बार इस्तेमाल किए जाने पर, सूचना की अनुमति से आपके ऐप्लिकेशन पर क्या असर पड़ता है. Android Debug Bridge (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 वैल्यू नहीं दिखाता है, तब तक आपके ऐप्लिकेशन को बीच वाली स्क्रीन दिखाने की ज़रूरत नहीं है. इस स्क्रीन पर टाइटल टेक्स्ट "सूचना पाएं!" होता है. कंपोज़ करते समय, LocalContext.current को ऐक्सेस करके और उसे Activity पर कास्ट करके, मौजूदा Activity देखा जा सकता है.

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

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

अनुमति का अनुरोध करना

अपने Compose यूज़र इंटरफ़ेस (यूआई) में अनुमति का अनुरोध करने के लिए, ActivityResultContracts.RequestPermission() अनुबंध के साथ rememberLauncherForActivityResult() एपीआई का इस्तेमाल करें.

यहां दिए गए स्निपेट में, उपयोगकर्ता के इंटरैक्शन के जवाब में सूचना की अनुमति का अनुरोध करने का तरीका बताया गया है:

Kotlin

val context = LocalContext.current
val permissionLauncher = rememberLauncherForActivityResult(
    ActivityResultContracts.RequestPermission()
) { isGranted ->
    if (isGranted) {
        // Permission granted, you can now send notifications.
    } else {
        // Permission denied, handle accordingly.
    }
}

// ... in your UI ...
Button(onClick = {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
    }
}) {
    Text("Enable Notifications")
}

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

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

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

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

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

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

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