Significant Location Change — چیست، محرک‌ها و مکانیزم کار

نویسنده: IT Sectr منتشر شده: 2026-03-28 زمان مطالعه: 10 دقیقه

Significant Location Change (SLC) سرویسی در iOS برای نظارت بر جابجایی‌های بزرگ دستگاه است که تنها هنگام تغییرات قابل توجه در مختصات جغرافیایی به برنامه اعلان می‌دهد. برخلاف ردیابی GPS در زمان واقعی، SLC از دکل‌های مخابراتی برای تعیین موقعیت مکانی استفاده می‌کند که حداقل مصرف انرژی را تضمین می‌کند. طبق مستندات Apple Developer, 2025، Significant Location Change به برنامه اجازه می‌دهد بدون کارکرد دائمی GPS به‌روزرسانی‌های موقعیت مکانی را دریافت کند و تا ۹۰٪ در مصرف باتری نسبت به ردیابی مداوم صرفه‌جویی نماید.

نکات اصلی

  • SLC — نظارت بر تغییرات قابل توجه مکان بر اساس دکل‌های مخابراتی
  • مصرف انرژی — تا ۹۰٪ صرفه‌جویی در باتری نسبت به ردیابی مداوم GPS
  • محرک‌ها — تغییر دکل مخابراتی، عبور از مرز خوشه‌ها، فعال‌سازی GPS
  • محدودیت‌ها — حداقل فاصله به‌روزرسانی ~۵۰۰ متر، دقت تا یک کیلومتر
  • iOS 13+ — اضافه شدن مجوز Always و محدودیت‌های راه‌اندازی پس‌زمینه

Significant Location Change چیست

Significant Location Change (SLC) یک سرویس مکان کم‌مصرف در iOS است که در فریم‌ورک Core Location تعبیه شده است. این سرویس برای برنامه‌هایی طراحی شده که نیاز به ردیابی جابجایی‌های بزرگ کاربر بدون استفاده مداوم از ماژول GPS دارند. SLC به طور خودکار هنگام تغییر بین دکل‌های مخابراتی فعال می‌شود و از طریق متد didUpdateLocations در پروتکل CLLocationManagerDelegate به برنامه اعلان می‌دهد.

برخلاف ردیابی GPS (استاندارد startUpdatingLocation)، SLC نیاز به فعالیت مداوم پردازنده و چیپ GPS ندارد. iOS از سیگنال‌های دکل‌های مخابراتی برای تعیین موقعیت تقریبی استفاده می‌کند و برنامه را تنها هنگام تشخیص تفاوت قابل توجه در مختصات راه‌اندازی می‌کند. این به برنامه اجازه می‌دهد بین به‌روزرسانی‌ها «خواب» باشد و حداقل انرژی مصرف کند.

SLC در تمام دستگاه‌های دارای ماژول مخابراتی از iOS 5 در دسترس است. در iPod Touch و iPad Wi-Only این سرویس در دسترس نیست، زیرا برای تعیین مختصات از دکل‌های مخابراتی استفاده می‌شود. Core Location به طور خودکار تصمیم می‌گیرد کدام رویدادها قابل توجه هستند — توسعه‌دهنده نمی‌تواند حساسیت SLC را تنظیم کند یا حداقل فاصله را برای فعال‌سازی مشخص نماید.

SLC برای چه برنامه‌هایی مناسب است

SLC برای برنامه‌هایی که نیاز به دقت بالای موقعیت مکانی ندارند ایده‌آل است: ردیاب‌های آب و هوا، سرویس‌های تحویل، برنامه‌های جستجوی مکان‌های نزدیک، تحلیل مکان‌های بازدید شده. SLC همچنین توسط سیستم iOS برای فعال‌سازی ژئوفنسینگ (Geofencing) در حالت صرفه‌جویی انرژی استفاده می‌شود. برنامه‌های ناوبری به ردیابی GPS دقیق‌تری نیاز دارند.

Significant Location Change چگونه کار می‌کند

Significant Location Change بر اساس تحلیل شناسه‌های دکل‌های مخابراتی (Cell ID) کار می‌کند که دستگاه هنگام اتصال به شبکه دریافت می‌کند. iOS پایگاه داده‌ای از مختصات دکل‌ها را نگهداری می‌کند و می‌تواند موقعیت تقریبی را بدون فعال‌سازی GPS تعیین کند. هنگامی که دستگاه به دکل جدیدی متصل می‌شود، سیستم موقعیت جدید و قبلی را مقایسه می‌کند و اگر تفاوت قابل توجه باشد، برنامه را برای پردازش رویداد راه‌اندازی می‌کند.

سیستم از رویکرد خوشه‌ای استفاده می‌کند: فضای جغرافیایی به خوشه‌هایی با شعاع مشخص تقسیم می‌شود. SLC تنها هنگام عبور از مرز خوشه رویداد تولید می‌کند، نه در هر جابجایی کوچک درون آن. این کار از فراخوانی‌های مکرر برنامه در حین حرکت در یک منطقه تحت پوشش (مثلاً در یک ساختمان یا محله) جلوگیری می‌کند. دقت SLC از ۵۰۰ متر تا چند کیلومتر بسته به تراکم دکل‌های مخابراتی متغیر است.

هنگامی که iOS یک تغییر قابل توجه تشخیص می‌دهد، برنامه را از حالت پس‌زمینه بیدار می‌کند (اگر در حال اجرا نباشد) و رویداد را به پروتکل Core Location ارسال می‌کند. برنامه زمان کوتاهی برای پردازش دارد (حدود ۱۰–۳۰ ثانیه زمان پس‌زمینه) — در این مدت باید مختصات را پردازش کرده و در صورت لزوم، به‌روزرسانی دقیق‌تری از طریق GPS برنامه‌ریزی کند.

راه‌اندازی برنامه از پس‌زمینه

SLC دارای امتیاز بیدار کردن برنامه از حالت Suspended یا Background است. اگر برنامه توسط سیستم به دلیل کمبود حافظه بسته شده باشد، SLC آن را در پس‌زمینه مجدداً راه‌اندازی می‌کند (relaunch). برای این کار، برنامه باید در متد didFinishLaunchingWithOptions برای UIApplication.LaunchOptionsKey.location ثبت نام کرده باشد. پس از پردازش رویداد، سیستم می‌تواند دوباره برنامه را به حالت Suspended برگرداند.

محرک‌های Significant Location Change

محرک‌های SLC منحصراً توسط سیستم iOS تعیین می‌شوند — توسعه‌دهنده نمی‌تواند به صورت برنامه‌نویسی بر این که چه تغییری در مختصات «قابل توجه» محسوب شود تأثیر بگذارد. با این حال، سناریوهای مستندی وجود دارند که در آنها SLC به طور تضمینی رویداد تولید می‌کند. درک این محرک‌ها به توسعه‌دهنده در طراحی رفتار صحیح برنامه کمک می‌کند.

تغییر دکل مخابراتی

تغییر دکل مخابراتی (Cell tower change) — محرک اصلی SLC. هنگامی که دستگاه بین دکل‌های مخابراتی جابجا می‌شود (در حین حرکت در شهر، جاده)، سیستم بررسی می‌کند که آیا مختصات بین دکل قدیم و جدید به اندازه کافی تغییر کرده است. اگر بله — رویداد تولید می‌شود. در شرایط شهری با شبکه متراکم دکل‌ها، SLC ممکن است هر ۱–۳ کیلومتر فعال شود.

فعال‌سازی GPS توسط برنامه‌های دیگر

اگر هر برنامه دیگری یا سرویس سیستمی (مثلاً «Find My iPhone»، ناوبری) ماژول GPS را فعال کند، SLC نیز ممکن است به‌روزرسانی مختصات دقیق دریافت کند. این یک اثر جانبی است: GPS موقعیت دقیق را تعیین می‌کند و iOS آن را به تمام برنامه‌های ثبت شده برای SLC ارسال می‌کند. با این حال، نباید به این محرک تکیه کرد — تضمین‌شده نیست.

تغییر بین شبکه‌های Wi-Fi

اگرچه SLC مستقیماً از Wi-Fi استفاده نمی‌کند، تغییر شبکه Wi-Fi ممکن است به طور غیرمستقیم باعث رویداد شود اگر دستگاه مختصات جدیدی را از طریق Apple Location Service دریافت کند (موقعیت بر اساس پایگاه داده Wi-Fi). iOS مختصات نقاط دسترسی Wi-Fi را هش می‌کند و از آنها برای بهبود موقعیت بین تغییرات دکل‌ها استفاده می‌کند.

محرکتضمینتأخیردقت
تغییر دکل مخابراتیزیاد۱–۳۰ ثانیه۵۰۰ متر – ۳ کیلومتر
GPS برنامه‌های دیگرکمفوریتا ۱۰ متر
تغییر Wi-Fiمتوسطتا ۵ دقیقه۱۰۰–۵۰۰ متر

SLC در مقابل سایر سرویس‌های مکان iOS

iOS چندین مکانیزم برای دریافت موقعیت مکانی ارائه می‌دهد که هر یک دقت، مصرف انرژی و سناریوهای استفاده خاص خود را دارند. Significant Location Change در جایگاهی بین تقریب درشت بر اساس دکل‌ها و ردیابی دقیق GPS قرار دارد و تعادل بهینه‌ای را برای برنامه‌هایی که نیاز به دقت بالا در زمان واقعی ندارند فراهم می‌کند.

Standard Location Service

Standard Location Service (startUpdatingLocation()) از GPS، Wi-Fi و دکل‌های مخابراتی برای تعیین مختصات با حداکثر دقت استفاده می‌کند. دقت تا ۱۰ متر است، اما مصرف انرژی بالا است — ماژول GPS دائماً فعال است. مناسب برای ناوبری، ردیاب‌های تناسب اندام، برنامه‌های AR. SLC در مقابل، از GPS به طور مداوم استفاده نمی‌کند و دقت ۵۰۰ متر و پایین‌تر دارد.

Region Monitoring (Geofencing)

Region Monitoring ورود و خروج از مناطق جغرافیایی مشخص را ردیابی می‌کند. برخلاف SLC، توسعه‌دهنده خود مرزهای مناطق را تعیین می‌کند (شعاع از ۱۰۰ متر). Geofencing از SLC به عنوان مکانیزم کمکی استفاده می‌کند — سیستم ابتدا موقعیت تقریبی را از طریق SLC تعیین می‌کند و سپس GPS را برای تشخیص دقیق ورود/خروج از منطقه فعال می‌کند. حداکثر تعداد مناطق قابل ردیابی — ۲۰ عدد.

Visit Monitoring

Visit Monitoring یک سرویس تخصصی iOS 8+ است که بازدید از مکان‌ها (ورود و خروج) را ردیابی می‌کند. این سرویس از ترکیب SLC و سایر سیگنال‌ها برای تشخیص زمانی که کاربر در مکانی توقف کرده و زمانی که آن را ترک کرده استفاده می‌کند. Visit Monitoring نسبت به SLC کم‌مصرف‌تر است، زیرا رویدادهای کمتری تولید می‌کند و از یادگیری ماشین روی دستگاه استفاده می‌کند.

سرویسدقتمصرف انرژیپس‌زمینه
SLC۵۰۰ متر – ۳ کیلومتربسیار کمبله
Standard GPSتا ۱۰ مترزیادنیاز به مجوز دارد
Geofencingاز ۱۰۰ مترکمبله
Visit Monitoringتا ۱۰۰ متربسیار کمبله

مصرف انرژی و باتری

SLC — کم‌مصرف‌ترین روش دریافت موقعیت مکانی در iOS است، به جز Visit Monitoring. طبق داده‌های Apple، SLC حدود ۰٫۱–۰٫۵٪ شارژ باتری در ساعت در سناریوی استفاده معمولی مصرف می‌کند، در حالی که ردیابی مداوم GPS ممکن است ۵–۱۰٪ در ساعت مصرف کند. صرفه‌جویی به این دلیل حاصل می‌شود که ماژول GPS فقط برای مدت کوتاهی برای تأیید مختصات در هر رویداد روشن می‌شود.

iOS مصرف انرژی SLC را از طریق بهینه‌سازی باتری مدیریت می‌کند. اگر سیستم متوجه شود که برنامه بیش از حد مکرر رویدادهای SLC را پردازش می‌کند (مثلاً دستگاه در قطار در حال حرکت است و تغییر مکرر دکل‌ها رویدادهای زیادی تولید می‌کند)، iOS ممکن است به طور موقت فرکانس اعلان‌ها را کاهش دهد. این یک مکانیزم خودکار است — توسعه‌دهنده نمی‌تواند آن را غیرفعال کند.

با هر نسخه اصلی iOS، Apple سیاست دسترسی پس‌زمینه به مکان را سخت‌گیرانه‌تر می‌کند. از iOS 13، دیالوگ سیستمی درخواست مجوز برای استفاده پس‌زمینه از مکان تغییر کرده است: کاربر باید صریحاً «همیشه» (Always) را انتخاب کند، نه فقط «هنگام استفاده از برنامه» (While Using). بدون مجوز Always، SLC در زمانی که برنامه در پس‌زمینه است یا توسط سیستم بسته شده کار نخواهد کرد.

  • SLC — ۰٫۱–۰٫۵٪ شارژ در ساعت؛ GPS — ۵–۱۰٪ در ساعت در کار مداوم
  • iOS 13+ — نیاز به مجوز صریح Always برای SLC پس‌زمینه
  • بهینه‌سازی — iOS به طور خودکار فرکانس SLC را در حرکت فعال کاهش می‌دهد
  • پردازش دسته‌ای — چندین رویداد SLC ممکن است در یک اعلان ادغام شوند

پیاده‌سازی در Swift

بیایید یک پیاده‌سازی کامل از Significant Location Change در Swift را بررسی کنیم. مثال شامل راه‌اندازی CLLocationManager، درخواست مجوز Always، شروع مانیتورینگ، پردازش رویدادها و پشتیبانی از راه‌اندازی مجدد برنامه پس از بسته شدن توسط سیستم است. کد از Swift مدرن با async/await برای پردازش مختصات و وظایف پس‌زمینه از طریق BGTaskScheduler استفاده می‌کند.

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 اضافه شود. پس از راه‌اندازی مجدد، برنامه باید CLLocationManager را مقداردهی اولیه کرده و برای ادامه مانیتورینگ startMonitoringSignificantLocationChanges() را فراخوانی کند.

swift
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 را دارند.

همیشه نیاز به SLC را توضیح دهید

در Info.plist باید رشته‌های توضیحی اضافه کنید: NSLocationAlwaysAndWhenInUseUsageDescription و NSLocationWhenInUseUsageDescription. توضیح باید به وضوح دلیل نیاز برنامه به دسترسی پس‌زمینه به مکان را بیان کند. App Review این رشته‌ها را می‌خواند و ممکن است برنامه را رد کند اگر توضیح کافی نباشد یا عبارات مبهم باشند. مثال: «این برنامه از SLC برای به‌روزرسانی پیش‌بینی آب و هوا هنگام جابجایی شما استفاده می‌کند.»

فقط رویدادهای مورد نیاز را پردازش کنید

در هر رویداد SLC عملیات سنگین (موقعیت GPS، درخواست‌های شبکه) را اجرا نکنید. SLC ممکن است ده‌ها رویداد در ساعت هنگام حرکت در وسیله نقلیه تولید کند. از Debouncing استفاده کنید: زمان آخرین به‌روزرسانی کامل را ذخیره کرده و پردازش را رد کنید اگر از به‌روزرسانی قبلی کمتر از ۵–۱۰ دقیقه گذشته باشد. این کار باتری و ترافیک شبکه را حفظ می‌کند.

با BGTaskScheduler ترکیب کنید

برای پردازش طولانی پس از رویداد SLC از BGTaskScheduler استفاده کنید. هنگامی که برنامه رویداد SLC را دریافت می‌کند، می‌تواند یک وظیفه پس‌زمینه را از طریق BGProcessingTaskRequest یا BGAppRefreshTaskRequest برنامه‌ریزی کند. این امکان تأخیر عملیات منابعی (همگام‌سازی با سرور، تحلیل مسیر) را تا نزدیکترین پنجره اجرای پس‌زمینه فراهم می‌کند بدون اینکه رشته اصلی پاسخ به SLC مسدود شود.

  • Info.plist — رشته‌های توضیحی اجباری برای دسترسی پس‌زمینه به مکان
  • Debouncing — رویدادها را بیش از ۱ بار در ۵–۱۰ دقیقه پردازش نکنید
  • BGTaskScheduler — وظایف پس‌زمینه را پس از رویداد SLC برنامه‌ریزی کنید
  • مجوز Always — فقط در صورت نیاز واقعی درخواست کنید
  • pausesLocationUpdatesAutomatically — برای توقف خودکار GPS فعال کنید

سؤالات متداول

Significant Location Change در iOS چیست؟

Significant Location Change (SLC) یک سرویس کم‌مصرف iOS برای نظارت بر جابجایی‌های بزرگ دستگاه بر اساس دکل‌های مخابراتی است. این سرویس تا ۹۰٪ انرژی کمتری نسبت به ردیابی مداوم GPS مصرف می‌کند و برای برنامه‌هایی که نیاز به دقت بالای موقعیت مکانی ندارند مناسب است.

دقت Significant Location Change چقدر است؟

دقت SLC از ۵۰۰ متر تا ۳ کیلومتر بسته به تراکم دکل‌های مخابراتی متغیر است. در شرایط شهری دقت بالاتر است (نزدیک به ۵۰۰ متر)، در مناطق روستایی — پایین‌تر (تا چند کیلومتر). SLC برای تعیین دقیق مختصات طراحی نشده است — این یک منبع برای نظارت تقریبی جابجایی‌ها است.

چگونه مجوز Always را برای SLC دریافت کنیم؟

پس از اضافه کردن رشته NSLocationAlwaysAndWhenInUseUsageDescription در Info.plist، CLLocationManager.requestAlwaysAuthorization() را فراخوانی کنید. از iOS 13، کاربر باید صریحاً «همیشه» (Always) را در دیالوگ سیستمی انتخاب کند. بدون این مجوز SLC در پس‌زمینه کار نمی‌کند.

آیا SLC می‌تواند برنامه بسته شده را مجدداً راه‌اندازی کند؟

بله، SLC می‌تواند برنامه‌ای را که توسط سیستم به دلیل کمبود حافظه بسته شده مجدداً راه‌اندازی کند. در هنگام راه‌اندازی، UIApplication.LaunchOptionsKey.location را در متد didFinishLaunchingWithOptions بررسی کنید و برای ادامه مانیتورینگ startMonitoringSignificantLocationChanges() را فراخوانی کنید.

SLC چه تفاوتی با Standard Location Service دارد؟

SLC فقط از دکل‌های مخابراتی استفاده می‌کند و GPS را دائماً فعال نمی‌کند که تا ۹۰٪ صرفه‌جویی در باتری دارد. دقت — از ۵۰۰ متر تا ۳ کیلومتر. Standard Location Service از GPS، Wi-Fi و دکل‌ها استفاده می‌کند، دقت تا ۱۰ متر دارد اما انرژی بسیار بیشتری مصرف می‌کند. SLC برای مانیتورینگ پس‌زمینه مناسب است، GPS — برای ناوبری.

خلاصه

  • Significant Location Change — مانیتورینگ کم‌مصرف جابجایی‌های بزرگ در iOS
  • مکانیزم — تعیین موقعیت بر اساس دکل‌های مخابراتی بدون GPS مداوم
  • دقت — ۵۰۰ متر – ۳ کیلومتر بسته به تراکم زیرساخت مخابراتی
  • محرک‌ها — تغییر دکل، فعال‌سازی GPS توسط برنامه‌های دیگر، تغییر Wi-Fi
  • مجوز — iOS 13+ نیاز به Always برای کار پس‌زمینه SLC دارد
  • مصرف انرژی — ۰٫۱–۰٫۵٪ در ساعت در مقابل ۵–۱۰٪ برای GPS مداوم
  • بهترین روش — Debouncing رویدادها، BGTaskScheduler برای پردازش طولانی

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید