हमारा सुझाव है कि आप अपने ऐप्लिकेशन में अनुमतियों का इस्तेमाल कम से कम करें. इससे ऐप्लिकेशन की क्वालिटी को बेहतर बनाने और उपयोगकर्ता की निजता को सुरक्षित रखने में मदद मिलेगी. इससे लोगों को बेहतरीन क्वालिटी वाले ऐसे ऐप्लिकेशन ढूंढने और इस्तेमाल करने में मदद मिलती है जो सुरक्षित और भरोसेमंद हों.
उपयोगकर्ताओं से अनुमतियों का अनुरोध करने पर, उपयोगकर्ता फ़्लो में रुकावट आती है. साथ ही, उपयोगकर्ता आपके अनुरोध को अस्वीकार कर सकते हैं. इसके अलावा, हर बार नई अनुमति का एलान करते समय, आपको यह देखना होगा कि आपका ऐप्लिकेशन, उपयोगकर्ता के डेटा का अनुरोध कैसे करता है और उसे कैसे शेयर करता है. कुछ खास तौर पर संवेदनशील अनुमतियों और एपीआई के लिए, आपको ऐप्लिकेशन में यह जानकारी देनी होगी कि आपका ऐप्लिकेशन, उपयोगकर्ता के डेटा को कैसे ऐक्सेस, इकट्ठा, इस्तेमाल, और शेयर करता है.
अनुमति के इस्तेमाल को कम करने के कई अन्य तरीके हैं:
- उपयोगकर्ता के डेटा को ऐक्सेस करने की अनुमति के लिए, कम फ़िडेलिटी वाले विकल्पों का इस्तेमाल करें. जैसे, जब जगह की सटीक जानकारी की ज़रूरत न हो, तब आस-पास की जगह की जानकारी का अनुरोध करें.
- ऐसे पिकर और अनुमति के विकल्पों का इस्तेमाल करें जो सीमित दायरे में संवेदनशील अनुमतियों का ऐक्सेस देते हैं. जैसे, फ़ोटो पिकर, संपर्क पिकर, और जगह की जानकारी का बटन
- ऐसे एपीआई कॉल करें जिनकी मदद से आपका ऐप्लिकेशन, अनुमतियां ज़ाहिर किए बिना चुनी गई सुविधा को इस्तेमाल कर सके.
- अनुमतियां देने के बजाय, फ़ंक्शन को पूरा करने के लिए खास इंटेंट या इवेंट हैंडलर को शुरू करें.
- सिस्टम, फ़ाइल से जुड़ी अलग-अलग कार्रवाइयों के लिए पहले से मौजूद अनुबंध उपलब्ध कराता है. साथ ही, कस्टम अनुबंध का भी इस्तेमाल किया जा सकता है.
अगर आपको किसी अनुमति का एलान करना है, तो हमेशा उपयोगकर्ता के फ़ैसले का सम्मान करें. साथ ही, ऐप्लिकेशन के अनुभव को बेहतर बनाने का तरीका उपलब्ध कराएं.
इस पेज पर, इस्तेमाल के कई ऐसे उदाहरण दिए गए हैं जिन्हें आपका ऐप्लिकेशन, किसी भी अनुमति की ज़रूरत बताए बिना पूरा कर सकता है.
आस-पास की जगहें दिखाओ
ऐसा हो सकता है कि आपके ऐप्लिकेशन को उपयोगकर्ता की जगह की अनुमानित जानकारी की ज़रूरत हो. यह आस-पास के रेस्टोरेंट जैसी जगह की जानकारी दिखाने के लिए उपयोगी है. जगह की जानकारी के इस्तेमाल के हर उदाहरण के लिए, सटीक जानकारी और ऐक्सेस की अवधि से जुड़ी ज़रूरी शर्तें अलग-अलग होती हैं. ज़्यादातर मामलों में, उपयोगकर्ता की जगह की जानकारी का अनुमानित डेटा ही काफ़ी होता है. अगर आपको अपने ऐप्लिकेशन में ऐसी सुविधा लागू करनी है जो उपयोगकर्ता की जगह की जानकारी पर निर्भर करती है, तो ऐक्सेस करने का सही तरीका चुनने के लिए, यहां दिए गए विकल्प देखें.
- अगर आपके ऐप्लिकेशन की सुविधा के लिए जगह की सटीक जानकारी की ज़रूरत है, लेकिन ऐप्लिकेशन इस्तेमाल करने के दौरान सिर्फ़ किसी खास समय पर, जैसे कि "मेरे आस-पास खोजें" या ई-कॉमर्स के लिए पते अपने-आप भरने की सुविधा, तो जगह की जानकारी वाले बटन का इस्तेमाल करना, आपके लिए सबसे अच्छा विकल्प हो सकता है. इससे, उपयोगकर्ता को होने वाली परेशानी और अनुमति के ज़्यादा स्कोप पर निर्भरता, दोनों को कम किया जा सकता है.
- अगर आपके ऐप्लिकेशन को बार-बार जगह की जानकारी की ज़रूरत पड़ती है, तो
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() का इस्तेमाल करके, ऐप्लिकेशन के हिसाब से टोकन जनरेट करें. इस टोकन को किसी ऐसे ऐप्लिकेशन या सेवा को पास करें जो पुष्टि करने के लिए एसएमएस भेज सकती है.
किसी उपयोगकर्ता के फ़ोन नंबर की पुष्टि करना
अपने ऐप्लिकेशन को किसी उपयोगकर्ता के फ़ोन नंबर की सुरक्षित तरीके से पुष्टि करने की अनुमति देने के लिए, Digital Credentials API इस्तेमाल करें. यह सबसे बेहतर विकल्प है. इस एपीआई का इस्तेमाल सीधे तौर पर या इसके साथ काम करने वाले एग्रीगेटर की मदद से किया जा सकता है. इससे, डिवाइस की संवेदनशील अनुमतियों का अनुरोध किए बिना, उपयोगकर्ता के खाते की जानकारी की पुष्टि भरोसेमंद तरीके से की जा सकती है. Firebase के समाधान के लिए, Firebase फ़ोन नंबर की पुष्टि करने की सुविधा लेख पढ़ें.
इसके अलावा, SMS Retriever API का इस्तेमाल करके, एक बार इस्तेमाल होने वाले पासकोड की मदद से किसी उपयोगकर्ता के फ़ोन नंबर की पुष्टि की जा सकती है.
उपयोगकर्ता का फ़ोन नंबर अपने-आप डालना
ज़्यादा असरदार तरीके से बिक्री या सहायता उपलब्ध कराने के लिए, आपका ऐप्लिकेशन उपयोगकर्ता को अपने डिवाइस का फ़ोन नंबर अपने-आप भरने की अनुमति दे सकता है.
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 बारकोड स्कैनिंग एपीआई का इस्तेमाल करें.
इस्तेमाल न की गई अनुमतियां रीसेट करना
Android, इस्तेमाल नहीं की गई रनटाइम अनुमतियों को डिफ़ॉल्ट रूप से अस्वीकार की गई स्थिति में रीसेट करने के कई तरीके उपलब्ध कराता है.
डिज़ाइन से जुड़े दिशा-निर्देश पढ़ें.
रनटाइम की अनुमतियों का अनुरोध करना
जब आपको यह पता चल जाए कि आपके ऐप्लिकेशन को रनटाइम अनुमतियों का एलान करना है और उनके लिए अनुरोध करना है, तो ऐसा करने के लिए किसी खास वर्कफ़्लो का पालन करें.
डिज़ाइन से जुड़े दिशा-निर्देश पढ़ें.
बताएं कि आपके ऐप्लिकेशन को अनुमतियों की ज़रूरत क्यों है
requestPermissions() का इस्तेमाल करने पर, एक डायलॉग दिखता है. इसमें यह बताया जाता है कि आपका ऐप्लिकेशन किन अनुमतियों का इस्तेमाल करना चाहता है. हालांकि, इसमें यह नहीं बताया जाता कि वह ऐसा क्यों करना चाहता है. इससे उपयोगकर्ता को परेशानी हो सकती है.
इस डायलॉग को कब और कैसे दिखाया जाए, इस बारे में ज़्यादा जानकारी और सुझाव पाने के लिए, डिजाइन से जुड़े दिशा-निर्देश पढ़ें.
अनुमति न मिलने की समस्या हल करना
आपके ऐप्लिकेशन को, अनुमति न देने के न्योते को स्वीकार करने से पहले और बाद में, उपयोगकर्ताओं को इसके असर के बारे में बताना चाहिए.
डिज़ाइन से जुड़े दिशा-निर्देश पढ़ें.