अनुमति के अनुरोधों की संख्या कम करें

हमारा सुझाव है कि आप अपने ऐप्लिकेशन में अनुमतियों का इस्तेमाल कम से कम करें. इससे ऐप्लिकेशन की क्वालिटी बेहतर बनाने और उपयोगकर्ता की निजता को सुरक्षित रखने में मदद मिलती है. इससे लोगों को अच्छी क्वालिटी वाले ऐसे ऐप्लिकेशन खोजने और इस्तेमाल करने में मदद मिलती है जो उन्हें सुरक्षित और भरोसेमंद अनुभव देते हैं.

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

अनुमति के इस्तेमाल को कम करने के कई अन्य तरीके हैं:

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

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

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

आस-पास की जगहें दिखाओ

ऐसा हो सकता है कि आपके ऐप्लिकेशन को उपयोगकर्ता की जगह की अनुमानित जानकारी की ज़रूरत हो. यह आस-पास के रेस्टोरेंट जैसी जगहों की जानकारी दिखाने के लिए उपयोगी है.

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

  • अगर आपके ऐप्लिकेशन को बार-बार जगह की जानकारी की ज़रूरत पड़ती है, तो ACCESS_COARSE_LOCATION अनुमति का एलान करें. इस अनुमति से, जगह की जानकारी देने वाली सेवाओं से डिवाइस की जगह की अनुमानित जानकारी मिलती है. इसके बारे में, जगह की अनुमानित जानकारी की सटीक जानकारी के बारे में दिए गए दस्तावेज़ में बताया गया है.
  • अगर आपके ऐप्लिकेशन को जगह की जानकारी की ज़रूरत कम पड़ती है या सिर्फ़ एक बार पड़ती है, तो उपयोगकर्ता से पता या पिन कोड डालने के लिए कहें.

इस्तेमाल के अन्य उदाहरणों के लिए, डिवाइस की जगह की जानकारी का ज़्यादा सटीक अनुमान लगाना ज़रूरी होता है. इन स्थितियों में ही, ACCESS_FINE_LOCATION अनुमति का एलान किया जा सकता है.

फ़ाइलें बनाना और उन्हें ऐक्सेस करना

Android में, स्टोरेज या सेंसर से जुड़ी किसी भी अनुमति के बारे में बताए बिना फ़ाइलें बनाई और ऐक्सेस की जा सकती हैं.

मीडिया फ़ाइलें खोलना

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

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

अगर आपके ऐप्लिकेशन को फ़ोटो पिकर का इस्तेमाल किए बिना मीडिया फ़ाइलें ऐक्सेस करनी हैं, तो आपको स्टोरेज से जुड़ी किसी भी अनुमति के बारे में जानकारी देने की ज़रूरत नहीं है:

दस्तावेज़ खोलें

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

ऐसे में, READ_EXTERNAL_STORAGE को सिर्फ़ पुराने डिवाइसों के साथ काम करने के लिए घोषित करें. android:maxSdkVersion को 28 पर सेट करें.

दस्तावेज़ बनाने वाले ऐप्लिकेशन के हिसाब से, इनमें से कोई एक काम करें:

  • अगर उपयोगकर्ता ने आपके ऐप्लिकेशन में दस्तावेज़ बनाया है, तो इसे सीधे तौर पर ऐक्सेस करें.
  • अगर उपयोगकर्ता ने किसी दूसरे ऐप्लिकेशन में दस्तावेज़ बनाया है, तो Storage Access Framework का इस्तेमाल करें.

फ़ोटो खींचें

उपयोगकर्ता, पहले से इंस्टॉल किए गए सिस्टम कैमरा ऐप्लिकेशन का इस्तेमाल करके, आपके ऐप्लिकेशन में फ़ोटो ले सकते हैं.

ऐसी स्थिति में, CAMERA अनुमति का एलान न करें. इसके बजाय, ACTION_IMAGE_CAPTURE इंटेंट ऐक्शन शुरू करें.

वीडियो रिकॉर्ड करें

उपयोगकर्ता, पहले से इंस्टॉल किए गए सिस्टम कैमरा ऐप्लिकेशन का इस्तेमाल करके, आपके ऐप्लिकेशन में वीडियो रिकॉर्ड कर सकते हैं.

ऐसी स्थिति में, CAMERA अनुमति का एलान न करें. इसके बजाय, ACTION_VIDEO_CAPTURE इंटेंट ऐक्शन शुरू करें.

उस डिवाइस की पहचान करना जिस पर आपके ऐप्लिकेशन का कोई इंस्टेंस चल रहा है

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

ऐसे में, डिवाइस के IMEI नंबर को सीधे तौर पर ऐक्सेस न करें. हालांकि, Android 10 और इसके बाद के वर्शन में ऐसा नहीं किया जा सकता. इसके बजाय, इनमें से कोई एक काम करें:

  • Instance ID लाइब्रेरी का इस्तेमाल करके, अपने ऐप्लिकेशन के इंस्टेंस के लिए यूनीक डिवाइस आइडेंटिफ़ायर पाएं.
  • अपने ऐप्लिकेशन के स्टोरेज के लिए, अपना आइडेंटिफ़ायर बनाएं. बुनियादी सिस्टम फ़ंक्शन इस्तेमाल करें, जैसे कि randomUUID().

ब्लूटूथ की मदद से किसी डिवाइस से कनेक्ट करना

आपका ऐप्लिकेशन, ब्लूटूथ के ज़रिए किसी दूसरे डिवाइस पर डेटा ट्रांसफ़र करके बेहतर अनुभव दे सकता है.

इस सुविधा को चालू करने के लिए, ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATIION या BLUETOOTH_ADMIN अनुमतियों का एलान न करें. इसके बजाय, कंपैनियन डिवाइस को जोड़ना सुविधा का इस्तेमाल करें.

पेमेंट कार्ड का नंबर अपने-आप भरने की सुविधा

Google Play services, एक लाइब्रेरी उपलब्ध कराती है. इसकी मदद से, पेमेंट कार्ड का नंबर अपने-आप भरा जा सकता है. CAMERA की अनुमति देने के बजाय, डेबिट और क्रेडिट कार्ड की पहचान लाइब्रेरी का इस्तेमाल किया जा सकता है.

फ़ोन कॉल और मैसेज मैनेज करना

Android और Google Play services, ऐसी लाइब्रेरी उपलब्ध कराती हैं जिनकी मदद से फ़ोन कॉल और मैसेज मैनेज किए जा सकते हैं. इसके लिए, आपको फ़ोन कॉल या एसएमएस मैसेज से जुड़ी किसी भी अनुमति का एलान करने की ज़रूरत नहीं होती.

एक बार इस्तेमाल होने वाला पासकोड अपने-आप डालना

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

Google Play services की मदद से काम करने वाले डिवाइसों पर इस सुविधा को चालू करने के लिए, READ_SMS अनुमति का एलान न करें. इसके बजाय, SMS Retriever API का इस्तेमाल करें.

अगर आपका ऐप्लिकेशन Android 8.0 (एपीआई लेवल 26) या उसके बाद के वर्शन को टारगेट करता है, तो अन्य डिवाइसों पर createAppSpecificSmsToken() का इस्तेमाल करके, ऐप्लिकेशन के लिए खास टोकन जनरेट करें. इस टोकन को किसी ऐसे ऐप्लिकेशन या सेवा को पास करें जो पुष्टि करने वाला एसएमएस भेज सकती है.

उपयोगकर्ता का फ़ोन नंबर अपने-आप डालना

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

Google Play services की मदद से काम करने वाले डिवाइसों पर इस सुविधा को चालू करने के लिए, READ_PHONE_STATE अनुमति का एलान न करें. इसके बजाय, Phone Number Hint लाइब्रेरी का इस्तेमाल करें.

फ़ोन कॉल फ़िल्टर करना

उपयोगकर्ता को होने वाली गैर-ज़रूरी रुकावटों को कम करने के लिए, आपका ऐप्लिकेशन स्पैम के लिए फ़ोन कॉल फ़िल्टर कर सकता है.

इस सुविधा को चालू करने के लिए, READ_PHONE_STATE अनुमति का एलान न करें. इसके बजाय, CallScreeningService एपीआई का इस्तेमाल करें.

फ़ोन कॉल करना

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

इस सुविधा का इस्तेमाल करने के लिए, ACTION_CALL कार्रवाई के बजाय ACTION_DIAL इंटेंट ऐक्शन का इस्तेमाल करें. ACTION_CALL को इंस्टॉल करने के दौरान CALL_PHONE अनुमति की ज़रूरत होती है. इससे कॉल करने की सुविधा वाले डिवाइसों पर ही आपका ऐप्लिकेशन इंस्टॉल किया जा सकता है. जैसे, कुछ टैबलेट.

ऐप्लिकेशन में रुकावट आने पर मीडिया को रोकना

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

इस सुविधा को चालू करने के लिए, READ_PHONE_STATE अनुमति का एलान न करें. इसके बजाय, onAudioFocusChange() इवेंट हैंडलर लागू करें. यह सिस्टम के ऑडियो फ़ोकस में बदलाव होने पर अपने-आप काम करता है. ऑडियो फ़ोकस लागू करने के तरीके के बारे में ज़्यादा जानें.

बारकोड स्कैन करना

Android में, Google Code Scanner API के लिए सहायता शामिल है. यह Google Play services की मदद से काम करता है. इससे, कैमरे की अनुमतियां दिए बिना बारकोड को डिकोड किया जा सकता है. इस एपीआई से, उपयोगकर्ता की निजता बनाए रखने में मदद मिलती है. साथ ही, इससे बारकोड स्कैन करने के लिए, कस्टम यूज़र इंटरफ़ेस (यूआई) बनाने की ज़रूरत कम हो जाती है.

यह एपीआई, बारकोड को स्कैन करता है और सिर्फ़ स्कैन के नतीजे आपके ऐप्लिकेशन को भेजता है. इमेज को डिवाइस पर प्रोसेस किया जाता है. Google, कोई डेटा या स्कैन के नतीजे सेव नहीं करता.

अगर आपके ऐप्लिकेशन को इस्तेमाल के मुश्किल उदाहरणों या बारकोड फ़ॉर्मैट के साथ काम करना है या उसे कस्टम यूज़र इंटरफ़ेस (यूआई) की ज़रूरत है, तो ML Kit बारकोड स्कैनिंग API का इस्तेमाल करें.

इस्तेमाल न की गई अनुमतियां रीसेट करना

Android, इस्तेमाल नहीं की गई रनटाइम अनुमतियों को डिफ़ॉल्ट रूप से अस्वीकार की गई स्थिति में रीसेट करने के कई तरीके उपलब्ध कराता है.

डिज़ाइन से जुड़े दिशा-निर्देश पढ़ें.

रनटाइम की अनुमतियों का अनुरोध करना

जब आपको यह पता चल जाए कि आपके ऐप्लिकेशन को रनटाइम अनुमतियों का एलान करना है और उनके लिए अनुरोध करना है, तो ऐसा करने के लिए एक खास वर्कफ़्लो का पालन करें.

डिज़ाइन से जुड़े दिशा-निर्देश पढ़ें.

बताएं कि आपके ऐप्लिकेशन को अनुमतियों की ज़रूरत क्यों है

requestPermissions() का इस्तेमाल करने पर, एक डायलॉग दिखता है. इसमें बताया जाता है कि आपका ऐप्लिकेशन किन अनुमतियों का इस्तेमाल करना चाहता है. हालांकि, इसमें यह नहीं बताया जाता कि वह ऐसा क्यों करना चाहता है. इससे उपयोगकर्ता को परेशानी हो सकती है.

इस डायलॉग को कब और कैसे दिखाया जाए, इस बारे में ज़्यादा जानकारी और सुझाव पाने के लिए, डिजाइन से जुड़े दिशा-निर्देश पढ़ें.

अनुमति न मिलने की समस्या हल करना

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

डिज़ाइन से जुड़े दिशा-निर्देश पढ़ें.