Background Fetch: bu nədir, iş prinsipi və yeniləmələrin konfiqurasiyası

Müəllif: IT Sectr Dərc olunub: 2026-03-27 Oxuma vaxtı: 8 dəq

Background Fetch — iOS mexanizmi, dövri olaraq tətbiqi fonda oyadaraq təzə məzmun yükləmək üçün. Sistem istifadəçinin davranışını təhlil edir və yeniləmə üçün optimal pəncərələri seçir. Apple, 2026 məlumatlarına görə, tətbiq əməliyyatı yerinə yetirmək üçün 30-dan 120 saniyəyə qədər vaxt alır, bundan sonra sistem prosesi dayandırır və ya başa çatdırır.

Əsas məqamlar

  • Background Fetch — fonda dövri məzmun yeniləməsi üçün iOS API.
  • Sistem idarə edir oyanma tezliyini istifadəçi davranışının təhlili əsasında.
  • Minimum interval UIApplication.minimumBackgroundFetchInterval vasitəsilə təyin edilir.
  • Köhnəlmə — iOS 13+ ilə mexanizm legacy sayılır, BGTaskScheduler tövsiyə olunur.
  • İcra müddəti — 30 saniyəyə qədər, bundan sonra sistem tapşırığı məcburi başa çatdırır.

iOS-da Background Fetch nədir?

Background Fetch — bu, tətbiqə fonda dövri olaraq təzə məlumat almağa imkan verən iOS API-dir. İlk dəfə iOS 7-də Background App Refresh mexanizmi ilə birlikdə təqdim edilmişdir. Əsas məqsəd — məzmunun istifadəçi tətbiqi açdığı anda aktual olması, yükləməni gözləməyə ehtiyac olmamasıdır.

Push bildirişlərindən fərqi

Push bildirişləri server tərəfindən başladılır — o, cihaza siqnal göndərir və sistem tətbiqi oyatmaq və ya yox qərarı verir. Background Fetch iOS-un özü tərəfindən cihazın istifadə nümunələri əsasında başladılır. Push təcili mesajlar üçün daha uyğundur, Fetch — planlı məzmun yeniləməsi üçün (xəbərlər, sosial şəbəkə lentləri).

Fon tapşırıqları ekosistemində yeri

Background Fetch — iOS-da fon icrası mexanizmlərindən biridir. BGAppRefreshTask (iOS 13+) eyni tapşırığı yerinə yetirir, lakin daha çevik planlama ilə. Background Modes (audio, lokasiya) — davamlı əməliyyatlar üçün. Silent Push — server tərəfindən başladılan yeniləmə. Fetch iOS 12 və aşağısını dəstəkləyən layihələr üçün aktual olaraq qalır.

  • Background Fetch — dövri, sistem tərəfindən başladılır, iOS 7+.
  • BGAppRefreshTask — dövri, sistem tərəfindən başladılır, iOS 13+.
  • BGProcessingTask — uzunmüddətli tapşırıqlar, iOS 13+.
  • Silent Push — server tərəfindən başladılır, iOS 7+.

Background Fetch necə işləyir: arxitektura və həyat dövrü

iOS tətbiqin oyanması üçün optimal vaxtı müəyyən etmək məqsədilə maşın öyrənmə alqoritmindən istifadə edir. Sistem istifadəçinin adətən tətbiqi nə vaxt açdığını, nə qədər istifadə etdiyini və nə qədər tez-tez qayıtdığını təhlil edir. Bu məlumatlar əsasında iOS Background Fetch üçün pəncərələri hesablayır.

Tapşırığın icra prosesi

Sistem tətbiqi oyatmaq qərarına gəldikdə, AppDelegate-də application(_:performFetchWithCompletionHandler:) metodunu çağırır. Tətbiq minimum miqdarda yeni məlumat yükləməli və üç statusdan biri ilə completion handler çağırmalıdır: .newData (məlumat yükləndi), .noData (yeni məlumat yoxdur) və ya .failed (xəta). Status gələcək oyanmaların tezliyinə təsir edir.

Completion handler-in çağırış tezliyinə təsiri

.newData statusu sistemə yeniləmənin faydalı olduğunu bildirir — iOS oyanma tezliyini artıra bilər. .noData məlumat olmadığını deyir — tezlik eyni qalır və ya azalır. .failed problem olduğunu göstərir — sistem batareyanı boşaltmamaq üçün tezliyi azaldır. Vurğu dürüst statusda olmalıdır, məcburi .newData-da deyil.

StatusMənaTəsir
.newDataMəlumat uğurla yükləndiTezlik arta bilər
.noDataYoxlama yeni məlumat vermədiTezlik eyni qalır
.failedŞəbəkə və ya server xətasıTezlik azalır

Xcode layihəsində Background Fetch-in quraşdırılması

Background Fetch-i aktivləşdirmək üçün iki addım yerinə yetirmək lazımdır: Xcode-da capability-ni aktivləşdirmək və kodda minimum interval təyin etmək. Capability Target — Signing & Capabilities — Background Modes — Background Fetch checkbox-ını qeyd etməklə tapılır. Bu addım olmadan sistem tətbiqi oyatmayacaq.

Minimum intervalın təyini

UIApplication.shared.setMinimumBackgroundFetchInterval metodu Fetch çağırışları arasında minimum vaxtı saniyələrlə təyin edir. UIApplication.backgroundFetchIntervalMinimum dəyəri (təxminən 15 dəqiqə) sistemə tətbiqi enerji səmərəli olduğu qədər tez-tez oyatmağı bildirir. application(_:didFinishLaunchingWithOptions:) daxilində intervalın təyini standart təcrübədir.

swift
func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey : Any]?
)-> Bool {
    UIApplication.shared.setMinimumBackgroundFetchInterval(
        UIApplication.backgroundFetchIntervalMinimum
    )
    return true
}

Info.plist və capability

Background Fetch Xcode-da aktivləşdirildikdə avtomatik olaraq Info.plist-i yeniləyir — UIBackgroundModes açarını fetch dəyəri ilə əlavə edir. Bu məcburi addımdır: onsuz tətbiq performFetchWithCompletionHandler çağırışını almayacaq. Mövcudluğu P list Source və ya Build Settings vasitəsilə yoxlamaq olar.

Swift-də Background Fetch kod nümunələri

Xəbər tətbiqi üçün Background Fetch-in tam tətbiqini nəzərdən keçirək. Tətbiq məlumat yükləmə, keşləmə və completion handler çağırışını əhatə edir. Kod AppDelegate-də icra olunur — sistemin fetch çağırdığı yeganə yer.

swift
func application(
    _ application: UIApplication,
    performFetchWithCompletionHandler handler: @escaping (UIBackgroundFetchResult) -> Void
) {
    let url = URL(string: "https://api.example.com/latest")!

    URLSession.shared.dataTask(with: url) { data, response, error in
        guard let data = data, error == nil else {
            handler(.failed)
            return
        }

        do {
            let articles = try JSONDecoder().decode([Article].self, from: data)
            cacheArticles(articles)
            handler(articles.isEmpty ? .noData : .newData)
        } catch {
            handler(.failed)
        }
    }.resume()
}

Yüklənmiş məlumatların keşlənməsi

Background Fetch vasitəsilə məlumat yükləndikdən sonra onları yerli yaddaşa — CoreData, UserDefaults və ya File Manager-ə saxlamaq lazımdır. Tətbiq açıldıqda məlumat artıq əlçatan olmalıdır. Təhlükəsiz yazma üçün fon konteksti ilə CoreData istifadə edin. Saxlamadan sonra UI-ni əsas iplikdə yeniləyin.

swift
func cacheArticles(_ articles: [Article]) {
    let container = NSPersistentContainer(name: "AppModel")
    container.performBackgroundTask { context in
        articles.forEach { article in
            let entity = ArticleEntity(context: context)
            entity.id = Int64(article.id)
            entity.title = article.title
            entity.body = article.body
        }
        try? context.save()
    }
}

Background Fetch-in test edilməsi

Test üçün Simulator istifadə edin — Xcode-da Debug — Simulate Background Fetch seçin. Fiziki cihazda sistemin fetch etmək qərarına gələnə qədər gözləmək lazımdır. Sürətləndirmək üçün minimum intervalı 1 dəqiqəyə təyin etmək olar, lakin sistem batareya az olduqda yenə də onu görməzliyə vura bilər.

Məhdudiyyətlər və tələlər

Background Fetch-in bir sıra məhdudiyyətləri var ki, tətbiq arxitekturasını layihələndirərkən nəzərə almaq vacibdir. Əsas odur ki, sistem çağırışların tezliyini tamamilə idarə edir və tərtibatçı onu zəmanət altına ala bilməz. Hətta minimum interval təyin edildikdə belə, sistem fetch-i saatlarla çağırmaya bilər.

İcra vaxtının məhdudiyyəti

Sistem tətbiqə tapşırığı yerinə yetirmək üçün məhdud vaxt ayırır — adətən 30 saniyəyə qədər. Tətbiq bu müddət ərzində completion handler çağırmazsa, sistem prosesi məcburi başa çatdırır və gələcək oyanmaların tezliyini azaldır. Bütün şəbəkə sorğuları kompakt olmalıdır — çağırış başına 1–2-dən çox olmamalıdır.

Batareyadan asılılıq

iOS Background Fetch-in planlanması zamanı batareyanın doldurulma səviyyəsini nəzərə alır. Səviyyə 20%-dən aşağı olduqda oyanma tezliyi azalır. Low Power Mode rejimi aktiv olduqda sistem bütün tətbiqlər üçün fon yeniləmələrini tamamilə söndürə bilər. İstifadəçi həmçinin parametrlərdə müəyyən bir tətbiq üçün Background App Refresh-i söndürə bilər.

Şəbəkə məhdudiyyətləri

Background Fetch-dən işə salınan URLSession standart rejimdə işləyir — fon sessiyalarını dəstəkləmir. Böyük yükləmələr üçün URLSession background configuration istifadə edin. Sistem fetch bitdikdən sonra da yükləməni davam etdirəcək, lakin növbəti oyanmaya qədər irəliləyiş izlənməyəcək.

Background Fetch-dən BGTaskScheduler-a miqrasiya

iOS 13-dən başlayaraq, Apple Background Fetch-in əvəzi olaraq BGTaskScheduler-ı tövsiyə edir. BGTaskScheduler daha çevik planlama, iki növ tapşırıq (refresh və processing) və identifikatorlarla tapşırıqların qeydiyyatını təmin edir. Miqrasiya bir neçə addımı əhatə edir və bütün yeni layihələr üçün tövsiyə olunur.

Addım-addım miqrasiya

Birinci addım — Info.plist-də BGTaskSchedulerPermittedIdentifiers açarı vasitəsilə tapşırıq identifikatorlarını təyin etmək. İkinci — BGTaskScheduler.shared.register vasitəsilə AppDelegate-də tapşırıqları qeydiyyatdan keçirmək. Üçüncü — performFetchWithCompletionHandler çağırışını register-ə ötürülən handler ilə əvəz etmək. Dördüncü — tapşırığı planlaşdırmaq üçün submit çağırmaq.

swift
// Əvvəllər (Background Fetch)
UIApplication.shared.setMinimumBackgroundFetchInterval(
    UIApplication.backgroundFetchIntervalMinimum
)

// Miqrasiyadan sonra (BGTaskScheduler)
BGTaskScheduler.shared.register(
    forTaskWithIdentifier: "com.example.refresh",
    using: nil
) { task in
    self.handleAppRefresh(task: task as! BGAppRefreshTask)
}

let request = BGAppRefreshTaskRequest(
    identifier: "com.example.refresh"
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
try? BGTaskScheduler.shared.submit(request)

BGTaskScheduler üstünlükləri

BGTaskScheduler daha çox nəzarət verir: BGProcessingTask uzunmüddətli əməliyyatlar üçün (10 dəqiqəyə qədər), requiresNetworkConnectivity və requiresExternalPower vasitəsilə icra şərtləri, hamar başa çatdırma üçün expiration handler. Sistem də tətbiqin istifadəsini təhlil edir, lakin tərtibatçı daha dəqiq tələblər təyin edə bilər.

Background Fetch nə vaxt saxlanılmalı

Tətbiq iOS 12 və aşağısını dəstəkləyirsə, Background Fetch dövri yeniləmə üçün yeganə seçim olaraq qalır. BGTaskScheduler yalnız iOS 13+-də mövcuddur. Bu halda sarğıcıdan istifadə edin: BGTaskScheduler mövcudluğunu if #available(iOS 13, *) vasitəsilə yoxlayın və müvafiq API çağırın.

Tez-tez verilən suallar

iOS Background Fetch-i nə qədər tez-tez çağırır?

Dəqiq tezlik sənədləşdirilməyib və istifadəçinin davranışından asılıdır. Sistem təhlil edir, istifadəçinin tətbiqi nə qədər tez-tez açdığını və tezliyi müvafiq olaraq uyğunlaşdırır. Orta hesabla aktiv istifadə zamanı fetch saatda 1–3 dəfə çağırıla bilər. Nadir istifadə zamanı — gündə 1–2 dəfə.

Niyə Background Fetch çağırılmır?

Üç şərti yoxlayın: Background Fetch capability Xcode-da aktivdir, minimumBackgroundFetchInterval təyin edilib və istifadəçi parametrlərdə tətbiq üçün Background App Refresh-i söndürməyib. Həmçinin cihazın Low Power Mode-da olmadığını və batareya səviyyəsinin 20%-dən yuxarı olduğunu yoxlayın.

Background Fetch və BGAppRefreshTask arasında nə fərq var?

Background Fetch — köhnə API (iOS 7), BGAppRefreshTask — yeni API (iOS 13+). BGAppRefreshTask daha çox nəzarət təmin edir: expiration handler, yenidən planlaşdırma imkanı və status yoxlaması. Background Fetch tətbiqdə daha sadədir, lakin daha az çevikdir. Apple yeni layihələr üçün BGAppRefreshTask istifadəsini tövsiyə edir.

Background Fetch vasitəsilə böyük faylları yükləmək olar?

Tövsiyə edilmir. Background Fetch vaxt baxımından məhduddur (30 saniyəyə qədər). Böyük yükləmələr üçün background configuration ilə URLSession istifadə edin — sistem fetch bitdikdən sonra da yükləməni davam etdirəcək. Alternativ — BGProcessingTask (iOS 13+), burada 10 dəqiqəyə qədər vaxt və şarj şərtləri mövcuddur.

Background Fetch batareya sərf edir?

Bəli, hər oyanma prosessoru işə salmaq, şəbəkə yığınını işə salmaq və məlumat yükləmək üçün enerji sərf edir. iOS optimallaşdırır tezliyi, təsiri minimuma endirmək üçün. Düzgün tətbiqdə — yalnız yeni məlumatların yüklənməsi, completion handler-in sürətli çağırışı — batareyaya təsir minimaldır.

Xülasə

  • Background Fetch — fonda dövri məlumat yükləməsi üçün iOS API, iOS 7-dən mövcuddur və BGTaskScheduler ilə əvəz edilməsi tövsiyə olunur.
  • Sistem idarə edir çağırış tezliyini, istifadəçi davranışını təhlil edərək — tərtibatçı oyanma vaxtını zəmanət altına ala bilməz.
  • Üç status completion handler — .newData, .noData, .failed — tətbiqin gələcək oyanma tezliyinə təsir edir.
  • 30 saniyə məhdudiyyəti — uzunmüddətli əməliyyatlar və ya ardıcıl çoxsaylı şəbəkə sorğuları yerinə yetirməyin.
  • Capability məcburidir — Xcode-da Background Fetch + kodda minimumBackgroundFetchInterval təyini.
  • BGTaskScheduler — iOS 13+-dən müasir əvəz, daha çox nəzarət və iki növ tapşırıq təmin edir.
  • iOS 12 və aşağısını dəstəkləyən layihələr üçün Background Fetch-dən istifadə edin, BGTaskScheduler mövcudluğunu if #available ilə yoxlayın.

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.

Layihəni müzakirə et

Həm də oxuyun