Background Fetch: mi ez, működési elv és a frissítések konfigurálása

Szerző: IT Sectr Megjelenés: 2026-03-27 Olvasási idő: 8 perc

Background Fetch — az iOS mechanizmusa, amely időszakosan felébreszti az alkalmazást a háttérben friss tartalom letöltéséhez. A rendszer elemzi a felhasználó viselkedését és kiválasztja az optimális ablakokat a frissítéshez. A Apple, 2026 adatai szerint az alkalmazás 30 és 120 másodperc között kap a művelet végrehajtására, majd a rendszer felfüggeszti vagy befejezi a folyamatot.

Főbb pontok

  • Background Fetch — iOS API a tartalom időszakos háttérben történő frissítéséhez.
  • A rendszer kezeli az ébresztések gyakoriságát a felhasználói viselkedés elemzése alapján.
  • Minimális intervallum a UIApplication.minimumBackgroundFetchInterval segítségével állítható be.
  • Elavulás — iOS 13+ tól a mechanizmus elavultnak számít, a BGTaskScheduler ajánlott.
  • Végrehajtási idő — akár 30 másodperc, ami után a rendszer kényszerítetten befejezi a feladatot.

Mi az a Background Fetch iOS-ben?

Background Fetch — egy iOS API, amely lehetővé teszi az alkalmazás számára, hogy időszakosan friss adatokat kapjon a háttérben. Először iOS 7-ben mutatták be a Background App Refresh mechanizmussal együtt. A fő cél — hogy a tartalom naprakész legyen abban a pillanatban, amikor a felhasználó megnyitja az alkalmazást, anélkül hogy várnia kellene a betöltésre.

Különbség a Push értesítésektől

A Push értesítéseket a szerver kezdeményezi — jelet küld az eszközre, és a rendszer eldönti, hogy felébreszti-e az alkalmazást vagy sem. A Background Fetch-et maga az iOS kezdeményezi az eszköz használati mintái alapján. A Push alkalmasabb sürgős üzenetekhez, a Fetch — ütemezett tartalomfrissítéshez (hírek, közösségi médiacsatorna).

Hely a háttérfeladatok ökoszisztémájában

Background Fetch — az iOS egyik háttérvégrehajtási mechanizmusa. BGAppRefreshTask (iOS 13+) ugyanazt a feladatot végzi, de rugalmasabb ütemezéssel. Background Modes (audio, helymeghatározás) — folyamatos műveletekhez. Silent Push — szerver által kezdeményezett frissítés. A Fetch továbbra is releváns az iOS 12-t és alacsonyabb verziókat támogató projektek számára.

  • Background Fetch — időszakos, a rendszer kezdeményezi, iOS 7+.
  • BGAppRefreshTask — időszakos, a rendszer kezdeményezi, iOS 13+.
  • BGProcessingTask — hosszú feladatok, iOS 13+.
  • Silent Push — szerver kezdeményezi, iOS 7+.

Hogyan működik a Background Fetch: architektúra és életciklus

iOS gépi tanulási algoritmust használ az alkalmazás ébresztésének optimális időpontjának meghatározásához. A rendszer elemzi, hogy a felhasználó mikor nyitja meg általában az alkalmazást, mennyi ideig használja és milyen gyakran tér vissza. Ezen adatok alapján az iOS kiszámítja az ablakokat a Background Fetch számára.

A feladat végrehajtásának folyamata

Amikor a rendszer úgy dönt, hogy felébreszti az alkalmazást, meghívja az application(_:performFetchWithCompletionHandler:) metódust az AppDelegate-ben. Az alkalmazásnak minimális mennyiségű új adatot kell letöltenie és meg kell hívnia a completion handlert a három státusz egyikével: .newData (adatok letöltve), .noData (nincs új adat) vagy .failed (hiba). A státusz befolyásolja a jövőbeli ébresztések gyakoriságát.

A completion handler hatása a hívások gyakoriságára

A .newData státusz tájékoztatja a rendszert, hogy a frissítés hasznos volt — az iOS növelheti az ébresztések gyakoriságát. A .noData azt jelzi, hogy nincs adat — a gyakoriság változatlan marad vagy csökken. A .failed problémát jelez — a rendszer csökkenti a gyakoriságot, hogy ne merítse az akkumulátort. A hangsúlynak az őszinte státuszon kell lennie, nem a kényszerített .newData-n.

StátuszJelentésHatás
.newDataAdatok sikeresen letöltveGyakoriság nőhet
.noDataAz ellenőrzés nem talált új adatotGyakoriság változatlan
.failedHálózati vagy szerverhibaGyakoriság csökken

Background Fetch beállítása Xcode projektben

A Background Fetch engedélyezéséhez két lépést kell végrehajtani: aktiválni a capability-t Xcode-ban és beállítani a minimális intervallumot a kódban. A capability a Target — Signing & Capabilities — Background Modes — Background Fetch jelölőnégyzet bejelölésével található. E lépés nélkül a rendszer nem ébreszti fel az alkalmazást.

Minimális intervallum beállítása

A UIApplication.shared.setMinimumBackgroundFetchInterval metódus beállítja a minimális időt másodpercben a Fetch hívások között. A UIApplication.backgroundFetchIntervalMinimum érték (körülbelül 15 perc) utasítja a rendszert, hogy olyan gyakran ébressze fel az alkalmazást, amilyen gyakran energiahatékony. Az intervallum beállítása az application(_:didFinishLaunchingWithOptions:) metódusban standard gyakorlat.

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

Info.plist és capability

A Background Fetch Xcode-ban történő engedélyezésekor automatikusan frissíti az Info.plist-et — hozzáadja a UIBackgroundModes kulcsot fetch értékkel. Ez egy kötelező lépés: enélkül az alkalmazás nem kapja meg a performFetchWithCompletionHandler hívást. A jelenlétet a P list Source vagy a Build Settings segítségével ellenőrizheti.

Background Fetch kódpéldák Swift-ben

Tekintsük át a Background Fetch teljes implementációját egy híralkalmazáshoz. Az implementáció magában foglalja az adatok letöltését, gyorsítótárazást és a completion handler meghívását. A kód az AppDelegate-ben fut — az egyetlen helyen, ahol a rendszer fetch-et hív.

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()
}

Letöltött adatok gyorsítótárazása

A Background Fetch segítségével letöltött adatokat helyi tárolóba — CoreData, UserDefaults vagy File Manager — kell menteni. Az alkalmazás megnyitásakor az adatoknak már elérhetőnek kell lenniük. Használjon CoreData-t háttérkontextussal a szálbiztos íráshoz. Mentés után frissítse a UI-t a fő szálon.

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 tesztelése

Teszthez használja a Simulator-t — válassza a Debug — Simulate Background Fetch menüpontot Xcode-ban. Fizikai eszközön várnia kell, amíg a rendszer úgy dönt, hogy végrehajtja a fetch-et. A gyorsításhoz beállíthatja a minimális intervallumot 1 percre, de a rendszer alacsony akkumulátorszintnél továbbra is figyelmen kívül hagyhatja.

Korlátozások és buktatók

A Background Fetch számos korlátozással rendelkezik, amelyeket fontos figyelembe venni az alkalmazás architektúrájának tervezésekor. A legfontosabb — a rendszer teljes mértékben szabályozza a hívások gyakoriságát, és a fejlesztő nem tudja garantálni azt. Még beállított minimális intervallum esetén is a rendszer órákig nem hívhat fetch-et.

Végrehajtási idő korlátozása

A rendszer korlátozott időt biztosít az alkalmazásnak a feladat végrehajtására — általában akár 30 másodpercet. Ha az alkalmazás nem hívja meg a completion handlert ezen idő alatt, a rendszer kényszerítetten befejezi a folyamatot és csökkenti a jövőbeli ébresztések gyakoriságát. Minden hálózati kérésnek kompaktnak kell lennie — legfeljebb 1–2 hívásonként.

Függés az akkumulátortól

Az iOS figyelembe veszi az akkumulátor töltöttségi szintjét a Background Fetch ütemezésekor. 20% alatti szintnél az ébresztések gyakorisága csökken. Low Power Mode bekapcsolásakor a rendszer teljesen kikapcsolhatja a háttérfrissítéseket minden alkalmazás számára. A felhasználó a beállításokban egy adott alkalmazásra is kikapcsolhatja a Background App Refresh funkciót.

Hálózati korlátozások

A Background Fetch-ből indított URLSession standard módban működik — háttér-munkamenetek támogatása nélkül. Nagy letöltésekhez használjon URLSession-t background configurationnel. A rendszer folytatja a letöltést a fetch befejezése után is, de a haladás nem lesz követve a következő ébresztésig.

Migráció Background Fetch-ről BGTaskScheduler-ra

iOS 13-tól kezdve az Apple a BGTaskScheduler-t ajánlja a Background Fetch helyettesítésére. A BGTaskScheduler rugalmasabb ütemezést, kétféle feladatot (refresh és processing) és a feladatok regisztrációját azonosítókkal biztosítja. A migráció több lépésből áll, és minden új projekt számára ajánlott.

Lépésről lépésre történő migráció

Első lépés — határozza meg a feladatazonosítókat az Info.plist-ben a BGTaskSchedulerPermittedIdentifiers kulcs segítségével. Második — regisztrálja a feladatokat az AppDelegate-ben a BGTaskScheduler.shared.register segítségével. Harmadik — cserélje ki a performFetchWithCompletionHandler hívást a register-nek átadott handlerre. Negyedik — hívja meg a submit-et a feladat ütemezéséhez.

swift
// Korábban (Background Fetch)
UIApplication.shared.setMinimumBackgroundFetchInterval(
    UIApplication.backgroundFetchIntervalMinimum
)

// Migráció után (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)

A BGTaskScheduler előnyei

A BGTaskScheduler több vezérlést biztosít: BGProcessingTask hosszú műveletekhez (akár 10 percig), végrehajtási feltételek a requiresNetworkConnectivity és requiresExternalPower segítségével, expiration handler a zökkenőmentes befejezéshez. A rendszer is elemzi az alkalmazás használatát, de a fejlesztő pontosabb követelményeket állíthat be.

Mikor tartsuk meg a Background Fetch-et

Ha az alkalmazás támogatja az iOS 12-t és alacsonyabb verziókat, a Background Fetch marad az egyetlen lehetőség az időszakos frissítésre. A BGTaskScheduler csak iOS 13+-tól elérhető. Ebben az esetben használjon wrapper-t: ellenőrizze a BGTaskScheduler elérhetőségét az if #available(iOS 13, *) segítségével, és hívja meg a megfelelő API-t.

Gyakran Ismételt Kérdések

Milyen gyakran hívja az iOS a Background Fetch-et?

A pontos gyakoriság nincs dokumentálva, és a felhasználó viselkedésétől függ. A rendszer elemzi, hogy a felhasználó milyen gyakran nyitja meg az alkalmazást, és ennek megfelelően állítja be a gyakoriságot. Átlagosan aktív használat mellett a fetch óránként 1–3 alkalommal hívódhat meg. Ritka használat mellett — napi 1–2 alkalommal.

Miért nem hívódik meg a Background Fetch-em?

Ellenőrizze a három feltételt: Background Fetch capability be van kapcsolva Xcode-ban, be van állítva a minimumBackgroundFetchInterval, és a felhasználó nem kapcsolta ki a Background App Refresh funkciót az alkalmazás számára a beállításokban. Ellenőrizze azt is, hogy az eszköz nincs Low Power Mode-ban, és az akkumulátor szintje 20% felett van.

Mi a különbség a Background Fetch és a BGAppRefreshTask között?

Background Fetch — régi API (iOS 7), BGAppRefreshTask — új API (iOS 13+). A BGAppRefreshTask több vezérlést biztosít: expiration handler, átütemezési lehetőség és állapotellenőrzés. A Background Fetch egyszerűbb implementálni, de kevésbé rugalmas. Az Apple a BGAppRefreshTask használatát ajánlja új projektekhez.

Lehet nagy fájlokat letölteni Background Fetch segítségével?

Nem ajánlott. Background Fetch időben korlátozott (akár 30 másodperc). Nagy letöltésekhez használjon URLSession-t background configurationnel — a rendszer folytatja a letöltést a fetch befejezése után is. Alternatíva — BGProcessingTask (iOS 13+), ahol akár 10 perc és töltési feltételek állnak rendelkezésre.

Fogyasztja a Background Fetch az akkumulátort?

Igen, minden ébresztés energiát fogyaszt a processzor bekapcsolásához, a hálózati verem inicializálásához és az adatok letöltéséhez. Az iOS optimalizálja a gyakoriságot a hatás minimalizálása érdekében. Helyes implementációval — csak új adatok letöltése, a completion handler gyors meghívása — az akkumulátorra gyakorolt hatás minimális.

Összegzés

  • Background Fetch — iOS API időszakos adatletöltéshez a háttérben, elérhető iOS 7-től és ajánlott BGTaskScheduler-ra cserélni.
  • A rendszer kezeli a hívások gyakoriságát a felhasználói viselkedés elemzésével — a fejlesztő nem tudja garantálni az ébresztés időpontját.
  • Három státusz a completion handler számára — .newData, .noData, .failed — befolyásolja az alkalmazás jövőbeli ébresztési gyakoriságát.
  • 30 másodperces korlátozás — ne végezzen hosszú műveleteket vagy több egymást követő hálózati kérést.
  • Capability kötelező — Background Fetch Xcode-ban + minimumBackgroundFetchInterval beállítása a kódban.
  • BGTaskScheduler — modern helyettesítő iOS 13+-tól, több vezérléssel és kétféle feladattípussal.
  • iOS 12-t és alacsonyabb verziókat támogató projektekhez használja a Background Fetch-et a BGTaskScheduler elérhetőségének if #available segítségével történő ellenőrzésével.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is