GPS و سرویس‌های موقعیت‌یابی در برنامه‌های موبایل — این چیست، روش‌های دریافت مختصات

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

GPS و سرویس‌های موقعیت‌یابی در برنامه‌های موبایل — API برای تعیین موقعیت فیزیکی دستگاه با استفاده از ماهواره‌ها، Wi-Fi و شبکه‌های موبایل است. بر اساس Google Android Location Guide (2025)، بیش از 60٪ از برنامه‌های موبایل از داده‌های موقعیت برای شخصی‌سازی محتوا استفاده می‌کنند. Fused Location Provider در Android چندین منبع را برای افزایش دقت و کاهش مصرف انرژی ترکیب می‌کند.

نکات کلیدی

  • GPS — یک سیستم جهانی ناوبری ماهواره‌ای است که دقت تا 3-5 متر در فضای باز را فراهم می‌کند.
  • سرویس‌های موقعیت‌یابی در Android و iOS APIهایی برای دریافت مختصات از طریق GPS، Wi-Fi و دکل‌های مخابراتی ارائه می‌دهند.
  • FusedLocationProviderClient در Android GPS، Wi-Fi و حسگرها را برای تعادل بهینه دقت و مصرف انرژی ترکیب می‌کند.
  • CLLocationManager در iOS درخواست‌های موقعیت‌یابی را با تنظیم دقت و حالت پس‌زمینه مدیریت می‌کند.
  • مجوزها برای موقعیت‌یابی به «هنگام استفاده» و «همیشه» تقسیم می‌شوند — دومی نیاز به توجیه اضافی دارد.

GPS و سرویس‌های موقعیت‌یابی چیست

GPS (Global Positioning System) — یک سیستم ناوبری ماهواره‌ای شامل 31 ماهواره فعال در مدار با ارتفاع تقریبی 20 200 کیلومتر است. در دستگاه‌های موبایل، تراشه GPS سیگنال‌های ماهواره‌ها را دریافت کرده و مختصات را بر اساس سه‌جانبه‌یابی — اندازه‌گیری زمان انتشار سیگنال از چندین ماهواره — محاسبه می‌کند. سرویس‌های موقعیت‌یابی در سیستم‌عامل‌های موبایل داده‌های نقاط دسترسی Wi-Fi و دکل‌های مخابراتی را به GPS اضافه می‌کنند تا تعیین مختصات را تسریع کنند (A-GPS) و دقت را در داخل ساختمان بهبود بخشند. طبق داده‌های GPS.gov (2024)، دقت GPS غیرنظامی 3-5 متر در آسمان صاف و تا 15 متر در شرایط تراکم ساختمانی است.

سیستم‌های ماهواره‌ای اضافی

دستگاه‌های موبایل مدرن نه تنها از سیستم GPS آمریکا، بلکه از سایر سیستم‌های ناوبری جهانی نیز پشتیبانی می‌کنند: GLONASS روسیه (24 ماهواره)، Galileo اروپا (28 ماهواره) و BeiDou چین. پشتیبانی همزمان از چندین سیستم، دقت و سرعت تعیین مختصات را افزایش می‌دهد — دستگاه می‌تواند از حداکثر 40 ماهواره از سیستم‌های مختلف برای محاسبه موقعیت استفاده کند. در iOS و Android انتخاب سیستم ماهواره‌ای به طور خودکار در سطح تراشه سخت‌افزاری انجام می‌شود و توسعه‌دهنده نیازی به مدیریت آن ندارد.

تعیین موقعیت چگونه کار می‌کند

فرآیند تعیین موقعیت در دستگاه موبایل از چند مرحله تشکیل شده است: جمع‌آوری داده از منابع (ماهواره‌ها، Wi-Fi، شبکه‌های موبایل)، فیلتر کردن و تصحیح خطاها، محاسبه مختصات و ارسال نتیجه به برنامه. سیستم‌عامل این فرآیند را از طریق یک سرویس موقعیت‌یابی واحد مدیریت می‌کند که کار همه منابع را برای صرفه‌جویی در باتری بهینه می‌سازد. در زیر سه منبع اصلی داده‌های موقعیت توضیح داده شده است.

GPS و ناوبری ماهواره‌ای

ناوبری ماهواره‌ای حداکثر دقت (3-5 متر) را فراهم می‌کند، اما نیاز به دید مستقیم آسمان دارد. در داخل ساختمان یا مناطق شهری متراکم، سیگنال GPS ممکن است ضعیف شده یا کاملاً از بین برود. زمان اولین تعیین موقعیت (TTFF) در شروع سرد 30-60 ثانیه و در شروع گرم 5-10 ثانیه است. A-GPS (Assisted GPS) با بارگذاری اطلاعات مداری ماهواره‌ها از طریق اینترنت به جای انتظار برای داده از ماهواره‌ها، شروع کار را تسریع می‌کند.

تعیین موقعیت از طریق Wi-Fi و دکل‌های مخابراتی

Wi-Fi موقعیت‌یابی از پایگاه داده آدرس‌های MAC نقاط دسترسی با مختصات مشخص استفاده می‌کند. دقت در محدوده پوشش Wi-Fi 10-50 متر است. دکل‌های مخابراتی بسته به تراکم دکل‌ها، دقت 100 متر تا چند کیلومتر را ارائه می‌دهند. ترکیب همه منابع (Fused Location) امکان دریافت مختصات با دقت مناسب با حداقل مصرف انرژی را فراهم می‌کند — به ویژه زمانی که تراشه GPS خاموش است یا سیگنال ماهواره در دسترس نیست.

ارائه‌دهندگان موقعیت‌یابی در Android و iOS

در هر دو پلتفرم، سرویس‌های موقعیت‌یابی از طریق APIهای سیستمی با درجات مختلف انتزاع پیاده‌سازی می‌شوند. Android از FusedLocationProviderClient از Google Play Services استفاده می‌کند، iOS از CLLocationManager از Core Location. هر دو API امکان درخواست موقعیت یک‌باره یا اشتراک در به‌روزرسانی‌های منظم را فراهم می‌کنند. در زیر نمونه‌ای از دریافت مختصات در Android با استفاده از Fused Location Provider به زبان Kotlin آورده شده است.

دریافت مختصات در Android

kotlin
val fusedClient = LocationServices.getFusedLocationProviderClient(this)

val locationRequest = LocationRequest.Builder(
    Priority.PRIORITY_HIGH_ACCURACY
)
.setIntervalMillis(5000)
.setMinUpdateIntervalMillis(2000)
.build()

val locationCallback = object : LocationCallback() {
    override fun onLocationResult(result: LocationResult) {
        result.lastLocation?.let { location ->
            Log.d("موقعیت", "Lat: ${location.latitude}, Lng: ${location.longitude}")
        }
    }
}

if (checkLocationPermission()) {
    fusedClient.requestLocationUpdates(
        locationRequest, locationCallback,
        Looper.getMainLooper()
    )
}

در مثال، LocationRequest با اولویت HIGH_ACCURACY پیکربندی می‌شود — این کار GPS را برای حداکثر دقت فعال می‌کند. setIntervalMillis فاصله به‌روزرسانی مطلوب (5 ثانیه) را تعیین می‌کند، setMinUpdateIntervalMillis — حداقل (2 ثانیه). callback onLocationResult هر بار که سیستم مختصات جدیدی دریافت می‌کند فراخوانی می‌شود. بررسی مجوز قبل از فراخوانی requestLocationUpdates مهم است — در غیر این صورت برنامه با SecurityException از کار می‌افتد.

دریافت مختصات در iOS

swift
import CoreLocation

let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()

// MARK: - CLLocationManagerDelegate
func locationManager(
    _ manager: CLLocationManager,
    didUpdateLocations locations: [CLLocation]
) {
    guard let location = locations.last else { return }
    print("Location: \(location.coordinate.latitude), \(location.coordinate.longitude)")
}

در iOS desiredAccuracy دقت درخواست را تعیین می‌کند: kCLLocationAccuracyBest از تمام منابع موجود (GPS + Wi-Fi + شبکه‌های موبایل) استفاده می‌کند. پس از درخواست مجوز از طریق requestWhenUseAuthorization، سیستم یک دیالوگ به کاربر نشان می‌دهد. delegate didUpdateLocations آرایه‌ای از اشیاء CLLocation با مختصات، ارتفاع، سرعت و جهت دریافت می‌کند. برای توقف به‌روزرسانی‌ها، stopUpdatingLocation فراخوانی می‌شود تا در مصرف باتری صرفه‌جویی شود.

درخواست مجوزهای موقعیت‌یابی

دسترسی به موقعیت‌یابی نیاز به اجازه صریح کاربر در هر دو پلتفرم دارد. در Android از مجوزهای ACCESS_FINE_LOCATION (GPS) و ACCESS_COARSE_LOCATION (Wi-Fi/شبکه‌های موبایل) استفاده می‌شود. از Android 10 به بعد، دسترسی پس‌زمینه نیاز به مجوز جداگانه ACCESS_BACKGROUND_LOCATION دارد. در iOS سه سطح در دسترس است: requestWhenInUseAuthorization (فقط هنگام استفاده از برنامه)، requestAlwaysAuthorization (در پس‌زمینه) و برچسب‌های زمانی برای موقعیت‌یابی دقیق. Apple توضیحات اجباری در Info.plist را الزامی می‌کند: NSLocationWhenInUseUsageDescription یا NSLocationAlwaysAndWhenInUseUsageDescription. بدون این کلیدها، درخواست مجوز نادیده گرفته می‌شود.

بهینه‌سازی مصرف انرژی

استفاده مداوم از GPS به طور قابل توجهی شارژ باتری را کاهش می‌دهد — تا 30٪ در یک ساعت کار مداوم با حداکثر دقت. برای بهینه‌سازی مصرف انرژی، توصیه می‌شود فقط زمانی که لازم است از موقعیت‌یابی استفاده کرده و هنگام رفتن برنامه به پس‌زمینه، به‌روزرسانی‌ها را متوقف کنید. در Android، FusedLocationProviderClient به طور خودکار بین GPS و منابع شبکه‌ای بسته به در دسترس بودن و اولویت درخواست جابه‌جا می‌شود. در iOS از سرویس تغییر مکان قابل توجه (startMonitoringSignificantLocationChanges) برای به‌روزرسانی‌های با حداقل مصرف انرژی استفاده کنید — دقت کمتر است (تا 500 متر)، اما باتری تقریباً مصرف نمی‌شود. همچنین پردازش دسته‌ای را تمرین کنید: مختصات را با فاصله 5-10 دقیقه جمع‌آوری کرده و با یک درخواست از طریق WorkManager در Android یا BGTaskScheduler در iOS به سرور ارسال کنید. کاهش فرکانس درخواست‌ها از 1 ثانیه به 30 ثانیه مصرف انرژی موقعیت‌یابی را 85٪ کاهش می‌دهد.

سناریوهای استفاده از موقعیت‌یابی

موقعیت‌یابی در طیف گسترده‌ای از برنامه‌های موبایل از مسیریاب‌ها گرفته تا خدمات تحویل استفاده می‌شود. رایج‌ترین سناریوها شامل نمایش کاربر روی نقشه، هدف‌یابی جغرافیایی تبلیغات، ردیابی پیک‌ها، محدوده‌های جغرافیایی برای اعلان‌های push و ردیابی فعالیت‌های تناسب اندام است. هر سناریو رویکرد خاص خود را به دقت و تناوب به‌روزرسانی نیاز دارد. در زیر جدولی با توصیه‌های تنظیمات برای انواع مختلف برنامه‌ها آورده شده است.

نوع برنامهدقتفاصلهحالت پس‌زمینه
مسیریابHIGH (GPS)1-2 ثانیهبله
تحویلBALANCED (GPS+Wi-Fi)10-30 ثانیهبله
آب و هواLOW (Wi-Fi/شبکه‌های موبایل)یک‌بارخیر
شبکه اجتماعیBALANCEDهنگام باز شدنخیر
تناسب اندامHIGH (GPS)5-10 ثانیهبله

در طراحی قابلیت موقعیت‌یابی مهم است در نظر بگیرید که کاربران می‌توانند در هر لحظه مجوز را از طریق تنظیمات سیستم لغو کنند. برنامه باید شرایطی را که موقعیت‌یابی در دسترس نیست به درستی مدیریت کرده و توضیح قابل فهمی نشان دهد که چرا قابلیت محدود شده است.

محصورسازی جغرافیایی (Geofencing)

Geofencing — فناوری ایجاد مرزهای مجازی روی نقشه است که با عبور از آنها برنامه اعلان دریافت می‌کند. در Android، محدوده‌های جغرافیایی از طریق GeofencingClient از Google Play Services پیاده‌سازی می‌شوند، در iOS — از طریق CLCircularRegion از Core Location. هنگام ورود یا خروج از محدوده، سیستم برنامه را بیدار کرده و رویداد را ارسال می‌کند، حتی اگر برنامه بسته یا کوچک شده باشد. این برای اعلان‌های push هنگام نزدیک شدن به فروشگاه، یادآوری وظایف بر اساس موقعیت و خودکارسازی دستگاه‌های IoT استفاده می‌شود. حداکثر تعداد محدوده‌های جغرافیایی محدود است: در Android — 100، در iOS — 20 همزمان. حداقل شعاع محدوده 50 متر در هر دو پلتفرم است، در غیر این صورت سیستم ممکن است به دلیل خطای تعیین موقعیت فعال نشود. هنگام ورود به محدوده، سیستم Intent را در Android راه‌اندازی می‌کند یا delegate locationManager:didEnterRegion را در iOS فراخوانی می‌کند.

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

GPS در دستگاه‌های موبایل چیست؟

GPS در گوشی هوشمند یک گیرنده داخلی سیگنال‌های سیستم ناوبری ماهواره‌ای است که مختصات را با دقت 3-5 متر تعیین می‌کند. در دستگاه‌ها همچنین GLONASS، Galileo و BeiDou برای افزایش دقت و سرعت موقعیت‌یابی در دسترس هستند.

تفاوت GPS با سرویس‌های موقعیت‌یابی چیست؟

GPS فقط روش ماهواره‌ای تعیین مختصات است. سرویس‌های موقعیت‌یابی GPS، موقعیت‌یابی Wi-Fi و داده‌های دکل‌های مخابراتی را برای تعیین سریع‌تر و کم‌مصرف‌تر موقعیت، به ویژه در داخل ساختمان، ترکیب می‌کنند.

چگونه مجوز موقعیت‌یابی را در iOS درخواست کنیم؟

requestWhenInUseAuthorization() یا requestAlwaysAuthorization() را روی نمونه CLLocationManager فراخوانی کنید. قبلاً NSLocationWhenInUseUsageDescription را با متن قابل فهم دلیل استفاده از موقعیت‌یابی به Info.plist اضافه کنید.

چگونه مصرف انرژی GPS را در برنامه کاهش دهیم؟

از FusedLocationProviderClient در Android و سرویس تغییر مکان قابل توجه در iOS استفاده کنید. فاصله بین درخواست‌ها را به 10-30 ثانیه افزایش دهید، هنگام خاموش بودن صفحه به‌روزرسانی‌ها را غیرفعال کنید و ارسال دسته‌ای مختصات به سرور را اعمال کنید.

آیا می‌توان بدون GPS موقعیت‌یابی کرد؟

بله، بدون GPS می‌توان موقعیت تقریبی را از طریق نقاط دسترسی Wi-Fi (دقت 10-50 متر) یا دکل‌های مخابراتی (دقت 100-5000 متر) تعیین کرد. در Android برای این کار از ACCESS_COARSE_LOCATION استفاده می‌شود.

خلاصه

  • GPS — سیستم ناوبری ماهواره‌ای با دقت 3-5 متر، تکمیل‌شونده با GLONASS، Galileo و BeiDou.
  • سرویس‌های موقعیت‌یابی GPS، Wi-Fi و دکل‌های مخابراتی را برای تعیین سریع و دقیق مختصات ترکیب می‌کنند.
  • Android از FusedLocationProviderClient با LocationRequest برای تنظیم دقت و فاصله به‌روزرسانی استفاده می‌کند.
  • iOS از CLLocationManager با desiredAccuracy و delegate didUpdateLocations برای دریافت مختصات استفاده می‌کند.
  • مجوزها به «هنگام استفاده» و «همیشه» تقسیم می‌شوند، دسترسی پس‌زمینه نیاز به تأیید جداگانه کاربر دارد.
  • مصرف انرژی GPS را می‌توان با افزایش فاصله و استفاده از تغییرات مکان قابل توجه 85٪ کاهش داد.
  • توصیه — دقت و فاصله به‌روزرسانی را بسته به سناریو انتخاب کنید: مسیریاب نیاز به HIGH دارد، آب و هوا — LOW.

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

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

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

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