Background Fetch: wat het is, werkingsprincipe en configuratie van updates

Auteur: IT Sectr Gepubliceerd: 2026-03-27 Leestijd: 8 min

Background Fetch — een iOS-mechanisme dat periodiek de app op de achtergrond wekt om nieuwe content te downloaden. Het systeem analyseert het gedrag van de gebruiker en kiest optimale vensters voor update. Volgens Apple, 2026 krijgt de app 30 tot 120 seconden om de operatie uit te voeren, waarna het systeem het proces onderbreekt of beëindigt.

Belangrijkste punten

  • Background Fetch — iOS API voor periodieke contentupdates op de achtergrond.
  • Het systeem beheert de frequentie van wekkingen op basis van analyse van gebruikersgedrag.
  • Minimale interval wordt ingesteld via UIApplication.minimumBackgroundFetchInterval.
  • Veroudering — vanaf iOS 13+ wordt het mechanisme als legacy beschouwd, BGTaskScheduler wordt aanbevolen.
  • Uitvoeringstijd — tot 30 seconden, waarna het systeem de taak geforceerd beëindigt.

Wat is Background Fetch in iOS?

Background Fetch — is een iOS API waarmee de app periodiek nieuwe gegevens op de achtergrond kan ophalen. Voor het eerst geïntroduceerd in iOS 7 samen met het Background App Refresh-mechanisme. Het hoofddoel — dat content actueel is op het moment dat de gebruiker de app opent, zonder te hoeven wachten op laden.

Verschil met Push-meldingen

Push-meldingen worden geïnitieerd door de server — deze stuurt een signaal naar het apparaat en het systeem beslist of de app gewekt moet worden of niet. Background Fetch wordt door iOS zelf geïnitieerd op basis van gebruikspatronen van het apparaat. Push is geschikter voor urgente berichten, Fetch — voor geplande contentupdates (nieuws, social media feed).

Plaats in het ecosysteem van achtergrondtaken

Background Fetch — een van de verschillende mechanismen voor achtergronduitvoering in iOS. BGAppRefreshTask (iOS 13+) voert dezelfde taak uit, maar met flexibelere planning. Background Modes (audio, locatie) — voor continue operaties. Silent Push — server-geïnitieerde update. Fetch blijft relevant voor projecten die iOS 12 en lager ondersteunen.

  • Background Fetch — periodiek, geïnitieerd door systeem, iOS 7+.
  • BGAppRefreshTask — periodiek, geïnitieerd door systeem, iOS 13+.
  • BGProcessingTask — langdurige taken, iOS 13+.
  • Silent Push — geïnitieerd door server, iOS 7+.

Hoe werkt Background Fetch: architectuur en levenscyclus

iOS gebruikt een machine learning-algoritme om de optimale tijd te bepalen om de app te wekken. Het systeem analyseert wanneer de gebruiker de app gewoonlijk opent, hoe lang hij deze gebruikt en hoe vaak hij terugkeert. Op basis van deze gegevens berekent iOS vensters voor Background Fetch.

Proces van taakuitvoering

Wanneer het systeem besluit de app te wekken, roept het de methode application(_:performFetchWithCompletionHandler:) aan in AppDelegate. De app moet een minimale hoeveelheid nieuwe gegevens downloaden en de completion handler aanroepen met een van de drie statussen: .newData (gegevens geladen), .noData (geen nieuwe gegevens) of .failed (fout). De status beïnvloedt de frequentie van toekomstige wekkingen.

Invloed van completion handler op aanroepfrequentie

Status .newData informeert het systeem dat de update nuttig was — iOS kan de wekfrequentie verhogen. .noData geeft aan dat er geen gegevens zijn — frequentie blijft gelijk of daalt. .failed signaleert een probleem — het systeem verlaagt de frequentie om batterij te sparen. De nadruk moet liggen op eerlijke status, niet op geforceerd .newData.

StatusBetekenisInvloed
.newDataGegevens succesvol geladenFrequentie kan toenemen
.noDataControle gaf geen nieuwe gegevensFrequentie blijft gelijk
.failedNetwerk- of serverfoutFrequentie daalt

Background Fetch configureren in Xcode-project

Om Background Fetch in te schakelen moeten twee stappen worden uitgevoerd: capability activeren in Xcode en het minimale interval instellen in code. Capability bevindt zich in Target — Signing & Capabilities — Background Modes — vink Background Fetch aan. Zonder deze stap zal het systeem de app niet wekken.

Minimale interval instellen

De methode UIApplication.shared.setMinimumBackgroundFetchInterval stelt de minimale tijd in seconden in tussen Fetch-aanroepen. De waarde UIApplication.backgroundFetchIntervalMinimum (ongeveer 15 minuten) geeft het systeem aan om de app zo vaak te wekken als energie-efficiënt is. Het instellen van het interval in application(_:didFinishLaunchingWithOptions:) is standaardpraktijk.

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

Info.plist en capability

Bij het inschakelen van Background Fetch in Xcode wordt Info.plist automatisch bijgewerkt — het voegt de sleutel UIBackgroundModes met waarde fetch toe. Dit is een verplichte stap: zonder dit krijgt de app geen aanroep van performFetchWithCompletionHandler. De aanwezigheid kan worden gecontroleerd via P list Source of Build Settings.

Codevoorbeelden van Background Fetch in Swift

Laten we de volledige implementatie van Background Fetch voor een nieuwsapp bekijken. De implementatie omvat het downloaden van gegevens, caching en het aanroepen van de completion handler. De code wordt uitgevoerd in AppDelegate — de enige plaats waar het systeem fetch aanroept.

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

Gedownloade gegevens cachen

Na het downloaden van gegevens via Background Fetch moeten ze worden opgeslagen in lokale opslag — CoreData, UserDefaults of File Manager. Bij het openen van de app moeten de gegevens al beschikbaar zijn. Gebruik CoreData met een achtergrondcontext voor threadveilig schrijven. Werk na het opslaan de UI bij in de hoofdthread.

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 testen

Gebruik voor testen de Simulator — selecteer Debug — Simulate Background Fetch in Xcode. Op een fysiek apparaat moet je wachten tot het systeem besluit fetch uit te voeren. Voor versnelling kun je het minimale interval op 1 minuut instellen, maar het systeem kan dit nog steeds negeren bij een laag batterijniveau.

Beperkingen en valkuilen

Background Fetch heeft een aantal beperkingen die belangrijk zijn om te overwegen bij het ontwerpen van de app-architectuur. Het belangrijkste — het systeem controleert volledig de frequentie van aanroepen en de ontwikkelaar kan deze niet garanderen. Zelfs met een ingesteld minimaal interval kan het systeem fetch urenlang niet aanroepen.

Beperking uitvoeringstijd

Het systeem geeft de app beperkte tijd om de taak uit te voeren — meestal tot 30 seconden. Als de app binnen deze tijd geen completion handler aanroept, beëindigt het systeem geforceerd het proces en verlaagt de frequentie van toekomstige wekkingen. Alle netwerkverzoeken moeten compact zijn — niet meer dan 1–2 per aanroep.

Afhankelijkheid van batterij

iOS houdt rekening met het batterijniveau bij het plannen van Background Fetch. Bij een niveau onder 20% daalt de wekfrequentie. Wanneer de Low Power Mode is ingeschakeld, kan het systeem achtergrondupdates voor alle apps volledig uitschakelen. De gebruiker kan ook Background App Refresh voor een specifieke app uitschakelen in de instellingen.

Netwerkbeperkingen

URLSession gestart vanuit Background Fetch werkt in de standaardmodus — zonder ondersteuning voor achtergrondsessies. Gebruik voor grote downloads URLSession met background configuration. Het systeem gaat door met downloaden zelfs na het beëindigen van fetch, maar de voortgang wordt niet bijgehouden tot de volgende wekking.

Migratie van Background Fetch naar BGTaskScheduler

Vanaf iOS 13 beveelt Apple BGTaskScheduler aan als vervanging voor Background Fetch. BGTaskScheduler biedt flexibelere planning, twee typen taken (refresh en processing) en registratie van taken met identifiers. De migratie omvat verschillende stappen en wordt aanbevolen voor alle nieuwe projecten.

Stapsgewijze migratie

Eerste stap — bepaal de taakidentifiers in Info.plist via de sleutel BGTaskSchedulerPermittedIdentifiers. Tweede — registreer taken in AppDelegate via BGTaskScheduler.shared.register. Derde — vervang de aanroep van performFetchWithCompletionHandler door de handler die is doorgegeven aan register. Vierde — roep submit aan om de taak te plannen.

swift
// Eerder (Background Fetch)
UIApplication.shared.setMinimumBackgroundFetchInterval(
    UIApplication.backgroundFetchIntervalMinimum
)

// Na migratie (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)

Voordelen van BGTaskScheduler

BGTaskScheduler biedt meer controle: BGProcessingTask voor langdurige operaties (tot 10 minuten), uitvoeringsvoorwaarden via requiresNetworkConnectivity en requiresExternalPower, expiration handler voor nette afsluiting. Het systeem analyseert ook het app-gebruik, maar de ontwikkelaar kan preciezere eisen stellen.

Wanneer Background Fetch behouden

Als de app iOS 12 en lager ondersteunt, blijft Background Fetch de enige optie voor periodieke updates. BGTaskScheduler is alleen beschikbaar vanaf iOS 13+. Gebruik in dit geval een wrapper: controleer de beschikbaarheid van BGTaskScheduler via if #available(iOS 13, *) en roep de juiste API aan.

Veelgestelde vragen

Hoe vaak roept iOS Background Fetch aan?

De exacte frequentie is niet gedocumenteerd en hangt af van het gedrag van de gebruiker. Het systeem analyseert hoe vaak de gebruiker de app opent en past de frequentie dienovereenkomstig aan. Gemiddeld kan fetch bij actief gebruik 1–3 keer per uur worden aangeroepen. Bij weinig gebruik — 1–2 keer per dag.

Waarom wordt mijn Background Fetch niet aangeroepen?

Controleer drie voorwaarden: Background Fetch capability is ingeschakeld in Xcode, minimumBackgroundFetchInterval is ingesteld en de gebruiker heeft Background App Refresh niet uitgeschakeld voor de app in de instellingen. Controleer ook of het apparaat niet in Low Power Mode staat en het batterijniveau boven 20% is.

Wat is het verschil tussen Background Fetch en BGAppRefreshTask?

Background Fetch — oude API (iOS 7), BGAppRefreshTask — nieuwe API (iOS 13+). BGAppRefreshTask biedt meer controle: expiration handler, herplanningsmogelijkheid en statuscontrole. Background Fetch is eenvoudiger te implementeren, maar minder flexibel. Apple raadt aan BGAppRefreshTask te gebruiken voor nieuwe projecten.

Kunnen grote bestanden worden gedownload via Background Fetch?

Wordt afgeraden. Background Fetch is beperkt in tijd (tot 30 seconden). Gebruik voor grote downloads URLSession met background configuration — het systeem gaat door met downloaden zelfs na het beëindigen van fetch. Alternatief — BGProcessingTask (iOS 13+), waar tot 10 minuten en oplaadvoorwaarden beschikbaar zijn.

Verbruikt Background Fetch batterij?

Ja, elke wekking verbruikt energie voor het inschakelen van de processor, initialisatie van de netwerkstack en het downloaden van gegevens. iOS optimaliseert de frequentie om de impact te minimaliseren. Bij correcte implementatie — alleen nieuwe gegevens downloaden, snelle aanroep van de completion handler — is de impact op de batterij minimaal.

Samenvatting

  • Background Fetch — iOS API voor periodiek downloaden van gegevens op de achtergrond, beschikbaar vanaf iOS 7 en aanbevolen om te vervangen door BGTaskScheduler.
  • Het systeem beheert de aanroepfrequentie door gebruikersgedrag te analyseren — de ontwikkelaar kan de wektijd niet garanderen.
  • Drie statussen van de completion handler — .newData, .noData, .failed — beïnvloeden de frequentie van toekomstige wekkingen van de app.
  • Beperking van 30 seconden — voer geen langdurige operaties of meerdere opeenvolgende netwerkverzoeken uit.
  • Capability is verplicht — Background Fetch in Xcode + instellen van minimumBackgroundFetchInterval in code.
  • BGTaskScheduler — moderne vervanger vanaf iOS 13+, met meer controle en twee typen taken.
  • Voor projecten die iOS 12 en lager ondersteunen, gebruik Background Fetch met controle op beschikbaarheid van BGTaskScheduler via if #available.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook