NWPathMonitor: apa itu, pelacakan jaringan dan bekerja di iOS

Penulis: IT Sectr Diterbitkan: 2026-03-10 Waktu membaca: 9 mnt

NWPathMonitor — kelas dari framework Network di iOS dan macOS untuk memantau status jalur jaringan perangkat. Menurut Apple Developer Documentation (2025), NWPathMonitor memungkinkan aplikasi melacak ketersediaan jaringan, menentukan jenis antarmuka, dan bereaksi terhadap perubahan koneksi. NWPathMonitor menyediakan informasi tentang jenis koneksi, biaya lalu lintas, dan ketersediaan internet melalui callback yang nyaman dengan NWPath.

Poin Utama

  • NWPathMonitor — kelas framework Network untuk pemantauan jalur jaringan asinkron di iOS dan macOS.
  • NWPath berisi informasi tentang ketersediaan jaringan, jenis antarmuka (Wi-Fi, data seluler, Ethernet) dan status biaya.
  • Metode start memulai pemantauan pada antrean dispatch queue yang ditentukan, metode cancel menghentikannya.
  • Properti pathUpdateHandler — closure yang dipanggil setiap kali status jalur jaringan berubah.
  • NWPathMonitor mendukung pemfilteran berdasarkan jenis antarmuka yang diperlukan melalui parameter requiredInterfaceType.

Apa itu NWPathMonitor?

NWPathMonitor — adalah kelas dari framework Network, diperkenalkan oleh Apple di iOS 12 dan macOS 10.14 Mojave. Ini menyediakan API modern untuk melacak perubahan jalur jaringan perangkat — kombinasi antarmuka jaringan yang dilalui lalu lintas aplikasi.

Sebelum iOS 12, untuk pemantauan jaringan digunakan pustaka Reachability, yang dibangun di atas framework C SystemConfiguration. NWPathMonitor adalah alternatif native Swift dengan API yang lebih kaya, dukungan untuk jenis koneksi modern (VPN, multipath, LTE, 5G) dan kerja bawaan dengan GCD.

Perbedaan utama antara NWPathMonitor dan Reachability — objek NWPath tidak hanya memberikan status biner “tersedia/tidak tersedia”, tetapi gambaran lengkap tentang jalur: antarmuka yang digunakan, prioritasnya, biaya, status roaming, dan kemungkinan proxy dan VPN. Pengembang menerima informasi lengkap untuk mengambil keputusan tentang permintaan jaringan.

Sejarah kemunculan framework Network

Framework Network muncul sebagai pengganti modern untuk API C tingkat rendah — CFStream dan BSD Sockets. Ini menyediakan antarmuka terpadu untuk komunikasi jaringan di semua platform Apple, termasuk watchOS dan tvOS. NWPathMonitor adalah bagian dari framework ini bersama dengan NWConnection, NWListener, dan NWBrowser.

Framework Network ditulis dalam Swift dan menggunakan GCD untuk pemrosesan asinkron. Ini berarti callback NWPathMonitor dieksekusi pada dispatch queue yang ditentukan, berintegrasi dengan arsitektur multi-threading aplikasi yang ada tanpa manajemen thread manual.

Cara menggunakan NWPathMonitor di aplikasi

Penggunaan NWPathMonitor dimulai dengan membuat instance kelas dan mengonfigurasi handler pathUpdateHandler. Kemudian metode start dipanggil dengan menentukan dispatch queue tempat closure akan dijalankan. Penghentian pemantauan dilakukan dengan metode cancel, yang juga membebaskan sumber daya.

swift
import Network

class NetworkMonitor {
    private let monitor = NWPathMonitor()
    private let queue = DispatchQueue("monitor")

    func startMonitoring() {
        monitor.pathUpdateHandler = { path in
            if path.status == .satisfied {
                print("Jaringan tersedia")
            } else {
                print("Jaringan tidak tersedia")
            }
        }
        monitor.start(on: queue)
    }

    func stopMonitoring() {
        monitor.cancel()
    }
}

Bekerja dengan jenis antarmuka

NWPathMonitor dapat dikonfigurasi untuk melacak hanya jenis antarmuka tertentu. Untuk ini digunakan inisialisasi NWPathMonitor(requiredInterfaceType:) dengan parameter NWInterface.InterfaceType — .wifi, .cellular, .wiredEthernet atau .loopback. Jika jenis tidak ditentukan, pemantauan dilakukan untuk semua antarmuka.

Contoh praktis: aplikasi streaming dapat melacak hanya Wi-Fi dan memperingatkan pengguna tentang peralihan ke data seluler. Pemeriksaan isConstrained dan isExpensive di NWPath memungkinkan menentukan apakah koneksi saat ini ditagih atau dibatasi kecepatannya.

Siklus hidup pemantauan

Pemantauan harus dimulai saat aplikasi dimulai atau saat masuk ke latar depan dan dihentikan saat masuk ke latar belakang. Disarankan untuk membuat satu instance NWPathMonitor untuk seluruh aplikasi (singleton) dan menggunakannya dari berbagai modul melalui protokol atau lapisan layanan.

Properti dan kemampuan NWPath

NWPath — objek yang diteruskan ke pathUpdateHandler, yang menggambarkan status saat ini dari jalur jaringan. Ini berisi lima properti kunci yang mencakup sebagian besar skenario pemantauan jaringan. NWPath.Status — enumerasi dengan tiga status: satisfied (tersedia), unsatisfied (tidak tersedia) dan requiresConnection (memerlukan koneksi).

PropertiTipeDeskripsi
statusNWPath.StatusStatus jalur saat ini: satisfied, unsatisfied, requiresConnection
availableInterfaces[NWInterface]Daftar semua antarmuka jaringan yang tersedia
gateways[NWEndpoint]Daftar gateway yang digunakan untuk routing
isExpensiveBoolTrue jika koneksi ditagih (data seluler, hotspot pribadi)
isConstrainedBoolTrue jika koneksi dibatasi kecepatannya (Mode Data Rendah)

Pemeriksaan biaya dan batasan

Properti isExpensive — bendera yang sangat penting untuk aplikasi yang bekerja dengan volume data besar. Jika isExpensive = true, aplikasi harus menurunkan kualitas streaming, menunda pengunduhan pembaruan, atau memperingatkan pengguna. isConstrained menunjukkan Mode Data Rendah aktif.

Untuk memeriksa ketersediaan internet (bukan hanya jaringan) digunakan metode usesInterfaceType. Jika perangkat terhubung ke Wi-Fi tanpa internet — NWPath mungkin menampilkan satisfied, tetapi akses sebenarnya tidak ada. Dalam kasus seperti itu, diperlukan validasi tambahan melalui NWConnection.

Contoh implementasi NWPathMonitor

Mari kita lihat implementasi NWPathMonitor tingkat lanjut dengan penanganan biaya, jenis antarmuka, dan pemberitahuan ViewModel melalui publisher. Dalam contoh ini digunakan framework Combine untuk pembaruan UI secara reaktif saat status jaringan berubah.

swift
import Network
import Combine

final class NetworkManager: ObservableObject {
    static let shared = NetworkManager()
    @Published private(set) var isConnected = true
    @Published private(set) var isExpensive = false

    private let monitor = NWPathMonitor()
    private let queue = DispatchQueue("NetworkMonitor")

    private init() {
        monitor.pathUpdateHandler = { [weak self] path in
            DispatchQueue.main.async {
                self?.isConnected = path.status == .satisfied
                self?.isExpensive = path.isExpensive
            }
        }
        monitor.start(on: queue)
    }

    func checkInterface() -> NWInterface.InterfaceType {
        let path = monitor.currentPath
        if path.usesInterfaceType(.wifi) { return .wifi }
        if path.usesInterfaceType(.cellular) { return .cellular }
        return .other
    }
}

Menangani kehilangan jaringan dengan tindakan tertunda

Saat kehilangan koneksi, mungkin diperlukan tidak hanya memberi tahu UI, tetapi juga melakukan tindakan tertunda — misalnya, menyimpan draf permintaan untuk dikirim nanti. Implementasikan antrean permintaan tertunda yang mengumpulkan operasi saat status unsatisfied dan mengirimkannya saat satisfied pulih.

Untuk tugas ini, pola ReachabilityManager dengan delegasi sangat cocok: NWPathMonitor memberi tahu manajer, manajer memperbarui antrean dan UI. Saat status berubah menjadi satisfied, antrean secara otomatis dikosongkan, dan UI menerima indikasi pemulihan koneksi.

NWPathMonitor vs Reachability

Sebelum munculnya NWPathMonitor, solusi standar untuk pemantauan jaringan di iOS adalah pustaka Reachability dari Apple (contoh dari dokumentasi), yang dibangun di atas SystemConfiguration. Perbedaan utama: Reachability bekerja melalui SCNetworkReachability dalam C, tidak mendukung jenis jaringan modern, dan hanya memberikan respons biner tentang ketersediaan.

NWPathMonitor mengatasi keterbatasan ini: ditulis dalam Swift, mendukung VPN, multipath, 5G dan LTE, memberikan informasi terperinci tentang setiap antarmuka, dan bekerja secara asinkron melalui GCD. Reachability masih digunakan dalam proyek dengan dukungan minimal iOS 11 dan lebih rendah.

KarakteristikNWPathMonitorReachability
Versi minimaliOS 12iOS 2
BahasaSwift (Network)C (SystemConfiguration)
Jenis antarmukaWi-Fi, Cellular, Ethernet, VPNWi-Fi, WWAN (umum)
isExpensiveAdaTidak
AsinkronitasGCD (dispatch queue)RunLoop
Antarmuka gandaAda (multipath)Tidak

Kapan menggunakan Reachability

Jika aplikasi Anda mendukung iOS 11 dan lebih rendah, Reachability tetap menjadi satu-satunya pilihan. Untuk proyek iOS 12+ disarankan untuk segera menggunakan NWPathMonitor — ini terintegrasi lebih baik dengan kode Swift modern, Combine, dan SwiftUI.

Migrasi dari Reachability ke NWPathMonitor sederhana: cukup ganti panggilan SCNetworkReachability dengan NWPathMonitor, pertahankan logika pemrosesan yang sama. Lapisan abstraksi (protokol NetworkMonitorProtocol) akan memungkinkan perpindahan antar implementasi tanpa mengubah logika bisnis aplikasi.

Pertanyaan yang Sering Diajukan

Berapa versi iOS minimum yang diperlukan untuk NWPathMonitor?

NWPathMonitor tersedia mulai iOS 12.0, macOS 10.14, watchOS 5.0 dan tvOS 12.0. Untuk proyek yang mendukung versi lama, gunakan Reachability dari SystemConfiguration atau pustaka pembungkus dengan kompilasi bersyarat melalui #available.

Apa perbedaan antara NWPath.Status.satisfied dan unsatisfied?

Satisfied berarti lalu lintas dapat melewati setidaknya satu antarmuka. Unsatisfied — tidak ada antarmuka yang tersedia. Status requiresConnection — jalur memerlukan pembuatan koneksi (misalnya, VPN tidak terhubung), dan lalu lintas untuk sementara tidak dapat lewat.

Bagaimana cara menentukan jenis jaringan — Wi-Fi atau seluler?

Gunakan metode usesInterfaceType pada NWPath: path.usesInterfaceType(.wifi) untuk Wi-Fi, path.usesInterfaceType(.cellular) untuk data seluler. Metode mengembalikan true jika lalu lintas saat ini melewati jenis antarmuka yang ditentukan.

Apakah NWPathMonitor perlu dibatalkan saat masuk ke latar belakang?

Disarankan untuk menjeda pemantauan di latar belakang untuk menghemat baterai. Memanggil monitor.cancel() di applicationDidEnterBackground dan memulai ulang di applicationWillEnterForeground mengurangi konsumsi daya. Untuk operasi kritis, gunakan Background Task.

Bagaimana menangani portal captive dengan NWPathMonitor?

NWPathMonitor dapat menampilkan satisfied bahkan di portal captive. Untuk menentukan akses internet yang sebenarnya, lakukan permintaan HTTP ke endpoint tepercaya melalui NWConnection. Jika ada redirect — portal aktif, diperlukan otorisasi di WebView.

Ringkasan

  • NWPathMonitor — kelas framework Network untuk pemantauan jalur jaringan di iOS 12+ dengan dukungan GCD dan Combine.
  • NWPath berisi informasi lengkap tentang koneksi: status, jenis antarmuka, biaya, batasan, dan gateway.
  • Metode start memulai pemantauan pada antrean yang ditentukan, pathUpdateHandler menerima pembaruan NWPath.
  • Properti isExpensive dan isConstrained memungkinkan menentukan koneksi yang ditagih dan dibatasi.
  • NWPathMonitor telah menggantikan Reachability untuk iOS 12+, menyediakan API yang lebih kaya di Swift.
  • Pemfilteran berdasarkan jenis antarmuka diimplementasikan melalui inisialisasi dengan parameter requiredInterfaceType.
  • Untuk pekerjaan latar belakang pemantauan harus dijeda dan dilanjutkan saat beralih antara foreground dan background.

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