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 অনুরোধ না করে বা ব্যবহারকারী অ্যাক্সেস অস্বীকার করে, তাহলে ডেভেলপারকে একটি বিকল্প পরিস্থিতি প্রদান করতে হবে। ম্যাপিং অ্যাপ্লিকেশনের জন্য, এটি ম্যানুয়াল ঠিকানা প্রবেশ হতে পারে; ডেলিভারি অ্যাপ্লিকেশনের জন্য — সংরক্ষিত ঠিকানার তালিকা থেকে নির্বাচন; আবহাওয়া পরিষেবার জন্য — আইপি ঠিকানা দ্বারা শহর নির্ধারণ। 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-এর জন্য শুধুমাত্র ব্লুটুথ অনুমতি প্রয়োজন — Location Permission প্রয়োজন নেই।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।