Significant Location Change (SLC) — এটি একটি iOS পরিষেবা যা ডিভাইসের বড় স্থানান্তর পর্যবেক্ষণের জন্য, যা অ্যাপ্লিকেশনকে কেবল ভৌগোলিক স্থানাঙ্কে গুরুত্বপূর্ণ পরিবর্তনের উপরই জানায়। রিয়েল-টাইম GPS-ট্র্যাকিং এর বিপরীতে, SLC অবস্থান নির্ধারণের জন্য সেলুলার টাওয়ার ব্যবহার করে, যা ন্যূনতম শক্তি খরচ নিশ্চিত করে। ডকুমেন্টেশন অনুযায়ী Apple Developer, 2025, Significant Location Change অ্যাপ্লিকেশনকে GPS ছাড়া ক্রমাগত কাজ না করেই জিওলোকেশন আপডেট পেতে দেয়, যা একটানা ট্র্যাকিংয়ের তুলনায় 90% পর্যন্ত ব্যাটারি চার্জ বাঁচায়।
মূল বিষয়
Significant Location Change (SLC) — এটি iOS-এর একটি শক্তি-সাশ্রয়ী জিওলোকেশন পরিষেবা, যা Core Location ফ্রেমওয়ার্কে নির্মিত। এটি সেই অ্যাপ্লিকেশনগুলির জন্য ডিজাইন করা হয়েছে যাদের GPS মডিউল ক্রমাগত ব্যবহার না করেই ব্যবহারকারীর বড় স্থানান্তর ট্র্যাক করতে হবে। SLC সেলুলার নেটওয়ার্কের সেলগুলির মধ্যে স্যুইচ করার সময় স্বয়ংক্রিয়ভাবে সক্রিয় হয় এবং অ্যাপ্লিকেশনকে CLLocationManagerDelegate ডেলিগেটের মাধ্যমে didUpdateLocations মেথডের মাধ্যমে জানায়।
GPS-level tracking (স্ট্যান্ডার্ড startUpdatingLocation) এর বিপরীতে, SLC-এর প্রসেসর এবং GPS চিপের ক্রমাগত সক্রিয়তার প্রয়োজন নেই। iOS আনুমানিক অবস্থান নির্ধারণের জন্য সেলুলার টাওয়ার থেকে সংকেত ব্যবহার করে এবং শুধুমাত্র স্থানাঙ্কে গুরুত্বপূর্ণ পার্থক্য খুঁজে পেলে অ্যাপ্লিকেশন চালু করে। এটি অ্যাপ্লিকেশনকে আপডেটের মধ্যে “ঘুমানোর” সুযোগ দেয়, যাতে ন্যূনতম শক্তি খরচ হয়।
SLC iOS 5 থেকে শুরু করে সেলুলার মডিউলযুক্ত সব ডিভাইসে উপলব্ধ। iPod Touch এবং iPad Wi-Only-তে পরিষেবা উপলব্ধ নয়, কারণ স্থানাঙ্ক নির্ধারণের জন্য সেলুলার টাওয়ারই ব্যবহৃত হয়। Core Location স্বয়ংক্রিয়ভাবে সিদ্ধান্ত নেয় কোন ঘটনাগুলিকে গুরুত্বপূর্ণ গণ্য করা হবে — ডেভেলপার SLC-এর সংবেদনশীলতা সামঞ্জস্য করতে পারে না বা ট্রিগারের জন্য ন্যূনতম দূরত্ব নির্দিষ্ট করতে পারে না।
SLC সেই অ্যাপ্লিকেশনগুলির জন্য আদর্শ যাদের উচ্চ জিওলোকেশন নির্ভুলতার প্রয়োজন নেই: আবহাওয়া ট্র্যাকার, ডেলিভারি পরিষেবা, কাছের জিনিস খোঁজার অ্যাপ্লিকেশন, দেখা স্থানের বিশ্লেষণ। SLC iOS সিস্টেম দ্বারা জিওফেন্সিং (Geofencing) কে শক্তি সাশ্রয় মোডে সক্রিয় করতে ব্যবহার করা হয়। নেভিগেশন অ্যাপ্লিকেশনগুলির আরও নির্ভুল GPS-ট্র্যাকিং প্রয়োজন।
Significant Location Change সেলুলার টাওয়ার শনাক্তকারী (Cell ID) বিশ্লেষণের ভিত্তিতে কাজ করে, যা ডিভাইস নেটওয়ার্কের সাথে সংযুক্ত হলে পায়। iOS GPS চালু না করেই টাওয়ার স্থানাঙ্কের একটি ডেটাবেস বজায় রাখে এবং আনুমানিক অবস্থান নির্ধারণ করতে পারে। যখন ডিভাইস একটি নতুন টাওয়ারে সুইচ করে, সিস্টেম নতুন এবং পূর্ববর্তী অবস্থানের তুলনা করে, এবং যদি পার্থক্য গুরুত্বপূর্ণ হয়, ঘটনা প্রক্রিয়াকরণের জন্য অ্যাপ্লিকেশন চালু করে।
সিস্টেম ক্লাস্টার পদ্ধতি ব্যবহার করে: ভৌগোলিক স্থান একটি নির্দিষ্ট ব্যাসার্ধের ক্লাস্টারে বিভক্ত হয়। SLC শুধুমাত্র ক্লাস্টারের সীমানা অতিক্রম করলেই একটি ঘটনা তৈরি করে, ভিতরে প্রতিটি ক্ষুদ্র স্থানান্তরে নয়। এটি একই কভারেজ জোনের মধ্যে (যেমন একটি বিল্ডিং বা এলাকায়) চলার সময় অ্যাপ্লিকেশন কলের বন্যা রোধ করে। নির্ভুলতা SLC-র সেলুলার টাওয়ারের ঘনত্বের উপর নির্ভর করে 500 মিটার থেকে কয়েক কিলোমিটার পর্যন্ত হয়।
যখন iOS একটি গুরুত্বপূর্ণ পরিবর্তন শনাক্ত করে, এটি অ্যাপ্লিকেশনকে ব্যাকগ্রাউন্ড অবস্থা থেকে জাগিয়ে তোলে (যদি এটি চালু থাকে) এবং ইভেন্টটি Core Location ডেলিগেটে পাঠায়। অ্যাপ্লিকেশন প্রক্রিয়াকরণের জন্য অল্প সময় পায় (ব্যাকগ্রাউন্ড সময়ের প্রায় 10–30 সেকেন্ড) — এই সময়ে স্থানাঙ্ক প্রক্রিয়াকরণ এবং প্রয়োজনে GPS-এর মাধ্যমে আরও নির্ভুল আপডেট শিডিউল করতে হবে।
SLC-র Suspended বা Background অবস্থা থেকে অ্যাপ্লিকেশন জাগানোর বিশেষাধিকার রয়েছে। যদি মেমরির অভাবে অ্যাপ্লিকেশন সিস্টেম দ্বারা বন্ধ হয়ে যায়, SLC এটি ব্যাকগ্রাউন্ডে পুনরায় চালু করবে (relaunch)। এর জন্য অ্যাপ্লিকেশনকে didFinishLaunchingWithOptions মেথডে UIApplication.LaunchOptionsKey.location এর জন্য সাইন করতে হবে। ইভেন্ট প্রক্রিয়াকরণের পর, সিস্টেম অ্যাপ্লিকেশনটিকে আবার Suspended করতে পারে।
ট্রিগার SLC শুধুমাত্র iOS সিস্টেম দ্বারা নির্ধারিত হয় — ডেভেলপার প্রোগ্রামেটিকভাবে প্রভাবিত করতে পারে না কোন স্থানাঙ্ক পরিবর্তনকে “গুরুত্বপূর্ণ” গণ্য করা উচিত। তবে কিছু নথিভুক্ত পরিস্থিতি রয়েছে যেখানে SLC গ্যারান্টিড ইভেন্ট তৈরি করে। এই ট্রিগারগুলি বোঝা ডেভেলপারকে সঠিক অ্যাপ্লিকেশন আচরণ ডিজাইন করতে সাহায্য করে।
Cell tower change — SLC-র প্রধান ট্রিগার। যখন ডিভাইস সেলুলার টাওয়ারের মধ্যে সুইচ করে (শহরে চলার সময়, হাইওয়েতে), সিস্টেম পরীক্ষা করে যে পুরানো এবং নতুন টাওয়ারের মধ্যে স্থানাঙ্ক যথেষ্ট পরিবর্তিত হয়েছে কিনা। যদি হ্যাঁ, একটি ঘটনা তৈরি হয়। শহুরে পরিবেশে ঘন টাওয়ার নেটওয়ার্কের সাথে, SLC প্রতি 1–3 কিলোমিটারে ট্রিগার হতে পারে।
যদি অন্য কোনো অ্যাপ্লিকেশন বা সিস্টেম পরিষেবা (যেমন “খুঁজুন আমার iPhone”, নেভিগেশন) GPS মডিউল চালু করে, SLC-ও নির্ভুল স্থানাঙ্কের আপডেট পেতে পারে। এটি একটি পার্শ্ব প্রতিক্রিয়া: GPS নির্ভুল অবস্থান নির্ধারণ করে এবং iOS এটি SLC-তে সাইন করা সমস্ত অ্যাপ্লিকেশনে পাঠায়। তবে এই ট্রিগারের উপর নির্ভর করা যায় না — এটি গ্যারান্টিড নয়।
যদিও SLC সরাসরি Wi-Fi ব্যবহার করে না, Wi-Fi নেটওয়ার্ক পরিবর্তন পরোক্ষভাবে একটি ঘটনা ঘটাতে পারে যদি ডিভাইস Apple Location Service (Wi-Fi ডেটাবেসের মাধ্যমে অবস্থান) থেকে নতুন স্থানাঙ্ক পায়। iOS Wi-Fi অ্যাক্সেস পয়েন্টের স্থানাঙ্ক হ্যাশ করে এবং টাওয়ার পরিবর্তনের মধ্যে অবস্থান উন্নত করতে ব্যবহার করে।
| ট্রিগার | গ্যারান্টি | বিলম্ব | নির্ভুলতা |
|---|---|---|---|
| সেলুলার টাওয়ার পরিবর্তন | উচ্চ | 1–30 সেকেন্ড | 500 মি – 3 কিমি |
| অন্যান্য অ্যাপের GPS | নিম্ন | তাৎক্ষণিক | 10 মি পর্যন্ত |
| Wi-Fi পরিবর্তন | মধ্যম | 5 মিনিট পর্যন্ত | 100–500 মি |
iOS জিওলোকেশন পাওয়ার জন্য একাধিক পদ্ধতি প্রদান করে, প্রতিটির নিজস্ব নির্ভুলতা, শক্তি খরচ এবং ব্যবহারের পরিস্থিতি রয়েছে। Significant Location Change টাওয়ার দ্বারা মোটামুটি অনুমান এবং নির্ভুল GPS-ট্র্যাকিং এর মধ্যে স্থান নেয়, সেই অ্যাপ্লিকেশনগুলির জন্য ভারসাম্যপূর্ণ বিকল্প প্রদান করে যাদের রিয়েল-টাইমে উচ্চ নির্ভুলতার প্রয়োজন নেই।
Standard Location Service (startUpdatingLocation()) স্থানাঙ্কের সর্বোচ্চ নির্ভুল নির্ধারণের জন্য GPS, Wi-Fi এবং সেলুলার টাওয়ার ব্যবহার করে। নির্ভুলতা 10 মিটার পর্যন্ত, কিন্তু শক্তি খরচ বেশি — GPS মডিউল ক্রমাগত সক্রিয় থাকে। নেভিগেশন, ফিটনেস ট্র্যাকার, AR-অ্যাপ্লিকেশনের জন্য উপযুক্ত। SLC, এর বিপরীতে, ক্রমাগত GPS ব্যবহার করে না এবং এর নির্ভুলতা 500 মিটার বা তার কম।
Region Monitoring নির্দিষ্ট ভৌগোলিক অঞ্চলে প্রবেশ এবং বের হওয়া ট্র্যাক করে। SLC-র বিপরীতে, ডেভেলপার নিজেই অঞ্চলের সীমানা নির্ধারণ করে (100 মিটার থেকে ব্যাসার্ধ)। Geofencing SLC-কে একটি সহায়ক পদ্ধতি হিসেবে ব্যবহার করে — সিস্টেম প্রথমে SLC-এর মাধ্যমে আনুমানিক অবস্থান নির্ধারণ করে, তারপর অঞ্চলে প্রবেশ/বের হওয়ার নির্ভুল শনাক্তকরণের জন্য GPS চালু করে। সর্বোচ্চ সংখ্যা ট্র্যাক করা যেতে পারে এমন অঞ্চলের — 20।
Visit Monitoring — iOS 8+ এর একটি বিশেষায়িত পরিষেবা যা স্থান পরিদর্শন (আগমন এবং প্রস্থান) ট্র্যাক করে। এটি SLC এবং অন্যান্য সংকেতের সমন্বয় ব্যবহার করে নির্ধারণ করে যে ব্যবহারকারী কোথাও থামেছে এবং কখন ছেড়েছে। Visit Monitoring SLC-র চেয়ে বেশি শক্তি-সাশ্রয়ী, কারণ এটি কম ইভেন্ট তৈরি করে এবং ডিভাইসে মেশিন লার্নিং ব্যবহার করে।
| পরিষেবা | নির্ভুলতা | শক্তি খরচ | ব্যাকগ্রাউন্ড |
|---|---|---|---|
| SLC | 500 মি – 3 কিমি | অত্যন্ত কম | হ্যাঁ |
| Standard GPS | 10 মি পর্যন্ত | উচ্চ | অনুমতি প্রয়োজন |
| Geofencing | 100 মি থেকে | কম | হ্যাঁ |
| Visit Monitoring | 100 মি পর্যন্ত | অত্যন্ত কম | হ্যাঁ |
SLC iOS-এ জিওলোকেশন পাওয়ার সবচেয়ে শক্তি-সাশ্রয়ী উপায়, Visit Monitoring বাদে। Apple-এর মতে, SLC একটি সাধারণ ব্যবহারের পরিস্থিতিতে প্রতি ঘন্টায় প্রায় 0,1–0,5% ব্যাটারি চার্জ খরচ করে, যখন একটানা GPS-ট্র্যাকিং 5–10% প্রতি ঘন্টা খরচ করতে পারে। সাশ্রয় হয় কারণ GPS মডিউল শুধুমাত্র প্রতিটি ইভেন্টে অল্প সময়ের জন্য চালু হয় স্থানাঙ্ক যাচাই করার জন্য।
iOS ব্যাটারি অপ্টিমাইজেশন এর মাধ্যমে SLC-র শক্তি খরচ নিয়ন্ত্রণ করে। যদি সিস্টেম দেখে যে অ্যাপ্লিকেশন SLC ইভেন্টগুলি খুব ঘন ঘন প্রক্রিয়াকরণ করছে (যেমন ট্রেনে চলার সময় বারবার টাওয়ার পরিবর্তনের কারণে), iOS অস্থায়ীভাবে বিজ্ঞপ্তির ফ্রিকোয়েন্সি কমাতে পারে। এটি একটি স্বয়ংক্রিয় ব্যবস্থা — ডেভেলপার এটি বন্ধ করতে পারে না।
প্রতিটি শক্তিশালী iOS রিলিজের সাথে, Apple জিওলোকেশনের ব্যাকগ্রাউন্ড অ্যাক্সেস কঠোর করছে। iOS 13 থেকে শুরু করে, ব্যাকগ্রাউন্ড অবস্থান ব্যবহারের জন্য অনুমতি অনুরোধ ডায়ালগ পরিবর্তিত হয়েছে: ব্যবহারকারীকে স্পষ্টভাবে “সর্বদা” (Always) নির্বাচন করতে হবে, শুধু “অ্যাপ ব্যবহার করার সময়” (While Using) নয়। Always অনুমতি ছাড়া, SLC কাজ করবে না যখন অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডে থাকে বা সিস্টেম দ্বারা বন্ধ করা হয়।
আসুন Swift-এ Significant Location Change সম্পূর্ণরূপে বাস্তবায়নের একটি উদাহরণ দেখি। এই উদাহরণে CLLocationManager সেটআপ, Always অনুমতির অনুরোধ, মনিটরিং শুরু করা, ইভেন্ট প্রক্রিয়াকরণ এবং সিস্টেম দ্বারা বন্ধ করার পরে অ্যাপ্লিকেশন পুনরায় চালু করার সমর্থন অন্তর্ভুক্ত। কোড স্থানাঙ্ক প্রক্রিয়াকরণ এবং BGTaskScheduler-এর মাধ্যমে ব্যাকগ্রাউন্ড কাজের জন্য async/await সহ আধুনিক Swift ব্যবহার করে।
import CoreLocation
import UIKit
class LocationManager: NSObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
override init() {
super.init()
manager.delegate = self
manager.pausesLocationUpdatesAutomatically = true
manager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
}
func requestAlwaysAuthorization() {
manager.requestAlwaysAuthorization()
}
func startSignificantLocationUpdates() {
manager.startMonitoringSignificantLocationChanges()
}
func locationManager(_ manager: CLLocationManager,
didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else { return }
Task.detached {
await LocationProcessor.handleLocationUpdate(location)
}
}
func locationManager(_ manager: CLLocationManager,
didFailWithError error: Error) {
Logger.log("SLC error: \(error.localizedDescription)")
}
}
যদি অ্যাপ্লিকেশন সিস্টেম দ্বারা বন্ধ করা হয়, SLC একটি নতুন ইভেন্টে এটি স্বয়ংক্রিয়ভাবে পুনরায় চালু করবে। AppDelegate-এ UIApplication.LaunchOptionsKey.location-এর মাধ্যমে location-ইভেন্ট দ্বারা লঞ্চ চেক যোগ করা প্রয়োজন। পুনরায় চালুর পর, অ্যাপ্লিকেশনকে CLLocationManager আরম্ভ করতে হবে এবং মনিটরিং চালিয়ে যেতে startMonitoringSignificantLocationChanges() কল করতে হবে।
class AppDelegate: NSObject, UIApplicationDelegate {
private let manager = LocationManager()
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if launchOptions?.keys.contains(.location) == true {
Logger.log("App relaunched by SLC event")
}
manager.requestAlwaysAuthorization()
manager.startSignificantLocationUpdates()
return true
}
}
Significant Location Change-এর সঠিক ব্যবহার কার্যকারিতা এবং শক্তি দক্ষতার মধ্যে ভারসাম্য প্রয়োজন। Apple জিওলোকেশনের ব্যাকগ্রাউন্ড অ্যাক্সেস কঠোরভাবে নিয়ন্ত্রণ করে, এবং যে অ্যাপ্লিকেশনগুলি SLC অপব্যবহার করে বা স্পষ্ট প্রয়োজন ছাড়া এটি ব্যবহার করে, তাদের App Store-এ প্রকাশের সময় প্রত্যাখ্যানের ঝুঁকি থাকে।
Info.plist-এ কারণ ব্যাখ্যা করার স্ট্রিং যোগ করা প্রয়োজন: NSLocationAlwaysAndWhenInUseUsageDescription এবং NSLocationWhenInUseUsageDescription। বর্ণনায় স্পষ্টভাবে বলা উচিত কেন অ্যাপ্লিকেশনের জিওলোকেশনের ব্যাকগ্রাউন্ড অ্যাক্সেস প্রয়োজন। App Review এই লাইনগুলি পড়ে এবং যদি কারণ যথেষ্ট না হয় বা বর্ণনা অস্পষ্ট হয় তবে অ্যাপ্লিকেশন প্রত্যাখ্যান করতে পারে। উদাহরণ: “এই অ্যাপটি আপনার অবস্থান পরিবর্তনের ভিত্তিতে আবহাওয়ার পূর্বাভাস আপডেট করতে SLC ব্যবহার করে।”
প্রতিটি SLC ইভেন্টে ব্যয়বহুল অপারেশন (GPS লোকেশন, নেটওয়ার্ক অনুরোধ) চালাবেন না। পরিবহনে চলার সময় SLC এক ঘন্টায় ডজনখানেক ইভেন্ট তৈরি করতে পারে। ডিবাউন্সিং ব্যবহার করুন: শেষ সম্পূর্ণ আপডেটের সময় সংরক্ষণ করুন এবং যদি শেষ আপডেটের 5–10 মিনিটের কম সময় হয় তবে প্রক্রিয়াকরণ এড়িয়ে যান। এটি ব্যাটারি এবং নেটওয়ার্ক ট্রাফিক বাঁচাবে।
SLC ইভেন্টের পরে দীর্ঘ প্রক্রিয়াকরণের জন্য BGTaskScheduler ব্যবহার করুন। যখন অ্যাপ্লিকেশন SLC ইভেন্ট পায়, এটি BGProcessingTaskRequest বা BGAppRefreshTaskRequest-এর মাধ্যমে একটি ব্যাকগ্রাউন্ড টাস্ক শিডিউল করতে পারে। এটি সম্পদ-নিবিড় কাজগুলি (সার্ভারের সাথে সিঙ্ক, রুট বিশ্লেষণ) আসন্ন ব্যাকগ্রাউন্ড এক্সিকিউশন উইন্ডোতে স্থগিত করার অনুমতি দেয়, SLC প্রতিক্রিয়ার মূল থ্রেড ব্লক না করে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Significant Location Change (SLC) — এটি iOS-এর একটি শক্তি-সাশ্রয়ী পরিষেবা যা সেলুলার টাওয়ারের ভিত্তিতে ডিভাইসের বড় স্থানান্তর পর্যবেক্ষণ করে। এটি একটানা GPS-ট্র্যাকিংয়ের তুলনায় 90% পর্যন্ত কম শক্তি খরচ করে এবং সেই অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত যাদের উচ্চ জিওলোকেশন নির্ভুলতার প্রয়োজন নেই।
SLC-র নির্ভুলতা সেলুলার টাওয়ারের ঘনত্বের উপর নির্ভর করে 500 মিটার থেকে 3 কিলোমিটার পর্যন্ত হয়। শহুরে এলাকায় নির্ভুলতা বেশি (500 মিটারের কাছাকাছি), গ্রামীণ এলাকায় কম (কয়েক কিলোমিটার পর্যন্ত)। SLC স্থানাঙ্কের সঠিক নির্ধারণের জন্য নয় — এটি স্থানান্তরের মোটামুটি পর্যবেক্ষণের একটি সম্পদ।
Info.plist-এ NSLocationAlwaysAndWhenInUseUsageDescription স্ট্রিং যোগ করার পর CLLocationManager.requestAlwaysAuthorization() কল করুন। iOS 13 থেকে শুরু করে, ব্যবহারকারীকে সিস্টেম ডায়ালগে স্পষ্টভাবে “সর্বদা” (Always) নির্বাচন করতে হবে। এই অনুমতি ছাড়া SLC ব্যাকগ্রাউন্ডে কাজ করে না।
হ্যাঁ, SLC অ্যাপ্লিকেশন পুনরায় চালু করতে পারে যদি এটি মেমরির অভাবে সিস্টেম দ্বারা বন্ধ করা হয়। লঞ্চে didFinishLaunchingWithOptions মেথডে UIApplication.LaunchOptionsKey.location পরীক্ষা করুন এবং মনিটরিং চালিয়ে যেতে startMonitoringSignificantLocationChanges() কল করুন।
SLC শুধুমাত্র সেলুলার টাওয়ার ব্যবহার করে এবং ক্রমাগত GPS চালু করে না, যার ফলে 90% পর্যন্ত ব্যাটারি সাশ্রয় হয়। নির্ভুলতা — 500 মি থেকে 3 কিমি। Standard Location Service GPS, Wi-Fi এবং টাওয়ার ব্যবহার করে, নির্ভুলতা 10 মি পর্যন্ত, কিন্তু উল্লেখযোগ্যভাবে বেশি শক্তি খরচ করে। SLC ব্যাকগ্রাউন্ড মনিটরিংয়ের জন্য উপযোগী, GPS — নেভিগেশনের জন্য।
উপসংহার
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন