Location Permission एक अनुमति है जो मोबाइल एप्लिकेशन उपयोगकर्ता से उसके भौगोलिक स्थान के डेटा तक पहुंचने के लिए अनुरोध करता है। इस अनुमति के बिना, एप्लिकेशन डिवाइस के निर्देशांक निर्धारित नहीं कर सकता, और इसलिए जियोलोकेशन सुविधाएं प्रदान नहीं कर सकता। Apple Developer Documentation, 2024 के अनुसार, जियोलोकेशन सेवाओं का उपयोग करने वाले सभी एप्लिकेशन सिस्टम डायलॉग के माध्यम से उपयोगकर्ता की स्पष्ट सहमति लेने के लिए बाध्य हैं।
मुख्य बिंदु
Location Permission एक ऑपरेटिंग सिस्टम तंत्र है जो डिवाइस के भौगोलिक स्थान के डेटा तक एप्लिकेशन की पहुंच को नियंत्रित करता है। उपयोगकर्ता की स्पष्ट सहमति के बिना, एप्लिकेशन GPS निर्देशांक, Wi-Fi नेटवर्क डेटा या सेलुलर टावर जानकारी प्राप्त नहीं कर सकता।
मोबाइल प्लेटफॉर्म Android और iOS अपनी स्वयं की अनुमति प्रणाली लागू करते हैं, लेकिन सामान्य तर्क समान है: एप्लिकेशन मेनिफेस्ट या कॉन्फ़िगरेशन फ़ाइल में आवश्यक अनुमतियों की घोषणा करता है, फिर रनटाइम पर उनका अनुरोध करता है। Android Developers, 2024 के अनुसार, Android 10 से शुरू होकर, सभी जियोलोकेशन अनुमतियां खतरनाक श्रेणी में आती हैं और रनटाइम अनुरोध की आवश्यकता होती है।
इस दृष्टिकोण का कारण उपयोगकर्ता गोपनीयता की सुरक्षा है। स्थान डेटा का उपयोग यात्रा मार्ग बनाने, काम और आराम के स्थानों को निर्धारित करने और व्यक्ति की पहचान करने के लिए किया जा सकता है। इसलिए, दोनों प्लेटफॉर्म अनुरोध संवाद में पारदर्शी स्पष्टीकरण की आवश्यकता रखते हैं: एप्लिकेशन को यह बताना होगा कि उसे जियोलोकेशन तक पहुंच की आवश्यकता क्यों है।
जियोलोकेशन अनुमति किसी भी एप्लिकेशन के लिए आवश्यक है जिसकी कार्यक्षमता उपयोगकर्ता के भौतिक स्थान को जानने पर निर्भर करती है। मानचित्र और नेविगेशन, डिलीवरी एप्लिकेशन, मौसम सेवाएं, जियोटैगिंग वाले सोशल नेटवर्क — सॉफ्टवेयर की ये सभी श्रेणियां Location Permission की आवश्यकता रखती हैं।
इस अनुमति के बिना, एप्लिकेशन किसी भी उपलब्ध विधि से डिवाइस के निर्देशांक निर्धारित नहीं कर सकता: न GPS मॉड्यूल के माध्यम से, न Wi-Fi स्कैनिंग के माध्यम से, न सेलुलर टावर पोजिशनिंग के माध्यम से। उपयोगकर्ता किसी भी समय सिस्टम सेटिंग्स में अनुमति रद्द कर सकता है, जिसके बाद एप्लिकेशन को इनकार को सही ढंग से संभालना होगा।
Pew Research Center (2024) के एक अध्ययन के अनुसार, लगभग 45% उपयोगकर्ता उन एप्लिकेशन में जियोलोकेशन एक्सेस रद्द कर देते हैं जो इसका उपयोग अपनी मुख्य कार्यक्षमता के लिए नहीं करते हैं। इसका मतलब है कि डेवलपर को अनुरोध को स्पष्ट रूप से उचित ठहराना होगा और उन लोगों के लिए वैकल्पिक तंत्र प्रदान करना होगा जिन्होंने Location Permission से इनकार किया।
यूरोप में GDPR और रूस में संघीय कानून 152-FZ को स्थान डेटा के प्रसंस्करण के लिए सूचित सहमति प्राप्त करने की आवश्यकता होती है। एप्लिकेशन को न केवल सिस्टम डायलॉग के माध्यम से अनुमति का अनुरोध करना चाहिए, बल्कि डेटा संग्रह के उद्देश्यों के बारे में एक अलग सूचना भी प्रदान करनी चाहिए। इन आवश्यकताओं के उल्लंघन पर 20 मिलियन यूरो या कंपनी के वार्षिक कारोबार के 4% तक का जुर्माना लगाया जा सकता है।
यदि एप्लिकेशन Location Permission का अनुरोध नहीं करता या उपयोगकर्ता पहुंच से इनकार करता है, तो डेवलपर को एक वैकल्पिक परिदृश्य प्रदान करना होगा। मैपिंग एप्लिकेशन के लिए, यह मैन्युअल पता प्रविष्टि हो सकती है; डिलीवरी एप्लिकेशन के लिए — सहेजे गए पतों की सूची से चयन; मौसम सेवा के लिए — IP पते द्वारा शहर का निर्धारण। Graceful degradation (सहज गिरावट) एक मानक अभ्यास है जिसे Google और Apple द्वारा अनुशंसित किया गया है।
जियोलोकेशन एक्सेस स्तर Android और iOS पर भिन्न होते हैं, हालांकि सामान्य विचार समान है: एक्सेस जितना सटीक होगा, प्लेटफॉर्म एप्लिकेशन पर उतनी ही कठोर आवश्यकताएं लगाता है।
| एक्सेस स्तर | Android | iOS |
|---|---|---|
| उपयोग के दौरान | केवल जब एप्लिकेशन सक्रिय हो | When In Use — केवल एप्लिकेशन में |
| बैकग्राउंड | Always — लगातार, बैकग्राउंड में भी | Always — अतिरिक्त App Store समीक्षा आवश्यक |
| अनुमानित | ACCESS_COARSE_LOCATION (500 मीटर तक सटीकता) | Precision = Off विकल्प के साथ (iOS 14+) |
ACCESS_FINE_LOCATION कई मीटर तक की त्रुटि के साथ सटीक GPS निर्देशांक तक पहुंच प्रदान करता है। मेनिफेस्ट में इस अनुमति की घोषणा करने के लिए स्थिरांक android.permission.ACCESS_FINE_LOCATION का उपयोग किया जाता है। ACCESS_COARSE_LOCATION, बदले में, Wi-Fi और सेलुलर टावर डेटा के आधार पर 500 मीटर तक की सटीकता के साथ अनुमानित स्थान प्रदान करता है।
When In Use एप्लिकेशन को केवल तब निर्देशांक प्राप्त करने की अनुमति देता है जब वह स्क्रीन पर खुला हो। Always बैकग्राउंड में भी जियोलोकेशन तक पहुंच प्रदान करता है, लेकिन अनिवार्य App Store समीक्षा की आवश्यकता होती है। iOS 14 से शुरू होकर, उपयोगकर्ता Precision स्विच के माध्यम से प्रत्येक एप्लिकेशन के लिए सटीक स्थान निर्धारण को अलग से अक्षम कर सकता है।
Android पर Location Permission का अनुरोध दो चरणों में किया जाता है: मेनिफेस्ट में अनुमतियों की घोषणा और कोड में रनटाइम अनुरोध। Android 6.0 (API 23) से शुरू होकर, सभी खतरनाक अनुमतियां इंस्टॉलेशन के दौरान नहीं, बल्कि एप्लिकेशन के संचालन के दौरान अनुरोध की जाती हैं।
पहला कदम AndroidManifest.xml फ़ाइल में आवश्यक अनुमतियां जोड़ना है। सटीक और अनुमानित स्थान निर्धारण के लिए अलग-अलग स्थिरांक का उपयोग किया जाता है।
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
मेनिफेस्ट में घोषणा के बाद, एप्लिकेशन कोड में अनुमति अनुरोध का सिस्टम डायलॉग बुलाया जाना चाहिए। आइए Activity Result API का उपयोग करके Kotlin में एक उदाहरण देखें।
private val locationPermissionRequest =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
when {
permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
// अनुमति प्राप्त
getLocation()
}
permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
// केवल अनुमानित स्थान
getCoarseLocation()
}
else -> {
// उपयोगकर्ता ने इनकार किया
showLocationExplanation()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
checkLocationPermission()
}
यदि उपयोगकर्ता पहुंच से इनकार करता है, तो Android सिस्टम स्वचालित रूप से डायलॉग को फिर से दिखाने की अनुमति नहीं देता है। डेवलपर को प्रारंभिक स्पष्टीकरण प्रदर्शित करने के लिए shouldShowRequestPermissionRationale को कॉल करना होगा। Never Ask Again फ्लैग के साथ बार-बार इनकार करने की स्थिति में, उपयोगकर्ता को सिस्टम सेटिंग्स पर रीडायरेक्ट किया जाना चाहिए।
private fun checkLocationPermission() {
when {
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED -> {
getLocation()
}
ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_FINE_LOCATION) -> {
showRationaleDialog {
requestLocationPermission()
}
}
else -> {
openAppSettings()
}
}
}
iOS पर Location Permission का अनुरोध में Info.plist फ़ाइल में विशेष कुंजियां जोड़ना और CLLocationManager क्लास के तरीकों को कॉल करना शामिल है। Apple गोपनीयता पर विशेष ध्यान देता है, इसलिए अनुरोध संवाद में स्पष्टीकरण पाठ जितना संभव हो उतना विशिष्ट होना चाहिए।
iOS पर स्थान का अनुरोध करने के लिए, Info.plist में एक या दोनों कुंजियां जोड़नी होंगी: उपयोग के दौरान पहुंच के लिए NSLocationWhenInUseUsageDescription और बैकग्राउंड पहुंच के लिए NSLocationAlwaysAndWhenInUseUsageDescription। प्रत्येक कुंजी का मान एक स्ट्रिंग है जो उपयोगकर्ता को डायलॉग में दिखाया जाएगा।
<key>NSLocationWhenInUseUsageDescription</key>
<string>आपके एप्लिकेशन को मानचित्र पर निकटतम बिंदु दिखाने के लिए आपके स्थान की आवश्यकता है।</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>आपके एप्लिकेशन को मार्ग ट्रैक करने के लिए बैकग्राउंड में जियोलोकेशन एक्सेस की आवश्यकता है।</string>
Swift कोड में, अनुरोध CLLocationManager के एक इंस्टेंस के माध्यम से किया जाता है। आवश्यक एक्सेस स्तर के आधार पर, requestWhenInUseAuthorization या requestAlwaysAuthorization को कॉल किया जाता है।
import CoreLocation
class LocationManager: NSObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
func requestLocationAccess() {
manager.delegate = self
manager.requestWhenInUseAuthorization()
}
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
switch manager.authorizationStatus {
case .authorizedWhenInUse, .authorizedAlways:
startLocationUpdates()
case .denied, .restricted:
showSettingsAlert()
case .notDetermined:
break
}
}
}
Android के विपरीत, iOS डेवलपर को shouldShowRequestPermissionRationale की जांच करने के लिए कोई विधि प्रदान नहीं करता है। सिस्टम स्वयं तय करता है कि स्पष्टीकरण कब दिखाना है। इसके अलावा, iOS पर उपयोगकर्ता केवल सिस्टम सेटिंग्स के माध्यम से अनुमति बदल सकता है — एप्लिकेशन उपयोगकर्ता द्वारा निर्णय लेने के बाद सिस्टम डायलॉग को पुनः प्रदर्शित नहीं कर सकता। RequestAlwaysAuthorization पहले When In Use का अनुरोध करता है, और फिर पहली सहमति प्राप्त करने के बाद, बैकग्राउंड एक्सेस के लिए एक अलग डायलॉग।
Location Permission के साथ काम करने के सर्वोत्तम अभ्यास उपयोगकर्ता के इनकार को कम करने और ऐप स्टोर आवश्यकताओं को पूरा करने में मदद करते हैं। Google और Apple ने सिफारिशें प्रकाशित की हैं जिनका पालन करने से एप्लिकेशन स्वीकृति की संभावना बढ़ जाती है।
एप्लिकेशन शुरू होते ही Location Permission अनुरोध डायलॉग न दिखाएं। जिस उपयोगकर्ता ने अभी-अभी एप्लिकेशन खोला है, वह अभी तक नहीं समझता कि उसे जियोलोकेशन तक पहुंच क्यों प्रदान करनी चाहिए। Contextual request का अर्थ है कि डायलॉग उस समय प्रकट होता है जब उपयोगकर्ता को वास्तव में ऐसी सुविधा की आवश्यकता होती है जिसके लिए अनुमति की आवश्यकता है। उदाहरण के लिए, “निकटतम स्टोर खोजें” बटन पर क्लिक करने पर।
सिस्टम डायलॉग से पहले, अपनी स्वयं की स्पष्टीकरण स्क्रीन (pre-permission screen) दिखाएं। उस पर बताएं कि एप्लिकेशन को जियोलोकेशन की आवश्यकता क्यों है, कौन सा डेटा एकत्र किया जाता है और इसका उपयोग कैसे किया जाएगा। उपयोगकर्ता द्वारा आपकी स्क्रीन पर “अनुमति दें” पर क्लिक करने के बाद, सिस्टम डायलॉग दिखाएं। Appsflyer (2024) के अनुसार, यह दृष्टिकोण स्वीकृति दर को 25-35% तक बढ़ाता है।
जियोलोकेशन तक बैकग्राउंड एक्सेस केवल उन एप्लिकेशन के लिए आवश्यक है जो बैकग्राउंड में काम करते हैं: नेविगेटर, एक्टिविटी ट्रैकर, डिलीवरी एप्लिकेशन। यदि आपके एप्लिकेशन को केवल स्क्रीन खुली होने पर निर्देशांक की आवश्यकता है, तो When In Use का अनुरोध करें। App Store एप्लिकेशन को अस्वीकार कर देगा यदि Always कार्यात्मक रूप से उचित नहीं है। Android पर, बैकग्राउंड एक्सेस को ACCESS_BACKGROUND_LOCATION अनुमति के माध्यम से अतिरिक्त रूप से नियंत्रित किया जाता है।
अक्सर पूछे जाने वाले प्रश्न
एप्लिकेशन को इनकार को सही ढंग से संभालना होगा और एक वैकल्पिक परिदृश्य प्रदान करना होगा। उदाहरण के लिए, मैन्युअल पता प्रविष्टि या IP पते द्वारा शहर का निर्धारण। सिस्टम डायलॉग फिर से नहीं दिखाया जाता — उपयोगकर्ता को सेटिंग्स पर रीडायरेक्ट किया जाना चाहिए।
तकनीकी रूप से, हाँ — सिस्टम डायलॉग को बिना प्रारंभिक स्क्रीन के बुलाया जा सकता है। हालांकि, बिना स्पष्टीकरण के स्वीकृति दर 30-40% है, जबकि प्रारंभिक स्क्रीन के साथ यह 60-75% है। Apple और Google हमेशा अनुरोध का कारण समझाने की सलाह देते हैं।
स्थिरांक Manifest.permission.ACCESS_FINE_LOCATION के साथ ContextCompat.checkSelfPermission का उपयोग करें। विधि PERMISSION_GRANTED या PERMISSION_DENIED लौटाती है, जो सिस्टम डायलॉग को कॉल किए बिना वर्तमान स्थिति निर्धारित करने की अनुमति देती है।
ACCESS_FINE_LOCATION 3-10 मीटर की त्रुटि के साथ सटीक GPS निर्देशांक तक पहुंच प्रदान करता है। ACCESS_COARSE_LOCATION Wi-Fi और सेलुलर टावरों के आधार पर 500 मीटर तक की सटीकता के साथ अनुमानित स्थान प्रदान करता है। Android 12+ पर, डेवलपर एक साथ दोनों अनुमतियों का अनुरोध कर सकता है।
Android पर, BLE उपकरणों को स्कैन करने के लिए ACCESS_FINE_LOCATION या ACCESS_COARSE_LOCATION की आवश्यकता होती है, क्योंकि BLE सिग्नल का उपयोग स्थान त्रिभुजन के लिए किया जा सकता है। iOS पर, BLE के लिए केवल Bluetooth अनुमति की आवश्यकता है — Location Permission की आवश्यकता नहीं है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।