Background Modes — adalah sekumpulan kemampuan iOS yang dapat dideklarasikan yang memungkinkan aplikasi untuk terus menjalankan kode setelah beralih ke mode latar belakang. Setiap mode sesuai dengan jenis tugas tertentu: audio, geolokasi, VoIP, Bluetooth, fetch dan processing. Menurut Apple, 2026, penggunaan Background Modes yang tidak tepat adalah salah satu penyebab umum penolakan aplikasi saat peninjauan di App Store.
Poin Utama
Background Modes — adalah capability proyek Xcode yang mendeklarasikan niat aplikasi untuk melakukan jenis operasi latar belakang tertentu. Tidak seperti Android, di mana aplikasi dapat menjalankan Service apa pun di latar belakang, iOS memerlukan penentuan mode secara eksplisit di Info.plist. Setiap mode memiliki aturan penggunaan yang ketat dan diperiksa oleh Apple saat peninjauan.
Ketika aplikasi beralih ke latar belakang, iOS akan menangguhkannya setelah 3–5 detik. Jika aplikasi mendeklarasikan Background Mode dan secara aktif menggunakan API yang sesuai (misalnya AVAudioSession untuk audio), sistem akan memindahkannya ke mode eksekusi khusus. Aplikasi tetap di memori RAM dan dapat menjalankan kode yang dibatasi oleh jenis mode.
iOS mendukung Background Modes berikut: Audio, Location, VoIP, Bluetooth LE, Background Fetch, Background Processing, External Accessory Communication, Push to Talk (PTT) dan HealthKit. Setiap mode memerlukan justifikasi dalam deskripsi aplikasi.
| Mode | Kunci Info.plist | Tujuan | Versi iOS |
|---|---|---|---|
| Audio | audio | Audio latar belakang, AirPlay | 4.0+ |
| Location | location | Pelacakan lokasi | 4.0+ |
| VoIP | voip | Notifikasi Push VoIP | 4.0+ |
| BLE | bluetooth-central | Bekerja dengan perangkat BLE | 7.0+ |
| Fetch | fetch | Pengambilan data periodik | 7.0+ |
| Processing | processing | Tugas latar belakang panjang | 13.0+ |
| Push to Talk | push-to-talk | Push to Talk suara | 16.0+ |
Audio Background Mode — mode yang paling umum, digunakan oleh pemutar musik, aplikasi podcast dan layanan audio. Aplikasi dapat melanjutkan pemutaran suara, dikendalikan melalui Control Center dan ditampilkan di Lock Screen. Untuk aktivasi, cukup konfigurasikan AVAudioSession dengan kategori .playback.
Untuk audio latar belakang, Anda perlu mengonfigurasi AVAudioSession dan mengaktifkannya. Kategori .playback memberi tahu sistem bahwa aplikasi memutar suara dan harus tetap aktif di latar belakang. Tanpa konfigurasi ini, suara akan berhenti dalam 5–10 detik setelah aplikasi diminimalkan.
import AVFoundation
func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(
.playback,
mode: .default,
options: []
)
try session.setActive(true)
} catch {
print("Kesalahan sesi audio: \(error)")
}
}
Untuk integrasi dengan Control Center dan Lock Screen, Anda perlu mengonfigurasi MPRemoteCommandCenter. Ini memproses perintah Play, Pause, Next dan Previous Track. Juga perlu memperbarui MPNowPlayingInfoProperty untuk menampilkan metadata: judul lagu, artis, sampul dan progres pemutaran.
Mulai iOS 14, Background Mode audio juga mendukung Picture in Picture untuk video. Aplikasi dapat terus menampilkan video di jendela mengambang saat diminimalkan. Untuk aktivasi, gunakan AVPictureInPictureController dengan AVPlayerLayer. Mode hanya berfungsi jika aplikasi memutar trek audio.
Location Background Mode memungkinkan aplikasi menerima pembaruan geolokasi di latar belakang. Digunakan di navigator, pelacak kebugaran, aplikasi pengiriman dan jejaring sosial. Tanpa mode ini, aplikasi hanya menerima lokasi satu kali saat beralih ke latar belakang, setelah itu pembaruan berhenti.
CLLocationManager mendukung beberapa strategi pelacakan: perubahan signifikan (significant-change location), pelacakan standar (standard location) dan pemantauan wilayah (region monitoring). Untuk kerja latar belakang dengan presisi maksimum, gunakan allowsBackgroundLocationUpdates = true dan pausesLocationUpdatesAutomatically = false.
Pelacakan lokasi terus-menerus di latar belakang adalah salah satu skenario yang paling boros energi. iOS secara otomatis menyesuaikan frekuensi pembaruan berdasarkan kecepatan gerakan: saat berjalan setiap 10–30 detik, saat mengemudi setiap 1–5 detik. Untuk navigasi, gunakan desiredAccuracy = kCLLocationAccuracyBestForNavigation.
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()
Mode significant-change location bekerja tanpa Location Background Mode — sistem membangunkan aplikasi hanya saat perubahan koordinat yang signifikan (biasanya 500 m atau lebih). Tidak memerlukan GPS terus-menerus, yang menghemat baterai. Cocok untuk aplikasi cuaca yang memperbarui data saat pengguna bergerak.
Bluetooth LE Background Mode memungkinkan aplikasi berinteraksi dengan perangkat BLE di latar belakang. Digunakan oleh gelang kebugaran, sensor medis, perangkat Smart Home dan navigasi Beacon. Mode ini terbagi menjadi dua subtipe: bluetooth-central (aplikasi terhubung ke perangkat) dan bluetooth-peripheral (aplikasi bertindak sebagai perangkat).
Aplikasi dalam peran Central dapat memindai dan terhubung ke perangkat BLE di latar belakang. Untuk ini, Anda perlu menentukan bluetooth-central di Background Modes dan memanggil CBCentralManager.scanForPeripherals dengan opsi CBCentralManagerScanOptionAllowDuplicatesKey. Di latar belakang, pemindaian bekerja dengan frekuensi lebih rendah — sistem dapat menunda deteksi untuk menghemat energi.
Aplikasi dalam peran Peripheral dapat mengiklankan layanan dan merespons permintaan perangkat lain. Mode bluetooth-peripheral memungkinkan aplikasi tetap terlihat oleh perangkat BLE lain bahkan di latar belakang. Digunakan dalam aplikasi HealthKit dan solusi IoT.
Pemantauan iBeacon bekerja di latar belakang tanpa izin tambahan — sistem sendiri melacak masuk dan keluar dari wilayah Beacon. Namun untuk memindai konten Beacon (proximity UUID, major, minor) diperlukan izin Bluetooth dan bluetooth-central Background Mode. Gunakan CLLocationManager dengan CLBeaconRegion untuk pemantauan.
VoIP Background Mode ditujukan untuk aplikasi komunikasi suara (Skype, Zoom, WhatsApp). Mode ini memungkinkan aplikasi tetap terhubung ke server untuk menerima panggilan masuk. Mulai iOS 8, untuk VoIP digunakan PushKit — framework yang memproses notifikasi Push dari server VoIP tanpa keterlibatan APNs.
PushKit adalah satu-satunya mekanisme yang menjamin pengiriman notifikasi VoIP ke perangkat. Setelah menerima notifikasi PushKit, sistem membangunkan aplikasi, bahkan jika aplikasi telah dihentikan. Aplikasi harus terhubung ke server dalam 30 detik dan menampilkan notifikasi lokal tentang panggilan masuk.
import PushKit
class VoIPHandler: NSObject, PKPushRegistryDelegate {
func pushRegistry(
_ registry: PKPushRegistry,
didReceiveIncomingPushWith payload: PKPushPayload,
for type: PKPushType,
completion: @escaping () -> Void
) {
let caller = payload.dictionaryPayload["caller"] as! String
reportIncomingCall(from: caller)
completion()
}
}
PushKit tidak dapat digunakan untuk notifikasi biasa — hanya untuk VoIP, komunikasi watchOS dan penyedia file. Apple memeriksa ini saat peninjauan. Jika digunakan tidak semestinya, aplikasi ditolak. Mulai iOS 13, PushKit hanya mengirimkan notifikasi — pemanggilan CXProvider (CallKit) untuk menampilkan layar panggilan wajib dilakukan.
Background Fetch dan Background Processing — mode untuk memperbarui konten di latar belakang dan menjalankan tugas panjang. Fetch — pembaruan periodik pendek (hingga 30 dtk), Processing — tugas panjang (hingga 10 mnt) dengan kondisi (Wi-Fi, pengisian daya). Processing hanya tersedia dari iOS 13+.
Mode Fetch memungkinkan sistem untuk secara periodik membangunkan aplikasi guna mengambil konten baru. Sistem menganalisis perilaku pengguna dan memilih waktu yang optimal. Aplikasi harus memanggil completion handler dalam 30 detik. Fetch cocok untuk aplikasi berita, feed media sosial dan cuaca.
BGProcessingTask ditujukan untuk tugas yang dapat dilakukan tanpa partisipasi pengguna: membersihkan cache, menyinkronkan basis data besar, memproses file media. Sistem menjalankan tugas hanya dalam kondisi yang menguntungkan — perangkat sedang diisi daya, terhubung ke Wi-Fi, tidak dalam mode Low Power. Tersedia hingga 10 menit.
Untuk BGProcessingTask, Anda perlu menentukan requiresExternalPower dan requiresNetworkConnectivity. Sistem dapat menunda eksekusi untuk waktu yang tidak terbatas jika kondisi tidak terpenuhi. Tidak seperti BGAppRefreshTask yang harus dijalankan setidaknya sekali sehari, Processing mungkin tidak dijalankan selama berminggu-minggu jika perangkat jarang diisi daya.
Apple secara ketat memeriksa penggunaan Background Modes saat meninjau aplikasi. Aturan utama: setiap mode yang diaktifkan harus dibenarkan oleh fungsionalitas aplikasi. Jika aplikasi mendeklarasikan Location Mode tetapi tidak menggunakan geolokasi, aplikasi akan ditolak dengan permintaan untuk menghapus capability.
Pelanggaran paling umum: Location Mode tanpa kebutuhan yang jelas (aplikasi meminta akses “Always” untuk menampilkan iklan), Audio Mode tanpa pemutaran suara di latar belakang, VoIP tanpa PushKit, BLE Mode tanpa perangkat Bluetooth. Apple dapat menolak aplikasi bahkan pada tahap pembaruan jika mode tidak lagi digunakan.
Saat mengirimkan untuk peninjauan, berikan di Notes justifikasi konkret untuk setiap mode. Misalnya, “Location Background Mode digunakan untuk melacak rute pengguna dalam fungsi kebugaran”. Tanpa penjelasan, peninjau dapat menolak aplikasi. Untuk fungsi rahasia (VoIP), Apple dapat meminta akun uji coba.
Gunakan set mode minimal yang diperlukan. Jika aplikasi perlu memuat data di latar belakang sekali per jam — jangan aktifkan Location Mode, gunakan Fetch atau BGAppRefreshTask. Mode berlebihan tidak hanya menyebabkan penolakan, tetapi juga menciptakan kesan negatif: pengguna melihat di pengaturan bahwa aplikasi menggunakan geolokasi di latar belakang.
Pertanyaan Umum
Tidak ada batasan jumlah, tetapi setiap mode harus dibenarkan oleh fungsionalitas aplikasi. Mengaktifkan semua mode tanpa kebutuhan adalah penyebab pasti penolakan saat peninjauan. Batasan praktis adalah 2–3 mode per aplikasi, jika tidak pengguna akan melihat banyak permintaan izin.
Gunakan UIApplication.shared.applicationState — aplikasi dapat memeriksa apakah berada di latar belakang (state == .background). Juga dapat melacak notifikasi UIApplication.didEnterBackgroundNotification dan willEnterForegroundNotification untuk mengubah perilaku.
Audio — pemutaran suara melalui speaker atau headphone. AirPlay — transmisi audio dan video ke Apple TV dan perangkat AirPlay lainnya. Dalam praktiknya, Audio Mode mencakup kedua skenario karena AirPlay menggunakan sesi audio. Mode AirPlay terpisah tidak diperlukan sejak iOS 7+.
Ya, untuk ini gunakan requestWhenInUseAuthorization() alih-alih requestAlwaysAuthorization(). Aplikasi hanya akan menerima lokasi di latar depan. Jika diperlukan pelacakan jangka pendek di latar belakang — panggil startUpdatingLocation() dan hentikan di willResignActive.
Setiap mode meningkatkan konsumsi energi. Location Mode — yang paling mahal, dapat mengurangi waktu kerja hingga 30–50% saat pelacakan terus-menerus. Audio Mode — sedang (15–20%). Fetch dan Processing — minimal (2–5%). BLE Mode — rendah (5–10%) berkat efisiensi energi Bluetooth LE.
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