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

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

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

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

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

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

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

मुक्तियाँ

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

मीडिया सेशन

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

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

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

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

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

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

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

  • ऐप्लिकेशन को हाल ही में किसी ऐसे डिवाइस पर इंस्टॉल किया गया है जो 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 नहीं दिखाता, तब तक आपके ऐप्लिकेशन को बीच वाली स्क्रीन दिखाने की ज़रूरत नहीं है. यह वह स्क्रीन है जिसका टाइटल टेक्स्ट "सूचना पाएं!" है. Compose में, 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() को कॉल करें.

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

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