Background Fetch — mekanisme iOS yang secara periodik membangunkan aplikasi di latar belakang untuk mengunduh konten segar. Sistem menganalisis perilaku pengguna dan memilih jendela optimal untuk pembaruan. Menurut data Apple, 2026, aplikasi mendapatkan 30 hingga 120 detik untuk melakukan operasi, setelah itu sistem menangguhkan atau menghentikan proses.
Poin Penting
Background Fetch — adalah API iOS yang memungkinkan aplikasi menerima data segar secara periodik di latar belakang. Pertama kali diperkenalkan di iOS 7 bersama dengan mekanisme Background App Refresh. Tujuan utamanya — agar konten terkini saat pengguna membuka aplikasi, tanpa perlu menunggu pemuatan.
Notifikasi Push dimulai oleh server — ia mengirim sinyal ke perangkat, dan sistem memutuskan apakah akan membangunkan aplikasi atau tidak. Background Fetch dimulai oleh iOS sendiri berdasarkan pola penggunaan perangkat. Push lebih cocok untuk pesan mendesak, Fetch — untuk pembaruan konten terjadwal (berita, feed media sosial).
Background Fetch — salah satu dari beberapa mekanisme eksekusi latar belakang di iOS. BGAppRefreshTask (iOS 13+) melakukan tugas yang sama, tetapi dengan penjadwalan yang lebih fleksibel. Background Modes (audio, lokasi) — untuk operasi berkelanjutan. Silent Push — pembaruan yang dimulai oleh server. Fetch tetap relevan untuk proyek dengan dukungan iOS 12 dan lebih rendah.
iOS menggunakan algoritma machine learning untuk menentukan waktu optimal membangunkan aplikasi. Sistem menganalisis kapan pengguna biasanya membuka aplikasi, berapa lama menggunakannya, dan seberapa sering kembali. Berdasarkan data ini, iOS menghitung jendela untuk Background Fetch.
Ketika sistem memutuskan untuk membangunkan aplikasi, ia memanggil metode application(_:performFetchWithCompletionHandler:) di AppDelegate. Aplikasi harus mengunduh jumlah minimum data baru dan memanggil completion handler dengan salah satu dari tiga status: .newData (data diunduh), .noData (tidak ada data baru) atau .failed (kesalahan). Status mempengaruhi frekuensi pembangunan di masa depan.
Status .newData memberi tahu sistem bahwa pembaruan berguna — iOS dapat meningkatkan frekuensi pembangunan. .noData mengatakan tidak ada data — frekuensi tetap sama atau menurun. .failed menandakan masalah — sistem mengurangi frekuensi agar tidak menghabiskan baterai. Penekanan harus pada status yang jujur, bukan pada .newData paksa.
| Status | Arti | Pengaruh |
|---|---|---|
| .newData | Data berhasil diunduh | Frekuensi dapat meningkat |
| .noData | Pemeriksaan tidak memberikan data baru | Frekuensi tetap sama |
| .failed | Kesalahan jaringan atau server | Frekuensi menurun |
Untuk mengaktifkan Background Fetch perlu dilakukan dua langkah: aktifkan capability di Xcode dan atur interval minimum di kode. Capability ada di Target — Signing & Capabilities — Background Modes — centang Background Fetch. Tanpa langkah ini, sistem tidak akan membangunkan aplikasi.
Metode UIApplication.shared.setMinimumBackgroundFetchInterval mengatur waktu minimum dalam detik antara panggilan Fetch. Nilai UIApplication.backgroundFetchIntervalMinimum (sekitar 15 menit) memberi tahu sistem untuk membangunkan aplikasi sesering mungkin secara hemat energi. Mengatur interval di application(_:didFinishLaunchingWithOptions:) adalah praktik standar.
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey : Any]?
)-> Bool {
UIApplication.shared.setMinimumBackgroundFetchInterval(
UIApplication.backgroundFetchIntervalMinimum
)
return true
}
Saat mengaktifkan Background Fetch di Xcode, secara otomatis memperbarui Info.plist — menambahkan kunci UIBackgroundModes dengan nilai fetch. Ini adalah langkah wajib: tanpanya aplikasi tidak akan menerima panggilan performFetchWithCompletionHandler. Keberadaannya dapat diperiksa melalui P list Source atau Build Settings.
Mari kita lihat implementasi lengkap Background Fetch untuk aplikasi berita. Implementasi mencakup pengunduhan data, caching, dan pemanggilan completion handler. Kode dieksekusi di AppDelegate — satu-satunya tempat sistem memanggil 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()
}
Setelah mengunduh data melalui Background Fetch, data harus disimpan di penyimpanan lokal — CoreData, UserDefaults, atau File Manager. Saat aplikasi dibuka, data sudah harus tersedia. Gunakan CoreData dengan konteks latar belakang untuk penulisan thread-safe. Setelah menyimpan, perbarui UI di thread utama.
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()
}
}
Untuk pengujian gunakan Simulator — pilih Debug — Simulate Background Fetch di Xcode. Pada perangkat fisik, perlu menunggu hingga sistem memutuskan untuk melakukan fetch. Untuk mempercepat, Anda dapat mengatur interval minimum menjadi 1 menit, tetapi sistem tetap dapat mengabaikannya saat baterai rendah.
Background Fetch memiliki sejumlah batasan yang penting untuk dipertimbangkan saat merancang arsitektur aplikasi. Hal utama — sistem sepenuhnya mengontrol frekuensi panggilan dan pengembang tidak dapat menjaminnya. Bahkan dengan interval minimum yang ditetapkan, sistem mungkin tidak memanggil fetch selama berjam-jam.
Sistem mengalokasikan waktu terbatas untuk aplikasi menjalankan tugas — biasanya hingga 30 detik. Jika aplikasi tidak memanggil completion handler dalam waktu ini, sistem secara paksa menghentikan proses dan mengurangi frekuensi pembangunan di masa depan. Semua permintaan jaringan harus ringkas — tidak lebih dari 1–2 per panggilan.
iOS memperhitungkan tingkat daya baterai saat menjadwalkan Background Fetch. Saat level di bawah 20%, frekuensi pembangunan menurun. Saat mode Low Power Mode diaktifkan, sistem dapat sepenuhnya menonaktifkan pembaruan latar belakang untuk semua aplikasi. Pengguna juga dapat menonaktifkan Background App Refresh untuk aplikasi tertentu di pengaturan.
URLSession yang dijalankan dari Background Fetch beroperasi dalam mode standar — tanpa dukungan untuk sesi latar belakang. Untuk unduhan besar, gunakan URLSession dengan background configuration. Sistem akan melanjutkan unduhan bahkan setelah fetch selesai, tetapi kemajuan tidak akan dilacak hingga pembangunan berikutnya.
Mulai dari iOS 13, Apple merekomendasikan BGTaskScheduler sebagai pengganti Background Fetch. BGTaskScheduler menyediakan penjadwalan yang lebih fleksibel, dua jenis tugas (refresh dan processing), dan pendaftaran tugas dengan pengidentifikasi. Migrasi mencakup beberapa langkah dan direkomendasikan untuk semua proyek baru.
Langkah pertama — tentukan pengidentifikasi tugas di Info.plist melalui kunci BGTaskSchedulerPermittedIdentifiers. Kedua — daftarkan tugas di AppDelegate melalui BGTaskScheduler.shared.register. Ketiga — ganti panggilan performFetchWithCompletionHandler dengan handler yang diteruskan ke register. Keempat — panggil submit untuk menjadwalkan tugas.
// Sebelumnya (Background Fetch)
UIApplication.shared.setMinimumBackgroundFetchInterval(
UIApplication.backgroundFetchIntervalMinimum
)
// Setelah migrasi (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 memberikan lebih banyak kontrol: BGProcessingTask untuk operasi panjang (hingga 10 menit), kondisi eksekusi melalui requiresNetworkConnectivity dan requiresExternalPower, expiration handler untuk penghentian yang lancar. Sistem juga menganalisis penggunaan aplikasi, tetapi pengembang dapat menetapkan persyaratan yang lebih tepat.
Jika aplikasi mendukung iOS 12 dan lebih rendah, Background Fetch tetap menjadi satu-satunya pilihan untuk pembaruan periodik. BGTaskScheduler hanya tersedia sejak iOS 13+. Dalam hal ini, gunakan pembungkus: periksa ketersediaan BGTaskScheduler melalui if #available(iOS 13, *) dan panggil API yang sesuai.
Pertanyaan yang Sering Diajukan
Frekuensi pasti tidak didokumentasikan dan tergantung pada perilaku pengguna. Sistem menganalisis seberapa sering pengguna membuka aplikasi dan menyesuaikan frekuensinya. Rata-rata, dengan penggunaan aktif, fetch dapat dipanggil 1–3 kali per jam. Dengan penggunaan jarang — 1–2 kali per hari.
Periksa tiga kondisi: Background Fetch capability diaktifkan di Xcode, minimumBackgroundFetchInterval diatur, dan pengguna tidak menonaktifkan Background App Refresh untuk aplikasi di pengaturan. Juga periksa apakah perangkat tidak dalam Low Power Mode dan tingkat baterai di atas 20%.
Background Fetch — API lama (iOS 7), BGAppRefreshTask — API baru (iOS 13+). BGAppRefreshTask memberikan kontrol lebih: expiration handler, kemampuan penjadwalan ulang, dan pemeriksaan status. Background Fetch lebih sederhana dalam implementasi, tetapi kurang fleksibel. Apple merekomendasikan menggunakan BGAppRefreshTask untuk proyek baru.
Tidak disarankan. Background Fetch terbatas waktu (hingga 30 detik). Untuk unduhan besar, gunakan URLSession dengan background configuration — sistem akan melanjutkan unduhan bahkan setelah fetch selesai. Alternatif — BGProcessingTask (iOS 13+), di mana tersedia hingga 10 menit dan kondisi pengisian daya.
Ya, setiap pembangunan menghabiskan energi untuk menyalakan prosesor, menginisialisasi tumpukan jaringan, dan mengunduh data. iOS mengoptimalkan frekuensi untuk meminimalkan dampak. Dengan implementasi yang benar — hanya mengunduh data baru, panggilan cepat completion handler — dampak pada baterai minimal.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga