Background Modes در iOS — چیست، چه حالت‌هایی دارد و تنظیمات

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

Background Modes — مجموعه‌ای از قابلیت‌های اعلام‌شدنی iOS است که به برنامه اجازه می‌دهد پس از انتقال به حالت پس‌زمینه به اجرای کد ادامه دهد. هر حالت با نوع خاصی از وظایف مطابقت دارد: صدا، موقعیت‌یابی جغرافیایی، VoIP، بلوتوث، fetch و processing. طبق Apple, 2026، استفاده نادرست از Background Modes یکی از دلایل رایج رد برنامه‌ها در بررسی App Store است.

نکات اصلی

  • Background Modes — مجموعه capabilityهای iOS برای اجرای قانونی کد در پس‌زمینه.
  • حالت صدا — پخش موسیقی، پادکست، کتاب‌های صوتی در پس‌زمینه با کنترل از طریق Control Center.
  • موقعیت‌یابی جغرافیایی — ردیابی موقعیت در پس‌زمینه برای ناوبری و ردیاب‌های تناسب اندام.
  • بلوتوث — کار با دستگاه‌های BLE در پس‌زمینه: دستبندهای تناسب اندام، سنسورها، تجهیزات جانبی.
  • بررسی Apple — استفاده نادرست از حالت‌ها منجر به رد برنامه از App Store می‌شود.

Background Modes در iOS چیست؟

Background Modes — capabilityهای پروژه Xcode هستند که قصد برنامه را برای اجرای انواع خاصی از عملیات‌های پس‌زمینه اعلام می‌کنند. برخلاف Android، جایی که برنامه می‌تواند هر Service را در پس‌زمینه راه‌اندازی کند، iOS نیاز به مشخص کردن صریح حالت در Info.plist دارد. هر حالت قوانین استفاده دقیقی دارد و توسط Apple در بررسی تأیید می‌شود.

Background Modes چگونه کار می‌کنند

وقتی برنامه به پس‌زمینه می‌رود، iOS آن را پس از ۳–۵ ثانیه معلق می‌کند. اگر برنامه Background Mode را اعلام کرده و از API مربوطه (مثلاً AVAudioSession برای صدا) استفاده فعالانه کند، سیستم آن را به حالت اجرای ویژه‌ای منتقل می‌کند. برنامه باقی می‌ماند در حافظه RAM و می‌تواند کد محدود شده توسط نوع حالت را اجرا کند.

فهرست کامل حالت‌های موجود

iOS از Background Modes زیر پشتیبانی می‌کند: Audio، Location، VoIP، Bluetooth LE، Background Fetch، Background Processing، External Accessory Communication، Push to Talk (PTT) و HealthKit. هر حالت نیاز به توجیه در توضیحات برنامه دارد.

حالتکلید Info.plistکاربردنسخه iOS
Audioaudioصدا در پس‌زمینه، AirPlay4.0+
Locationlocationردیابی موقعیت4.0+
VoIPvoipاعلان‌های Push VoIP4.0+
BLEbluetooth-centralکار با دستگاه‌های BLE7.0+
Fetchfetchبارگیری دوره‌ای داده7.0+
Processingprocessingوظایف طولانی مدت پس‌زمینه13.0+
Push to Talkpush-to-talkPush to Talk صوتی16.0+

حالت صدا (Audio، AirPlay و Picture in Picture)

Audio Background Mode — رایج‌ترین حالت است که توسط پخش‌کننده‌های موسیقی، برنامه‌های پادکست و سرویس‌های صوتی استفاده می‌شود. برنامه می‌تواند به پخش صدا ادامه دهد، از طریق Control Center کنترل شود و در Lock Screen نمایش داده شود. برای فعال‌سازی کافی است AVAudioSession را با رده .playback پیکربندی کنید.

پیکربندی جلسه صوتی

برای کار صدا در پس‌زمینه باید AVAudioSession را پیکربندی و فعال کنید. رده .playback به سیستم اعلام می‌کند که برنامه در حال پخش صدا است و باید در پس‌زمینه فعال بماند. بدون این پیکربندی، صدا پس از بستن برنامه در عرض ۵–۱۰ ثانیه متوقف می‌شود.

swift
import AVFoundation

func configureAudioSession() {
    let session = AVAudioSession.sharedInstance()
    do {
        try session.setCategory(
            .playback,
            mode: .default,
            options: []
        )
        try session.setActive(true)
    } catch {
        print("خطای جلسه صوتی: \(error)")
    }
}

کنترل پخش از Control Center

برای ادغام با Control Center و Lock Screen باید MPRemoteCommandCenter را پیکربندی کنید. این دستورات Play، Pause، Next و Previous Track را پردازش می‌کند. همچنین باید MPNowPlayingInfoProperty را برای نمایش فراداده به‌روزرسانی کنید: نام آهنگ، هنرمند، جلد و پیشرفت پخش.

Picture in Picture برای ویدیو

از iOS 14 به بعد، Background Mode audio از Picture in Picture برای ویدیو نیز پشتیبانی می‌کند. برنامه می‌تواند ویدیو را در یک پنجره شناور هنگام بسته شدن ادامه دهد. برای فعال‌سازی از AVPictureInPictureController با AVPlayerLayer استفاده کنید. حالت فقط در صورتی کار می‌کند که برنامه یک track صوتی پخش کند.

موقعیت‌یابی جغرافیایی (Location updates)

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

انواع ردیابی موقعیت

CLLocationManager از چندین استراتژی ردیابی پشتیبانی می‌کند: تغییرات قابل توجه (significant-change location)، ردیابی استاندارد (standard location) و نظارت بر منطقه (region monitoring). برای کار در پس‌زمینه با حداکثر دقت از allowsBackgroundLocationUpdates = true و pausesLocationUpdatesAutomatically = false استفاده کنید.

بهره‌وری انرژی و دقت

ردیابی مداوم موقعیت در پس‌زمینه یکی از پرمصرف‌ترین سناریوها از نظر انرژی است. iOS به طور خودکار فرکانس به‌روزرسانی را با توجه به سرعت حرکت تنظیم می‌کند: هنگام پیاده‌روی هر ۱۰–۳۰ ثانیه، هنگام رانندگی با ماشین هر ۱–۵ ثانیه. برای ناوبری از desiredAccuracy = kCLLocationAccuracyBestForNavigation استفاده کنید.

swift
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()

تغییرات قابل توجه موقعیت

حالت significant-change location بدون Location Background Mode کار می‌کند — سیستم فقط هنگام تغییر قابل توجه مختصات (معمولاً ۵۰۰ متر و بیشتر) برنامه را بیدار می‌کند. نیاز به روشن بودن مداوم GPS ندارد که باعث صرفه‌جویی در باتری می‌شود. برای برنامه‌های آب و هوایی مناسب است که هنگام جابجایی کاربر داده‌ها را به‌روزرسانی می‌کنند.

حالت بلوتوث (LE accessories)

Bluetooth LE Background Mode به برنامه اجازه می‌دهد با دستگاه‌های BLE در پس‌زمینه تعامل داشته باشد. توسط دستبندهای تناسب اندام، سنسورهای پزشکی، دستگاه‌های Smart Home و ناوبری Beacon استفاده می‌شود. این حالت به دو زیرشاخه تقسیم می‌شود: bluetooth-central (برنامه به دستگاه‌ها متصل می‌شود) و bluetooth-peripheral (برنامه به عنوان دستگاه عمل می‌کند).

کار در حالت Central

برنامه در نقش Central می‌تواند دستگاه‌های BLE را در پس‌زمینه اسکن کرده و به آنها متصل شود. برای این کار باید bluetooth-central در Background Modes مشخص شود و CBCentralManager.scanForPeripherals با گزینه CBCentralManagerScanOptionAllowDuplicatesKey فراخوانی شود. در پس‌زمینه اسکن با فرکانس کاهش یافته کار می‌کند — سیستم ممکن است تشخیص را برای صرفه‌جویی در انرژی به تأخیر بیندازد.

کار در حالت Peripheral

برنامه در نقش Peripheral می‌تواند سرویس‌ها را تبلیغ کرده و به درخواست‌های دستگاه‌های دیگر پاسخ دهد. حالت bluetooth-peripheral به برنامه اجازه می‌دهد حتی در پس‌زمینه برای سایر دستگاه‌های BLE قابل مشاهده باقی بماند. در برنامه‌های HealthKit و راه‌حل‌های IoT استفاده می‌شود.

Beacon و Region Monitoring

نظارت iBeacon بدون مجوزهای اضافی در پس‌زمینه کار می‌کند — سیستم خودش ورود و خروج از منطقه Beacon را ردیابی می‌کند. اما برای اسکن محتوای Beacon (proximity UUID، major، minor) نیاز به مجوز بلوتوث و bluetooth-central Background Mode است. از CLLocationManager با CLBeaconRegion برای نظارت استفاده کنید.

VoIP و PushKit برای برنامه‌های ارتباطی

VoIP Background Mode برای برنامه‌های ارتباط صوتی (Skype، Zoom، WhatsApp) طراحی شده است. این حالت به برنامه اجازه می‌دهد برای دریافت تماس‌های ورودی به سرور متصل باقی بماند. از iOS 8 به بعد، برای VoIP از PushKit استفاده می‌شود — چارچوبی که اعلان‌های Push را از سرور VoIP بدون دخالت APNs پردازش می‌کند.

PushKit برای تماس‌های ورودی

PushKit تنها مکانیزمی است که تحویل اعلان VoIP به دستگاه را تضمین می‌کند. پس از دریافت اعلان PushKit، سیستم برنامه را بیدار می‌کند، حتی اگر برنامه خاتمه یافته باشد. برنامه باید ظرف ۳۰ ثانیه به سرور متصل شده و یک اعلان محلی درباره تماس ورودی نمایش دهد.

swift
import PushKit

class VoIPHandler: NSObject, PKPushRegistryDelegate {
    func pushRegistry(
        _ registry: PKPushRegistry,
        didReceiveIncomingPushWith payload: PKPushPayload,
        for type: PKPushType,
        completion: @escaping () -> Void
    ) {
        let caller = payload.dictionaryPayload["caller"] as! String
        reportIncomingCall(from: caller)
        completion()
    }
}

قوانین استفاده از PushKit

PushKit را نمی‌توان برای اعلان‌های معمولی استفاده کرد — فقط برای VoIP، ارتباطات watchOS و ارائه‌دهندگان فایل. Apple این را بررسی می‌کند در بررسی. در صورت استفاده نادرست، برنامه رد می‌شود. از iOS 13 به بعد، PushKit فقط اعلان را تحویل می‌دهد — فراخوانی CXProvider (CallKit) برای نمایش صفحه تماس الزامی است.

حالت‌های Fetch و Processing

Background Fetch و Background Processing — حالت‌هایی برای به‌روزرسانی محتوا و اجرای وظایف طولانی در پس‌زمینه. Fetch — به‌روزرسانی‌های دوره‌ای کوتاه (تا ۳۰ ثانیه)، Processing — وظایف طولانی (تا ۱۰ دقیقه) با شرایط (Wi-Fi، شارژ). Processing فقط از iOS 13+ در دسترس است.

Background Fetch — به‌روزرسانی سریع

حالت Fetch به سیستم اجازه می‌دهد به طور دوره‌ای برنامه را برای بارگیری محتوای تازه بیدار کند. سیستم رفتار کاربر را تحلیل کرده و زمان بهینه را انتخاب می‌کند. برنامه باید در عرض ۳۰ ثانیه completion handler را فراخوانی کند. Fetch برای برنامه‌های خبری، فیدهای شبکه‌های اجتماعی و آب و هوا مناسب است.

Background Processing — وظایف طولانی

BGProcessingTask برای وظایفی طراحی شده است که می‌توانند بدون مشارکت کاربر انجام شوند: پاکسازی حافظه نهان، همگام‌سازی پایگاه داده بزرگ، پردازش فایل‌های رسانه‌ای. سیستم فقط در شرایط مساعد وظیفه را اجرا می‌کند — دستگاه در حال شارژ، متصل به Wi-Fi، نه در حالت Low Power. تا ۱۰ دقیقه در دسترس است.

برنامه‌ریزی و الزامات

برای BGProcessingTask باید requiresExternalPower و requiresNetworkConnectivity را مشخص کنید. سیستم می‌تواند اجرا را برای مدت نامحدودی به تأخیر بیندازد اگر شرایط برآورده نشود. برخلاف BGAppRefreshTask که باید حداقل یک بار در روز اجرا شود، Processing ممکن است هفته‌ها اجرا نشود اگر دستگاه به ندرت شارژ شود.

دستورالعمل‌های بررسی App Store برای Background Modes

Apple به شدت استفاده از Background Modes را در بررسی برنامه‌ها کنترل می‌کند. قانون اصلی: هر حالت فعال باید با عملکرد برنامه توجیه شود. اگر برنامه Location Mode را اعلام کند اما از موقعیت‌یابی جغرافیایی استفاده نکند، با درخواست حذف capability رد می‌شود.

دلایل رایج رد

رایج‌ترین تخلفات: Location Mode بدون نیاز آشکار (برنامه دسترسی «Always» را برای نمایش تبلیغات درخواست می‌کند)، Audio Mode بدون پخش صدا در پس‌زمینه، VoIP بدون PushKit، BLE Mode بدون دستگاه‌های بلوتوث. Apple ممکن است برنامه را حتی در مرحله به‌روزرسانی رد کند اگر حالت دیگر استفاده نشود.

توضیحات در بررسی

هنگام ارسال برای بررسی، در Notes توجیه مشخصی برای هر حالت ارائه دهید. به عنوان مثال، «Location Background Mode برای ردیابی مسیر کاربر در ویژگی تناسب اندام استفاده می‌شود». بدون توضیح، بازبین ممکن است برنامه را رد کند. برای عملکردهای محرمانه (VoIP)، Apple ممکن است حساب آزمایشی درخواست کند.

توصیه‌هایی برای به حداقل رساندن حالت‌ها

از حداقل مجموعه لازم حالت‌ها استفاده کنید. اگر برنامه نیاز به بارگیری داده در پس‌زمینه یک بار در ساعت دارد — Location Mode را فعال نکنید، از Fetch یا BGAppRefreshTask استفاده کنید. حالت‌های اضافی نه تنها منجر به رد می‌شوند، بلکه تأثیر منفی ایجاد می‌کنند: کاربر در تنظیمات می‌بیند که برنامه از موقعیت‌یابی جغرافیایی در پس‌زمینه استفاده می‌کند.

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

چند Background Mode می‌توان در یک برنامه فعال کرد؟

هیچ محدودیتی برای تعداد وجود ندارد، اما هر حالت باید با عملکرد برنامه توجیه شود. فعال کردن همه حالت‌ها بدون نیاز — دلیل تضمینی رد در بررسی. محدودیت عملی ۲–۳ حالت در هر برنامه است، در غیر این صورت کاربر درخواست‌های مجوز متعددی خواهد دید.

چگونه بررسی کنیم که Background Mode فعال است؟

از UIApplication.shared.applicationState استفاده کنید — برنامه می‌تواند بررسی کند که آیا در پس‌زمینه است (state == .background). همچنین می‌توان اعلان‌های UIApplication.didEnterBackgroundNotification و willEnterForegroundNotification را برای تغییر رفتار ردیابی کرد.

تفاوت بین Audio و AirPlay Background Modes چیست؟

Audio — پخش صدا از طریق بلندگو یا هدفون. AirPlay — انتقال صدا و ویدیو به Apple TV و سایر دستگاه‌های AirPlay. در عمل Audio Mode هر دو سناریو را پوشش می‌دهد زیرا AirPlay از جلسه صوتی استفاده می‌کند. حالت جداگانه AirPlay از iOS 7+ مورد نیاز نیست.

آیا می‌توان از Background Location فقط هنگام باز بودن برنامه استفاده کرد؟

بله، برای این کار از requestWhenInUseAuthorization() به جای requestAlwaysAuthorization() استفاده کنید. برنامه فقط در پیش‌زمینه موقعیت دریافت می‌کند. اگر ردیابی کوتاه مدت در پس‌زمینه لازم است — startUpdatingLocation() را فراخوانی کرده و در willResignActive متوقف کنید.

Background Modes چگونه بر باتری تأثیر می‌گذارند؟

هر حالت مصرف انرژی را افزایش می‌دهد. Location Mode — پرهزینه‌ترین، می‌تواند زمان کار را ۳۰–۵۰٪ در ردیابی مداوم کاهش دهد. Audio Mode — متوسط (۱۵–۲۰٪). Fetch و Processing — حداقل (۲–۵٪). BLE Mode — کم (۵–۱۰٪) به دلیل بهره‌وری انرژی Bluetooth LE.

خلاصه

  • Background Modes — capabilities اعلام‌شدنی iOS که به برنامه اجازه می‌دهد به طور قانونی کد را در پس‌زمینه اجرا کند.
  • Audio Mode — رایج‌ترین، برای پخش موسیقی، پادکست و ویدیو از طریق AVAudioSession با رده .playback.
  • Location Mode — برای ناوبری و تناسب اندام، پرمصرف‌ترین، نیاز به requestAlwaysAuthorization و allowsBackgroundLocationUpdates.
  • BLE Mode — کار با دستگاه‌های بلوتوث در پس‌زمینه از طریق CBCentralManager با اسکن پس‌زمینه.
  • VoIP و PushKit — برای برنامه‌های ارتباطی، تحویل تماس‌های ورودی را از طریق PKPushRegistry تضمین می‌کند.
  • Fetch و Processing — وظایف کوتاه و طولانی پس‌زمینه با شرایط اجرا و محدودیت‌های زمانی مختلف.
  • Apple توجیه هر حالت را به شدت بررسی می‌کند — استفاده نادرست منجر به رد برنامه از App Store می‌شود.

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

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

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

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