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

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 या इससे पुराने वर्शन वाले किसी डिवाइस पर, आपके ऐप्लिकेशन के लिए सूचनाएं साफ़ तौर पर बंद न की हों.

अगर उपयोगकर्ता ने 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 में, मौजूदा Activity को LocalContext.current को ऐक्सेस करके और उसे Activity में कास्ट करके देखा जा सकता है.

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

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

Compose में अनुमति का अनुरोध करना

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

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

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() को कॉल करें.

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

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