Background Modes — iOS-un bəyan edilmiş imkanlar toplusudur ki, proqramın fon rejiminə keçdikdən sonra kodun icrasını davam etdirməsinə imkan verir. Hər rejim müəyyən bir tapşırıq növünə uyğundur: audio, geolokasiya, VoIP, Bluetooth, fetch və processing. Apple, 2026-ya görə, Background Modes-un səhv istifadəsi App Store-da baxış zamanı proqramların rədd edilməsinin ümumi səbəblərindən biridir.
Əsas məqamlar
Background Modes — Xcode layihəsinin capability-ləridir ki, proqramın fonda müəyyən əməliyyat növlərini yerinə yetirmək niyyətini bəyan edir. Android-dən fərqli olaraq, burada proqram fonda istənilən Service-i işə sala bilər, iOS Info.plist-də rejimin açıq şəkildə göstərilməsini tələb edir. Hər rejimin ciddi istifadə qaydaları var və Apple tərəfindən baxış zamanı yoxlanılır.
Proqram fon rejiminə keçdikdə, iOS onu 3–5 saniyədən sonra dayandırır. Əgər proqram Background Mode bəyan edirsə və müvafiq API-dən (məsələn, audio üçün AVAudioSession) aktiv istifadə edirsə, sistem onu xüsusi icra rejiminə keçirir. Proqram qalır operativ yaddaşda və rejimin növü ilə məhdudlaşan kodu icra edə bilər.
Aşağıdakı Background Modes iOS tərəfindən dəstəklənir: Audio, Location, VoIP, Bluetooth LE, Background Fetch, Background Processing, External Accessory Communication, Push to Talk (PTT) və HealthKit. Hər rejim proqram təsvirində əsaslandırma tələb edir.
| Rejim | Info.plist açarı | Təyinat | iOS versiyası |
|---|---|---|---|
| Audio | audio | Fonda audio, AirPlay | 4.0+ |
| Location | location | Yer təyini izləmə | 4.0+ |
| VoIP | voip | VoIP push bildirişləri | 4.0+ |
| BLE | bluetooth-central | BLE cihazları ilə iş | 7.0+ |
| Fetch | fetch | Dövri məlumat yükləmə | 7.0+ |
| Processing | processing | Uzunmüddətli fon tapşırıqları | 13.0+ |
| Push to Talk | push-to-talk | Səsli push-to-talk | 16.0+ |
Audio Background Mode — ən çox yayılmış rejimdir, musiqi pleyerləri, podkast proqramları və audio xidmətləri tərəfindən istifadə olunur. Proqram səsi oxutmağa davam edə, Control Center vasitəsilə idarə oluna və Lock Screen-də göstərilə bilər. Aktivləşdirmək üçün .playback kateqoriyası ilə AVAudioSession-u konfiqurasiya etmək kifayətdir.
Fonda audio işləməsi üçün AVAudioSession-u konfiqurasiya etmək və aktivləşdirmək lazımdır. .playback kateqoriyası sistemə proqramın səs oxutduğunu və fonda aktiv qalmalı olduğunu bildirir. Bu konfiqurasiya olmadan səs proqram bağlandıqdan 5–10 saniyə sonra dayanacaq.
import AVFoundation
func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(
.playback,
mode: .default,
options: []
)
try session.setActive(true)
} catch {
print("Audio sessiyası xətası: \(error)")
}
}
Control Center və Lock Screen ilə inteqrasiya üçün MPRemoteCommandCenter konfiqurasiya edilməlidir. O, Play, Pause, Next və Previous Track əmrlərini emal edir. Həmçinin MPNowPlayingInfoProperty yenilənməlidir ki, metadata göstərilsin: mahnı adı, ifaçı, üz qabığı və oxutma gedişatı.
iOS 14-dən başlayaraq, audio Background Mode video üçün Picture in Picture dəstəkləyir. Proqram bağlandıqda videonu üzən pəncərədə göstərməyə davam edə bilər. Aktivləşdirmək üçün AVPlayerLayer ilə AVPictureInPictureController istifadə edin. Rejim yalnız proqram audio treki oxutduqda işləyir.
Location Background Mode proqrama fonda geolokasiya yeniləmələrini almağa imkan verir. Naviqatorlarda, fitnes izləyicilərində, çatdırılma proqramlarında və sosial şəbəkələrdə istifadə olunur. Bu rejim olmadan proqram yalnız bir dəfə fonda keçərkən lokasiya alır, sonra yeniləmələr dayanır.
CLLocationManager bir neçə izləmə strategiyası dəstəkləyir: əhəmiyyətli dəyişikliklər (significant-change location), standart izləmə (standard location) və region izləmə (region monitoring). Maksimal dəqiqliklə fonda iş üçün allowsBackgroundLocationUpdates = true və pausesLocationUpdatesAutomatically = false istifadə edin.
Fonda lokasiyanın davamlı izlənməsi ən enerji tələb edən ssenarilərdən biridir. iOS avtomatik olaraq yeniləmə tezliyini hərəkət sürətinə uyğunlaşdırır: gəzinti zamanı hər 10–30 saniyədən bir, avtomobildə isə hər 1–5 saniyədən bir yeniləmə. Naviqasiya üçün desiredAccuracy = kCLLocationAccuracyBestForNavigation istifadə edin.
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()
Significant-change location rejimi Location Background Mode olmadan işləyir — sistem proqramı yalnız koordinatların əhəmiyyətli dərəcədə dəyişməsi zamanı (adətən 500 m və daha çox) oyadır. GPS-in davamlı qoşulmasını tələb etmir, bu da batareyaya qənaət edir. İstifadəçi hərəkət etdikdə məlumatları yeniləyən hava proqramları üçün uyğundur.
Bluetooth LE Background Mode proqrama fonda BLE cihazları ilə qarşılıqlı əlaqəyə imkan verir. Fitnes bilərziklər, tibbi sensorlar, Smart Home cihazları və Beacon naviqasiyası tərəfindən istifadə olunur. Rejim iki alt növə bölünür: bluetooth-central (proqram cihazlara qoşulur) və bluetooth-peripheral (proqram cihaz kimi çıxış edir).
Central rolunda proqram fonda BLE cihazlarını skan edə və onlara qoşula bilər. Bunun üçün Background Modes-da bluetooth-central göstərilməli və CBCentralManager.scanForPeripherals CBCentralManagerScanOptionAllowDuplicatesKey opsiyası ilə çağırılmalıdır. Fonda skan etmə aşağı tezliklə işləyir — sistem enerjiyə qənaət üçün aşkarlamanı gecikdirə bilər.
Peripheral rolunda proqram xidmətləri reklam edə və digər cihazların sorğularına cavab verə bilər. Bluetooth-peripheral rejimi proqrama hətta fonda da digər BLE cihazları üçün görünən qalmağa imkan verir. HealthKit proqramlarında və IoT həllərində istifadə olunur.
iBeacon monitorinqi əlavə icazələr olmadan fonda işləyir — sistem özü Beacon regionuna giriş və çıxışı izləyir. Lakin Beacon məzmununu skan etmək (proximity UUID, major, minor) üçün Bluetooth icazəsi və bluetooth-central Background Mode tələb olunur. Monitorinq üçün CLBeaconRegion ilə CLLocationManager istifadə edin.
VoIP Background Mode səsli rabitə proqramları (Skype, Zoom, WhatsApp) üçün nəzərdə tutulub. Rejim proqrama daxil olan zəngləri qəbul etmək üçün serverə qoşulu qalmağa imkan verir. iOS 8-dən başlayaraq, VoIP üçün PushKit istifadə olunur — APNs olmadan VoIP serverindən Push bildirişlərini emal edən freymvork.
PushKit cihaza VoIP bildirişinin çatdırılmasını təmin edən yeganə mexanizmdir. PushKit bildirişi alındıqda sistem proqramı oyadır, hətta proqram bağlanmış olsa belə. Proqram 30 saniyə ərzində serverə qoşulmalı və daxil olan zəng haqqında lokal bildiriş göstərməlidir.
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 adi bildirişlər üçün istifadə edilə bilməz — yalnız VoIP, watchOS rabitəsi və fayl provayderləri üçün. Apple bunu yoxlayır baxış zamanı. Haqsız istifadə zamanı proqram rədd edilir. iOS 13-dən etibarən, PushKit yalnız bildiriş çatdırır — zəng ekranını göstərmək üçün CXProvider (CallKit) çağırışı məcburidir.
Background Fetch və Background Processing — fonda məzmun yeniləməsi və uzunmüddətli tapşırıqların icrası üçün rejimlər. Fetch — qısa dövri yeniləmələr (30 s-ə qədər), Processing — şərtlərlə (Wi-Fi, şarj) uzunmüddətli tapşırıqlar (10 dəq-ə qədər). Processing yalnız iOS 13+-dan etibarən mövcuddur.
Fetch rejimi sistemə dövri olaraq proqramı təzə məzmun yükləmək üçün oyatmağa imkan verir. Sistem istifadəçi davranışını təhlil edir və optimal vaxtı seçir. Proqram 30 saniyə ərzində completion handler-i çağırmalıdır. Fetch xəbər proqramları, sosial şəbəkə lentləri və hava proqramları üçün uyğundur.
BGProcessingTask istifadəçinin iştirakı olmadan yerinə yetirilə bilən tapşırıqlar üçün nəzərdə tutulub: keşin təmizlənməsi, böyük verilənlər bazasının sinxronizasiyası, media fayllarının emalı. Sistem tapşırığı yalnız əlverişli şəraitdə işə salır — cihaz şarjda, Wi-Fi-a qoşulu, Low Power rejimində deyil. 10 dəqiqəyə qədər mövcuddur.
BGProcessingTask üçün requiresExternalPower və requiresNetworkConnectivity göstərilməlidir. Sistem şərtlər yerinə yetirilmədikdə icranı qeyri-müəyyən müddətə təxirə sala bilər. Gündə ən azı bir dəfə icra olunmalı olan BGAppRefreshTask-dən fərqli olaraq, Processing cihaz nadir hallarda şarj edilirsə həftələrlə icra olunmaya bilər.
Apple proqramların baxışı zamanı Background Modes istifadəsini ciddi şəkildə yoxlayır. Əsas qayda: hər aktivləşdirilmiş rejim proqramın funksionallığı ilə əsaslandırılmalıdır. Proqram Location Mode bəyan edirsə, lakin geolokasiyadan istifadə etmirsə, capability-nin silinməsi tələbi ilə rədd ediləcək.
Ən çox yayılmış pozuntular: Location Mode açıq ehtiyac olmadan (proqram reklam göstərmək üçün “Always” girişi tələb edir), fonda səs oxutmadan Audio Mode, PushKit olmadan VoIP, Bluetooth cihazları olmadan BLE Mode. Apple proqramı yeniləmə mərhələsində belə rədd edə bilər, əgər rejim artıq istifadə edilmirsə.
Baxışa göndərərkən Notes-da hər rejimin konkret əsaslandırmasını göstərin. Məsələn, “Location Background Mode fitness funksiyasında istifadəçinin marşrutunu izləmək üçün istifadə olunur”. İzahat olmadan rəyçi proqramı rədd edə bilər. Məxfi funksiyalar (VoIP) üçün Apple test hesabı tələb edə bilər.
Minimum zəruri rejim dəstindən istifadə edin. Proqrama saatda bir dəfə fonda məlumat yükləməsi lazımdırsa — Location Mode-u yox, Fetch və ya BGAppRefreshTask istifadə edin. Artıq rejimlər təkcə rədd edilməyə səbəb olmur, həm də mənfi təəssürat yaradır: istifadəçi parametrlərdə proqramın fonda geolokasiyadan istifadə etdiyini görür.
Tez-tez verilən suallar
Say məhdudiyyəti yoxdur, lakin hər rejim proqramın funksionallığı ilə əsaslandırılmalıdır. Bütün rejimləri ehtiyacsız aktivləşdirmək baxış zamanı rədd edilmənin zəmanətli səbəbidir. Praktiki məhdudiyyət — proqram üçün 2–3 rejim, əks halda istifadəçi çoxsaylı icazə sorğuları görəcək.
UIApplication.shared.applicationState istifadə edin — proqram fonda olub olmadığını yoxlaya bilər (state == .background). Həmçinin davranışı dəyişmək üçün UIApplication.didEnterBackgroundNotification və willEnterForegroundNotification bildirişlərini izləyə bilərsiniz.
Audio — dinamik və ya qulaqlıq vasitəsilə səs oxutma. AirPlay — audio və videonun Apple TV və digər AirPlay cihazlarına ötürülməsi. Praktikada Audio Mode hər iki ssenarini əhatə edir, çünki AirPlay audio sessiyasından istifadə edir. iOS 7+-dan etibarən ayrıca AirPlay rejimi tələb olunmur.
Bəli, bunun üçün requestAlwaysAuthorization əvəzinə requestWhenInUseAuthorization() istifadə edin. Proqram yalnız ön planda lokasiya alacaq. Fonda qısamüddətli izləmə lazımdırsa — startUpdatingLocation() çağırın və willResignActive-də dayandırın.
Hər rejim enerji istehlakını artırır. Location Mode — ən bahalı, davamlı izləmə zamanı iş müddətini 30–50% azalda bilər. Audio Mode — orta səviyyəli (15–20%). Fetch və Processing — minimal (2–5%). BLE Mode — aşağı (5–10%) Bluetooth LE-nin enerji səmərəliliyi sayəsində.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun