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 — 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.
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).
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.
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.
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.
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.
| Status | Kahulugan | Epekto |
|---|---|---|
| .newData | Matagumpay na na-download ang data | Maaaring tumaas ang dalas |
| .noData | Ang pagsusuri ay walang bagong data | Nananatiling pareho ang dalas |
| .failed | Error sa network o server | Bumababa ang dalas |
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.
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.
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey : Any]?
)-> Bool {
UIApplication.shared.setMinimumBackgroundFetchInterval(
UIApplication.backgroundFetchIntervalMinimum
)
return true
}
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.
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.
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()
}
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.
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()
}
}
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.
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.
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.
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.
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.
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.
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.
// 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)
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.
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
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.
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%.
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.
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.
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
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.
Basahin din