Background Fetch: ano ito, prinsipyo ng paggawa at configuration ng mga update

May-akda: IT Sectr Nai-publish: 2026-03-27 Oras ng pagbabasa: 8 min

Background Fetch — mekanismo ng iOS na pana-panahong gumigising ng app sa background para mag-download ng sariwang content. Sinusuri ng system ang pag-uugali ng user at pinipili ang mga optimal na window para sa update. Ayon sa datos ng Apple, 2026, ang app ay nakakakuha ng 30 hanggang 120 segundo para isagawa ang operasyon, pagkatapos ay sinuspinde o tinatapos ng system ang proseso.

Mga Pangunahing Punto

  • Background Fetch — iOS API para sa pana-panahong pag-update ng content sa background.
  • System ang namamahala sa dalas ng paggising batay sa pagsusuri ng pag-uugali ng user.
  • Minimum na interval ay itinatakda sa pamamagitan ng UIApplication.minimumBackgroundFetchInterval.
  • Pagkaluma — mula iOS 13+ ang mekanismo ay itinuturing na legacy, inirerekomenda ang BGTaskScheduler.
  • Oras ng pag-execute — hanggang 30 segundo, pagkatapos ay sapilitang tinatapos ng system ang gawain.

Ano ang Background Fetch sa iOS?

Background Fetch — ay isang iOS API na nagpapahintulot sa app na pana-panahong makatanggap ng sariwang data sa background. Unang ipinakilala sa iOS 7 kasama ng mekanismong Background App Refresh. Ang pangunahing layunin — upang ang content ay napapanahon sa sandaling buksan ng user ang app, nang hindi kailangang maghintay ng pag-load.

Pagkakaiba sa mga notification ng Push

Ang mga notification ng Push ay pinapasimulan ng server — nagpapadala ito ng signal sa device, at nagpapasya ang system kung gigisingin ang app o hindi. Ang Background Fetch ay pinapasimulan ng iOS mismo batay sa mga pattern ng paggamit ng device. Ang Push ay mas angkop para sa mga agarang mensahe, Fetch — para sa naka-iskedyul na pag-update ng content (balita, social media feed).

Lugar sa ecosystem ng mga background na gawain

Background Fetch — isa sa ilang mga mekanismo ng pag-execute sa background sa iOS. BGAppRefreshTask (iOS 13+) ay gumaganap ng parehong gawain, ngunit may mas flexible na pag-iskedyul. Background Modes (audio, lokasyon) — para sa tuloy-tuloy na operasyon. Silent Push — update na pinapasimulan ng server. Fetch ay nananatiling nauugnay para sa mga proyektong sumusuporta sa iOS 12 at mas mababa.

  • Background Fetch — pana-panahon, pinapasimulan ng system, iOS 7+.
  • BGAppRefreshTask — pana-panahon, pinapasimulan ng system, iOS 13+.
  • BGProcessingTask — mahabang gawain, iOS 13+.
  • Silent Push — pinapasimulan ng server, iOS 7+.

Paano gumagana ang Background Fetch: arkitektura at lifecycle

iOS ay gumagamit ng machine learning algorithm para matukoy ang optimal na oras ng paggising ng app. Sinusuri ng system kung kailan karaniwang binubuksan ng user ang app, gaano katagal ito ginagamit, at gaano kadalas bumabalik. Batay sa data na ito, kinakalkula ng iOS ang mga window para sa Background Fetch.

Proseso ng pag-execute ng gawain

Kapag nagpasya ang system na gisingin ang app, tinatawag nito ang method na application(_:performFetchWithCompletionHandler:) sa AppDelegate. Ang app ay dapat mag-download ng minimum na dami ng bagong data at tawagan ang completion handler na may isa sa tatlong status: .newData (na-download ang data), .noData (walang bagong data) o .failed (error). Ang status ay nakakaapekto sa dalas ng paggising sa hinaharap.

Epekto ng completion handler sa dalas ng tawag

Ang status na .newData ay nagpapaalam sa system na ang update ay naging kapaki-pakinabang — maaaring dagdagan ng iOS ang dalas ng paggising. Ang .noData ay nagsasabing walang data — ang dalas ay nananatiling pareho o bumababa. Ang .failed ay nagpapahiwatig ng problema — binabawasan ng system ang dalas upang hindi masayang ang baterya. Ang diin ay dapat sa tapat na status, hindi sa sapilitang .newData.

StatusKahuluganEpekto
.newDataMatagumpay na na-download ang dataMaaaring tumaas ang dalas
.noDataAng pagsusuri ay walang bagong dataNananatiling pareho ang dalas
.failedError sa network o serverBumababa ang dalas

Configuration ng Background Fetch sa Xcode project

Para paganahin ang Background Fetch kailangan gawin ang dalawang hakbang: i-activate ang capability sa Xcode at itakda ang minimum na interval sa code. Ang capability ay nasa Target — Signing & Capabilities — Background Modes — lagyan ng check ang Background Fetch. Kung wala ang hakbang na ito, hindi gigisingin ng system ang app.

Pagtatakda ng minimum na interval

Ang method na UIApplication.shared.setMinimumBackgroundFetchInterval ay nagtatakda ng minimum na oras sa segundo sa pagitan ng mga tawag ng Fetch. Ang value na UIApplication.backgroundFetchIntervalMinimum (humigit-kumulang 15 minuto) ay nagtuturo sa system na gisingin ang app nang madalas hangga't energy-efficient. Ang pagtatakda ng interval sa application(_:didFinishLaunchingWithOptions:) ay standard na kasanayan.

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

Info.plist at capability

Kapag pinagana ang Background Fetch sa Xcode, awtomatiko itong nag-a-update ng Info.plist — nagdaragdag ng key na UIBackgroundModes na may value na fetch. Ito ay isang mandatoryong hakbang: kung wala ito, hindi makakatanggap ang app ng tawag na performFetchWithCompletionHandler. Maaaring suriin ang presensya sa pamamagitan ng P list Source o Build Settings.

Mga halimbawa ng code ng Background Fetch sa Swift

Tingnan natin ang buong implementasyon ng Background Fetch para sa isang news app. Kasama sa implementasyon ang pag-download ng data, caching, at pagtawag ng completion handler. Ang code ay na-execute sa AppDelegate — ang tanging lugar kung saan tinatawag ng system ang fetch.

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

Pag-cache ng na-download na data

Pagkatapos i-download ang data sa pamamagitan ng Background Fetch, kailangan itong i-save sa lokal na storage — CoreData, UserDefaults, o File Manager. Sa pagbukas ng app, ang data ay dapat na available na. Gamitin ang CoreData na may background context para sa thread-safe na pagsusulat. Pagkatapos mag-save, i-update ang UI sa main thread.

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

Pag-test ng Background Fetch

Para sa pag-test gamitin ang Simulator — piliin ang Debug — Simulate Background Fetch sa Xcode. Sa isang physical device, kailangan maghintay hanggang magpasya ang system na mag-execute ng fetch. Para mapabilis, maaari mong itakda ang minimum na interval sa 1 minuto, ngunit maaari pa rin itong balewalain ng system kapag mababa ang baterya.

Mga limitasyon at pitfalls

Background Fetch ay may ilang mga limitasyon na mahalagang isaalang-alang kapag nagdidisenyo ng arkitektura ng app. Ang pangunahing — ganap na kinokontrol ng system ang dalas ng mga tawag at hindi ito magagarantiya ng developer. Kahit na may itinakdang minimum na interval, maaaring hindi tumawag ng fetch ang system nang maraming oras.

Limitasyon sa oras ng pag-execute

Ang system ay naglalaan ng limitadong oras para sa app upang isagawa ang gawain — karaniwan hanggang 30 segundo. Kung hindi tinawagan ng app ang completion handler sa oras na ito, sapilitang tinatapos ng system ang proseso at binabawasan ang dalas ng paggising sa hinaharap. Lahat ng network request ay dapat compact — hindi hihigit sa 1–2 bawat tawag.

Pagdepende sa baterya

Isinasaalang-alang ng iOS ang antas ng charge ng baterya kapag nag-iiskedyul ng Background Fetch. Kapag ang antas ay mas mababa sa 20%, bumababa ang dalas ng paggising. Kapag naka-on ang Low Power Mode, maaaring ganap na i-off ng system ang mga background update para sa lahat ng app. Maaari ring i-off ng user ang Background App Refresh para sa isang partikular na app sa mga setting.

Mga limitasyon sa network

Ang URLSession na inilunsad mula sa Background Fetch ay gumagana sa standard mode — walang suporta para sa mga background session. Para sa malalaking download, gamitin ang URLSession na may background configuration. Ipagpapatuloy ng system ang pag-download kahit matapos ang fetch, ngunit hindi susubaybayan ang progress hanggang sa susunod na paggising.

Paglipat mula Background Fetch patungong BGTaskScheduler

Simula sa iOS 13, inirerekomenda ng Apple ang BGTaskScheduler bilang kapalit ng Background Fetch. Ang BGTaskScheduler ay nagbibigay ng mas flexible na pag-iskedyul, dalawang uri ng gawain (refresh at processing), at pagpaparehistro ng mga gawain na may mga identifier. Ang paglipat ay may kasamang ilang hakbang at inirerekomenda para sa lahat ng bagong proyekto.

Hakbang-hakbang na paglipat

Unang hakbang — tukuyin ang mga task identifier sa Info.plist sa pamamagitan ng key na BGTaskSchedulerPermittedIdentifiers. Ikalawa — irehistro ang mga gawain sa AppDelegate sa pamamagitan ng BGTaskScheduler.shared.register. Ikatlo — palitan ang tawag sa performFetchWithCompletionHandler ng handler na ipinasa sa register. Ikaapat — tawagan ang submit para i-iskedyul ang gawain.

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

// Pagkatapos ng paglipat (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)

Mga bentahe ng BGTaskScheduler

Ang BGTaskScheduler ay nagbibigay ng mas maraming kontrol: BGProcessingTask para sa mahabang operasyon (hanggang 10 minuto), mga kondisyon ng pag-execute sa pamamagitan ng requiresNetworkConnectivity at requiresExternalPower, expiration handler para sa maayos na pagtatapos. Sinusuri rin ng system ang paggamit ng app, ngunit ang developer ay maaaring magtakda ng mas tiyak na mga kinakailangan.

Kailan panatilihin ang Background Fetch

Kung ang app ay sumusuporta sa iOS 12 at mas mababa, ang Background Fetch ay nananatiling tanging opsyon para sa pana-panahong pag-update. Ang BGTaskScheduler ay available lamang mula sa iOS 13+. Sa kasong ito, gumamit ng wrapper: suriin ang availability ng BGTaskScheduler sa pamamagitan ng if #available(iOS 13, *) at tawagan ang kaukulang API.

Mga Madalas Itanong

Gaano kadalas tinatawag ng iOS ang Background Fetch?

Ang eksaktong dalas ay hindi dokumentado at nakadepende sa pag-uugali ng user. Sinusuri ng system kung gaano kadalas binubuksan ng user ang app at inaayos ang dalas nang naaayon. Sa karaniwan, sa aktibong paggamit, ang fetch ay maaaring tawagin ng 1–3 beses kada oras. Sa madalang na paggamit — 1–2 beses kada araw.

Bakit hindi tinatawag ang aking Background Fetch?

Suriin ang tatlong kondisyon: Background Fetch capability ay naka-on sa Xcode, nakatakda ang minimumBackgroundFetchInterval, at hindi na-off ng user ang Background App Refresh para sa app sa mga setting. Suriin din na ang device ay wala sa Low Power Mode at ang antas ng baterya ay higit sa 20%.

Ano ang pagkakaiba ng Background Fetch at BGAppRefreshTask?

Background Fetch — lumang API (iOS 7), BGAppRefreshTask — bagong API (iOS 13+). Ang BGAppRefreshTask ay nagbibigay ng mas maraming kontrol: expiration handler, kakayahang mag-reschedule, at status checking. Ang Background Fetch ay mas simple sa implementasyon, ngunit hindi gaanong flexible. Inirerekomenda ng Apple ang paggamit ng BGAppRefreshTask para sa mga bagong proyekto.

Maaari bang mag-download ng malalaking file sa pamamagitan ng Background Fetch?

Hindi inirerekomenda. Background Fetch ay limitado sa oras (hanggang 30 segundo). Para sa malalaking download, gamitin ang URLSession na may background configuration — ipagpapatuloy ng system ang pag-download kahit matapos ang fetch. Alternatibo — BGProcessingTask (iOS 13+), kung saan available ang hanggang 10 minuto at mga kondisyon sa pag-charge.

Kumokonsumo ba ng baterya ang Background Fetch?

Oo, ang bawat paggising ay kumokonsumo ng enerhiya para i-on ang processor, i-initialize ang network stack, at mag-download ng data. Ino-optimize ng iOS ang dalas upang mabawasan ang epekto. Sa tamang implementasyon — pag-download lamang ng bagong data, mabilis na pagtawag ng completion handler — ang epekto sa baterya ay minimal.

Buod

  • Background Fetch — iOS API para sa pana-panahong pag-download ng data sa background, magagamit mula iOS 7 at inirerekomendang palitan ng BGTaskScheduler.
  • System ang namamahala sa dalas ng tawag sa pamamagitan ng pagsusuri ng pag-uugali ng user — hindi magagarantiya ng developer ang oras ng paggising.
  • Tatlong status ng completion handler — .newData, .noData, .failed — nakakaapekto sa dalas ng paggising ng app sa hinaharap.
  • Limitasyon ng 30 segundo — huwag mag-execute ng mahabang operasyon o maraming sunod-sunod na network request.
  • Capability ay mandatory — Background Fetch sa Xcode + pagtatakda ng minimumBackgroundFetchInterval sa code.
  • BGTaskScheduler — modernong kapalit mula iOS 13+, nagbibigay ng mas maraming kontrol at dalawang uri ng gawain.
  • Para sa mga proyektong sumusuporta sa iOS 12 at mas mababa, gamitin ang Background Fetch na may pagsusuri ng availability ng BGTaskScheduler sa pamamagitan ng if #available.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din