Background Fetch: apa itu, prinsip kerja dan konfigurasi pembaruan

Penulis: IT Sectr Diterbitkan: 2026-03-27 Waktu membaca: 8 mnt

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 — API iOS untuk pembaruan konten periodik di latar belakang.
  • Sistem mengelola frekuensi pembangunan berdasarkan analisis perilaku pengguna.
  • Interval minimum diatur melalui UIApplication.minimumBackgroundFetchInterval.
  • Keusangan — sejak iOS 13+ mekanisme dianggap legacy, direkomendasikan BGTaskScheduler.
  • Waktu eksekusi — hingga 30 detik, setelah itu sistem menghentikan tugas secara paksa.

Apa itu Background Fetch di iOS?

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.

Perbedaan dari notifikasi Push

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).

Tempat dalam ekosistem tugas latar belakang

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.

  • Background Fetch — periodik, dimulai oleh sistem, iOS 7+.
  • BGAppRefreshTask — periodik, dimulai oleh sistem, iOS 13+.
  • BGProcessingTask — tugas panjang, iOS 13+.
  • Silent Push — dimulai oleh server, iOS 7+.

Bagaimana cara kerja Background Fetch: arsitektur dan siklus hidup

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.

Proses eksekusi tugas

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.

Pengaruh completion handler pada frekuensi panggilan

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.

StatusArtiPengaruh
.newDataData berhasil diunduhFrekuensi dapat meningkat
.noDataPemeriksaan tidak memberikan data baruFrekuensi tetap sama
.failedKesalahan jaringan atau serverFrekuensi menurun

Konfigurasi Background Fetch di proyek Xcode

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.

Mengatur interval minimum

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.

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

Info.plist dan capability

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.

Contoh kode Background Fetch di Swift

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.

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

Menyimpan data yang diunduh ke cache

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.

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

Menguji Background Fetch

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.

Batasan dan jebakan

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.

Batasan waktu eksekusi

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.

Ketergantungan pada baterai

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.

Batasan jaringan

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.

Migrasi dari Background Fetch ke BGTaskScheduler

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.

Migrasi langkah demi langkah

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.

swift
// 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)

Kelebihan BGTaskScheduler

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.

Kapan tetap menggunakan Background Fetch

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

Seberapa sering iOS memanggil Background Fetch?

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.

Mengapa Background Fetch saya tidak dipanggil?

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%.

Apa perbedaan antara Background Fetch dan BGAppRefreshTask?

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.

Bisakah file besar diunduh melalui Background Fetch?

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.

Apakah Background Fetch menghabiskan baterai?

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

  • Background Fetch — API iOS untuk pengunduhan data periodik di latar belakang, tersedia sejak iOS 7 dan direkomendasikan untuk diganti dengan BGTaskScheduler.
  • Sistem mengelola frekuensi panggilan dengan menganalisis perilaku pengguna — pengembang tidak dapat menjamin waktu pembangunan.
  • Tiga status completion handler — .newData, .noData, .failed — mempengaruhi frekuensi pembangunan aplikasi di masa depan.
  • Batasan 30 detik — jangan menjalankan operasi panjang atau beberapa permintaan jaringan berturut-turut.
  • Capability wajib — Background Fetch di Xcode + pengaturan minimumBackgroundFetchInterval di kode.
  • BGTaskScheduler — pengganti modern sejak iOS 13+, memberikan lebih banyak kontrol dan dua jenis tugas.
  • Untuk proyek dengan dukungan iOS 12 dan lebih rendah, gunakan Background Fetch dengan pemeriksaan ketersediaan BGTaskScheduler melalui if #available.

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.

Diskusikan proyek

Baca juga