Background Modes в iOS — какво е, какви режими има и конфигуриране

Автор: IT Sectr Публикувано: 2026-03-27 Време за четене: 9 мин

Background Modes — е набор от декларируеми възможности на iOS, които позволяват на приложението да продължи изпълнението на код след преминаване във фонов режим. Всеки режим съответства на определен тип задачи: аудио, геолокация, VoIP, Bluetooth, fetch и processing. Според Apple, 2026, неправилното използване на Background Modes е една от честите причини за отхвърляне на приложения при ревю в App Store.

Основни положения

  • Background Modes — набор от iOS capability за легитимно фоново изпълнение на код.
  • Аудио режим — възпроизвеждане на музика, подкасти, аудиокниги на фона с контрол чрез Control Center.
  • Геолокация — проследяване на местоположение на фона за навигация и фитнес тракери.
  • Bluetooth — работа с BLE устройства на фона: фитнес гривни, сензори, периферия.
  • Проверка от Apple — неправомерното използване на режими води до отхвърляне на приложението от App Store.

Какво са Background Modes в iOS?

Background Modes — са capability на проект Xcode, които декларират намерението на приложението да изпълнява определени типове фоно операции. За разлика от Android, където приложението може да стартира произволен Service на фона, iOS изисква изрично посочване на режима в Info.plist. Всеки режим има строги правила за използване и се проверява от Apple при ревю.

Как работят Background Modes

Когато приложението премине на фона, iOS го спира след 3–5 секунди. Ако приложението декларира Background Mode и активно използва съответното API (например AVAudioSession за аудио), системата го прехвърля в специален режим на изпълнение. Приложението остава в оперативната памет и може да изпълнява код, ограничен от типа режим.

Пълен списък на наличните режими

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+
VoIPvoipVoIP push известия4.0+
BLEbluetooth-centralРабота с BLE устройства7.0+
FetchfetchПериодично изтегляне на данни7.0+
ProcessingprocessingДълготрайни фонови задачи13.0+
Push to Talkpush-to-talkГласово push-to-talk16.0+

Аудио режим (Audio, AirPlay и Picture in Picture)

Audio Background Mode — най-разпространеният режим, използван от музикални плейъри, приложения за подкасти и аудио услуги. Приложението може да продължи възпроизвеждането на звук, да се управлява чрез Control Center и да се показва на Lock Screen. За активиране е достатъчно да конфигурирате AVAudioSession с категория .playback.

Конфигуриране на аудио сесия

За работа на аудио на фона трябва да конфигурирате AVAudioSession и да я активирате. Категорията .playback уведомява системата, че приложението възпроизвежда звук и трябва да остане активно на фона. Без тази конфигурация звукът ще спре в рамките на 5–10 секунди след минимизиране на приложението.

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 аудио поддържа и Picture in Picture за видео. Приложението може да продължи да показва видео в плаващ прозорец при минимизиране. За активиране използвайте AVPictureInPictureController с AVPlayerLayer. Режимът работи само ако приложението възпроизвежда аудио запис.

Геолокация (Location updates)

Location Background Mode позволява на приложението да получава актуализации на геолокация на фона. Използва се в навигатори, фитнес тракери, приложения за доставка и социални мрежи. Без този режим приложението получава местоположение само веднъж при преминаване на фона, след което актуализациите спират.

Типове проследяване на местоположение

CLLocationManager поддържа няколко стратегии за проследяване: значителни промени (significant-change location), стандартно проследяване (standard location) и проследяване на региони (region monitoring). За работа на фона с максимална точност използвайте allowsBackgroundLocationUpdates = true и pausesLocationUpdatesAutomatically = false.

Енергийна ефективност и точност

Непрекъснатото проследяване на местоположение на фона е един от най-енергоемките сценарии. iOS автоматично адаптира честотата на актуализации според скоростта на движение: при ходене на всеки 10–30 секунди, при шофиране на всеки 1–5 секунди. За навигация използвайте 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 — системата събужда приложението само при значителна промяна на координатите (обикновено 500 m и повече). Не изисква непрекъснато включване на GPS, което спестява батерия. Подходящ за приложения за време, които актуализират данни при движение на потребителя.

Bluetooth режим (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 разрешение и 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 известие, системата събужда приложението, дори ако то е било прекратено. Приложението трябва да установи връзка със сървъра в рамките на 30 секунди и да покаже локално известие за входящото повикване.

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 — кратки периодични актуализации (до 30 с), Processing — дълготрайни задачи (до 10 мин) с условия (Wi-Fi, зареждане). Processing е достъпен само от iOS 13+.

Background Fetch — бързо обновяване

Режимът Fetch позволява на системата периодично да събужда приложението за изтегляне на свежо съдържание. Системата анализира поведението на потребителя и избира оптималното време. Приложението трябва да извика completion handler в рамките на 30 секунди. Fetch е подходящ за новинарски приложения, емисии на социални мрежи и време.

Background Processing — дълготрайни задачи

BGProcessingTask е предназначена за задачи, които могат да се изпълняват без участие на потребителя: почистване на кеш, синхронизиране на голяма база данни, обработка на медийни файлове. Системата стартира задачата само при благоприятни условия — устройството се зарежда, свързано е с Wi-Fi, не е в режим Low Power. Достъпно до 10 минути.

Планиране и изисквания

За BGProcessingTask трябва да посочите requiresExternalPower и requiresNetworkConnectivity. Системата може да отложи изпълнението за неопределено време, ако условията не са изпълнени. За разлика от BGAppRefreshTask, който трябва да се изпълни поне веднъж дневно, Processing може да не се изпълни с седмици, ако устройството рядко се зарежда.

App Store Review Guidelines за Background Modes

Apple стриктно проверява използването на Background Modes при ревю на приложения. Основно правило: всеки включен режим трябва да бъде обоснован от функционалността на приложението. Ако приложението декларира Location Mode, но не използва геолокация, то ще бъде отхвърлено с искане за премахване на capability.

Чести причини за отхвърляне

Най-честите нарушения: Location Mode без явна необходимост (приложението иска достъп за показване на реклами), Audio Mode без възпроизвеждане на звук на фона, VoIP без PushKit, BLE Mode без Bluetooth устройства. Apple може да отхвърли приложението дори на етап обновяване, ако режимът вече не се използва.

Описание в ревюто

При изпращане за ревю, посочете в Notes конкретна обосновка за всеки режим. Например, „Location Background Mode се използва за проследяване на маршрута на потребителя във фитнес функцията”. Без обяснение, рецензентът може да отхвърли приложението. За поверителни функции (VoIP), Apple може да поиска тестов акаунт.

Препоръки за минимизиране на режимите

Използвайте минимално необходимия набор от режими. Ако приложението се нуждае от фоново изтегляне на данни веднъж на час — не включвайте Location Mode, използвайте Fetch или BGAppRefreshTask. Излишните режими не само водят до отхвърляне, но създават и негативно впечатление: потребителят вижда в настройките, че приложението използва геолокация на фона.

Често задавани въпроси

Колко Background Modes могат да бъдат включени в едно приложение?

Няма ограничение за броя, но всеки режим трябва да бъде обоснован от функционалността на приложението. Включването на всички режими без необходимост е гарантирана причина за отхвърляне при ревю. Практическо ограничение са 2–3 режима на приложение, в противен случай потребителят ще види множество искания за разрешения.

Как да проверя дали 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 — най-скъпият, може да намали времето за работа с 30–50% при непрекъснато проследяване. Audio Mode — умерен (15–20%). Fetch и Processing — минимален (2–5%). BLE Mode — нисък (5–10%) благодарение на енергийната ефективност на Bluetooth LE.

Резюме

  • Background Modes — декларируеми iOS capability, които позволяват на приложението легитимно да изпълнява код на фона.
  • Audio Mode — най-разпространеният, за възпроизвеждане на музика, подкасти и видео чрез AVAudioSession с категория .playback.
  • Location Mode — за навигация и фитнес, най-енергоемък, изисква requestAlwaysAuthorization и allowsBackgroundLocationUpdates.
  • BLE Mode — работа с Bluetooth устройства на фона чрез CBCentralManager с фоново сканиране.
  • VoIP и PushKit — за комуникационни приложения, гарантира доставка на входящи повиквания чрез PKPushRegistry.
  • Fetch и Processing — кратки и дълготрайни фонови задачи с различни условия на изпълнение и времеви ограничения.
  • Apple стриктно проверява обосновката на всеки режим — неправомерното използване води до отхвърляне на приложението от App Store.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също