NWPathMonitor: bu nədir, şəbəkə izləmə və iOS-da işləmə

Müəllif: IT Sectr Dərc olunub: 2026-03-10 Oxuma vaxtı: 9 dəq

NWPathMonitor — iOS və macOS-da Network frameworkundan cihazın şəbəkə yolunun vəziyyətini izləmək üçün sinifdir. Apple Developer Documentation (2025)-a əsasən, NWPathMonitor proqrama şəbəkə əlçatanlığını izləməyə, interfeys növünü təyin etməyə və qoşulma dəyişikliklərinə reaksiya verməyə imkan verir. NWPathMonitor rahat NWPath callback vasitəsilə qoşulma növü, trafik xərcləri və internet mövcudluğu haqqında məlumat təqdim edir.

Əsas məqamlar

  • NWPathMonitor — iOS və macOS-da asinxron şəbəkə yolunun monitorinqi üçün Network framework sinfi.
  • NWPath şəbəkə əlçatanlığı, interfeys növü (Wi-Fi, mobil məlumat, Ethernet) və xərc statusu haqqında məlumat ehtiva edir.
  • start metodu göstərilən dispatch queue-də monitorinqi başladır, cancel metodu dayandırır.
  • pathUpdateHandler xassəsi — şəbəkə yolunun vəziyyəti hər dəyişdikdə çağırılan closure.
  • NWPathMonitor requiredInterfaceType parametri vasitəsilə tələb olunan interfeys növünə görə filtrləməni dəstəkləyir.

NWPathMonitor nədir?

NWPathMonitor — Apple tərəfindən iOS 12 və macOS 10.14 Mojave-də təqdim edilən Network frameworkundan bir sinifdir. O, cihazın şəbəkə yolunda — proqram trafikinin keçdiyi şəbəkə interfeyslərinin kombinasiyasında dəyişiklikləri izləmək üçün müasir API təmin edir.

iOS 12-dən əvvəl şəbəkə monitorinqi üçün SystemConfiguration C-frameworku üzərində qurulmuş Reachability kitabxanası istifadə olunurdu. NWPathMonitor daha zəngin API, müasir qoşulma növləri (VPN, multipath, LTE, 5G) dəstəyi və GCD ilə daxili işləmə ilə yerli Swift alternatividir.

NWPathMonitor-un Reachability-dən əsas fərqi — NWPath obyenti sadəcə binary “əlçatandır/əlçatan deyil” statusu deyil, yolun tam şəklini təqdim edir: istifadə olunan interfeyslər, onların prioriteti, xərclər, rouminq statusu və proxy və VPN imkanı. Tərtibatçı şəbəkə sorğuları haqqında qərarlar qəbul etmək üçün hərtərəfli məlumat alır.

Network frameworkunun yaranma tarixi

Network frameworku aşağı səviyyəli C-API-lərin — CFStream və BSD Sockets-in müasir əvəzedicisi kimi meydana çıxdı. O, Apple-ın bütün platformalarında, o cümlədən watchOS və tvOS-da şəbəkə əlaqəsi üçün vahid interfeys təmin edir. NWPathMonitor NWConnection, NWListener və NWBrowser ilə yanaşı bu frameworkun bir hissəsidir.

Network frameworku Swift-də yazılıb və asinxron emal üçün GCD-dən istifadə edir. Bu o deməkdir ki, NWPathMonitor callback-ləri göstərilən dispatch queue-də icra olunur və proqramın mövcud çoxiplik arxitekturası ilə əllə iplik idarəsi olmadan inteqrasiya edir.

Proqramda NWPathMonitor-dan necə istifadə etməli

NWPathMonitor istifadəsi sinfin instansiyasının yaradılması və pathUpdateHandler handlerinin konfiqurasiyası ilə başlayır. Sonra closure-un icra olunacağı dispatch queue-ni göstərməklə start metodu çağırılır. Monitorinqin dayandırılması resursları da boşaldan cancel metodu ilə həyata keçirilir.

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("Şəbəkə mövcuddur")
            } else {
                print("Şəbəkə mövcud deyil")
            }
        }
        monitor.start(on: queue)
    }

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

İnterfeys növü ilə işləmə

NWPathMonitor yalnız müəyyən interfeys növünü izləmək üçün konfiqurasiya edilə bilər. Bunun üçün NWPathMonitor(requiredInterfaceType:) initləşdiricisi NWInterface.InterfaceType parametri ilə — .wifi, .cellular, .wiredEthernet və ya .loopback istifadə olunur. Növ göstərilməyibsə, monitorinq bütün interfeyslər üzrə aparılır.

Praktiki nümunə: striminq proqramı yalnız Wi-Fi-ı izləyə və istifadəçini mobil məlumata keçid barədə xəbərdar edə bilər. NWPath-də isConstrained və isExpensive yoxlanması cari qoşulmanın tarifləşdirilib-edilmədiyini və ya sürət baxımından məhdudlaşdırıldığını müəyyən etməyə imkan verir.

Monitorinqin həyat dövrü

Monitorinq proqram başlayarkən və ya ön plana çıxarkən işə salınmalı və arxa plana keçərkən dayandırılmalıdır. Bütün proqram üçün bir NWPathMonitor instansiyası (singleton) yaratmaq və onu müxtəlif modullardan protokol və ya xidmət qatı vasitəsilə istifadə etmək tövsiyə olunur.

NWPath-in xassələri və imkanları

NWPath — pathUpdateHandler-ə ötürülən, cari şəbəkə yolunun vəziyyətini təsvir edən obyektdir. O, şəbəkə monitorinqi ssenarilərinin əksəriyyətini əhatə edən beş əsas xassəyə malikdir. NWPath.Status — üç vəziyyəti olan sadalama: satisfied (əlçatandır), unsatisfied (əlçatan deyil) və requiresConnection (qoşulma tələb olunur).

XassəTipTəsvir
statusNWPath.StatusYolun cari vəziyyəti: satisfied, unsatisfied, requiresConnection
availableInterfaces[NWInterface]Bütün mövcud şəbəkə interfeyslərinin siyahısı
gateways[NWEndpoint]Marşrutlaşdırma üçün istifadə olunan şlüzlərin siyahısı
isExpensiveBoolDoğrudur, əgər qoşulma tarifləşdirilirsə (mobil məlumat, fərdi hotspot)
isConstrainedBoolDoğrudur, əgər qoşulma sürət baxımından məhdudlaşdırılıbsa (aşağı məlumat rejimi)

Xərclərin və məhdudiyyətlərin yoxlanması

isExpensive xassəsi — böyük həcmdə məlumatla işləyən proqramlar üçün kritik əhəmiyyətli flag. isExpensive = true olarsa, proqram striminq keyfiyyətini aşağı salmalı, yeniləmə yükləmələrini təxirə salmalı və ya istifadəçini xəbərdar etməlidir. isConstrained Low Data Mode rejiminin aktiv olduğunu göstərir.

İnternet mövcudluğunu (sadəcə şəbəkəni deyil) yoxlamaq üçün usesInterfaceType metodu istifadə olunur. Cihaz internetsiz Wi-Fi-a qoşulubsa — NWPath satisfied göstərə bilər, lakin faktiki giriş yoxdur. Belə hallarda NWConnection vasitəsilə əlavə valideyasiya tələb olunur.

NWPathMonitor tətbiq nümunələri

Xərclərin, interfeys növlərinin emalı və publisher vasitəsilə ViewModel-in xəbərdar edilməsi ilə təkmil NWPathMonitor tətbiqinə baxaq. Nümunədə şəbəkə vəziyyəti dəyişdikdə UI-nin reaktiv yenilənməsi üçün Combine framework istifadə olunur.

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

Gecikmiş hərəkətlə şəbəkə itkisinin idarə edilməsi

Qoşulma itkisi zamanı təkcə UI-ni xəbərdar etmək deyil, həm də gecikmiş hərəkətləri yerinə yetirmək tələb oluna bilər — məsələn, sonrakı göndərmə üçün sorğu qaralamasını saxlamaq. unsatisfied statusunda əməliyyatları toplayan və satisfied bərpa olunduqda onları göndərən gecikmiş sorğular növbəsi tətbiq edin.

Bu vəzifə üçün deleqat ilə ReachabilityManager nümunəsi ideal uyğun gəlir: NWPathMonitor meneceri xəbərdar edir, menecer növbəni və UI-ni yeniləyir. Status satisfied-ə dəyişdikdə növbə avtomatik olaraq təmizlənir və UI qoşulmanın bərpa edilməsi barədə göstəriş alır.

NWPathMonitor vs Reachability

NWPathMonitor meydana çıxmazdan əvvəl iOS-da şəbəkə monitorinqi üçün standart həll SystemConfiguration üzərində qurulmuş Apple-ın Reachability kitabxanası idi (sənədləşmədən nümunə). Əsas fərqlər: Reachability C-də SCNetworkReachability vasitəsilə işləyir, müasir şəbəkə növlərini dəstəkləmir və yalnız binary əlçatanlıq cavabı verir.

NWPathMonitor bu məhdudiyyətləri həll edir: Swift-də yazılıb, VPN, multipath, 5G və LTE-ni dəstəkləyir, hər interfeys haqqında ətraflı məlumat təqdim edir və GCD vasitəsilə asinxron işləyir. Reachability hələ də minimal iOS 11 və aşağı dəstəyi olan layihələrdə istifadə olunur.

XüsusiyyətNWPathMonitorReachability
Minimal versiyaiOS 12iOS 2
DilSwift (Network)C (SystemConfiguration)
İnterfeys növləriWi-Fi, Cellular, Ethernet, VPNWi-Fi, WWAN (ümumi)
isExpensiveVarYox
AsinxronluqGCD (dispatch queue)RunLoop
Çox interfeysVar (multipath)Yox

Reachability nə vaxt istifadə edilməlidir

Proqramınız iOS 11 və aşağısını dəstəkləyirsə, Reachability yeganə seçim olaraq qalır. iOS 12+ layihələri üçün dərhal NWPathMonitor istifadə etmək tövsiyə olunur — o, müasir Swift kodu, Combine və SwiftUI ilə daha yaxşı inteqrasiya edir.

Reachability-dən NWPathMonitor-a miqrasiya sadədir: SCNetworkReachability çağırışlarını NWPathMonitor ilə əvəz etmək, eyni emal məntiqini saxlamaq kifayətdir. Abstraksiya qatı (NetworkMonitorProtocol protokolu) proqramın biznes məntiqini dəyişmədən tətbiqlər arasında keçid etməyə imkan verəcək.

Tez-tez verilən suallar

NWPathMonitor üçün hansı minimal iOS versiyası tələb olunur?

NWPathMonitor iOS 12.0, macOS 10.14, watchOS 5.0 və tvOS 12.0-dan etibarən mövcuddur. Köhnə versiyaları dəstəkləyən layihələr üçün SystemConfiguration-dan Reachability və ya #available ilə şərti kompilasiya ilə sarma kitabxanalarından istifadə edin.

NWPath.Status.satisfied unsatisfied-dən nə ilə fərqlənir?

Satisfied o deməkdir ki, trafik ən azı bir interfeys vasitəsilə keçə bilər. Unsatisfied — heç bir interfeys mövcud deyil. requiresConnection vəziyyəti — yol qoşulmanın qurulmasını tələb edir (məsələn, VPN qoşulmayıb) və trafik müvəqqəti olaraq keçmir.

Şəbəkə növünü necə təyin etməli — Wi-Fi və ya mobil?

NWPath-də usesInterfaceType metodundan istifadə edin: path.usesInterfaceType(.wifi) Wi-Fi üçün, path.usesInterfaceType(.cellular) mobil məlumat üçün. Metod cari trafik göstərilən interfeys növündən keçirsə, true qaytarır.

Arxa plana keçərkən NWPathMonitor ləğv edilməlidirmi?

Batareyaya qənaət etmək üçün arxa planda monitorinqi dayandırmaq tövsiyə olunur. applicationDidEnterBackground-da monitor.cancel() çağırışı və applicationWillEnterForeground-da yenidən start enerji istehlakını azaldır. Kritik əməliyyatlar üçün Background Task istifadə edin.

NWPathMonitor ilə captiv portalını necə idarə etməli?

NWPathMonitor captiv portalında belə satisfied göstərə bilər. İnternetə real girişi müəyyən etmək üçün NWConnection vasitəsilə etibarlı endpoint-ə HTTP sorğusu yerinə yetirin. Redirect gəlirsə — portal aktivdir, WebView-də avtorizasiya tələb olunur.

Nəticə

  • NWPathMonitor — GCD və Combine dəstəyi ilə iOS 12+-da şəbəkə yolunun monitorinqi üçün Network framework sinfi.
  • NWPath qoşulma haqqında tam məlumat ehtiva edir: status, interfeys növləri, xərclər, məhdudiyyətlər və şlüzlər.
  • start metodu göstərilən növbədə monitorinqi başladır, pathUpdateHandler NWPath yeniləmələrini alır.
  • isExpensive və isConstrained xassələri tarifləşdirilmiş və məhdudlaşdırılmış qoşulmaları təyin etməyə imkan verir.
  • NWPathMonitor iOS 12+ üçün Reachability-i əvəz edərək Swift-də daha zəngin API təqdim edir.
  • Növ üzrə filtrləmə requiredInterfaceType parametri ilə initləşdirici vasitəsilə həyata keçirilir.
  • Arxa plan işi üçün monitorinq foreground və background arasında keçid zamanı dayandırılmalı və bərpa edilməlidir.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun