NWPathMonitor: mi ez, hálózatfigyelés és munka iOS-ben

Szerző: IT Sectr Megjelenés: 2026-03-10 Olvasási idő: 9 perc

NWPathMonitor — egy osztály a Network keretrendszerből iOS és macOS rendszeren az eszköz hálózati útvonalának állapotának figyelésére. A Apple Developer Documentation (2025) szerint az NWPathMonitor lehetővé teszi az alkalmazás számára a hálózat elérhetőségének nyomon követését, az interfész típusának meghatározását és a kapcsolati változásokra való reagálást. NWPathMonitor információt nyújt a kapcsolat típusáról, a forgalom költségeiről és az internet elérhetőségéről egy kényelmes callback segítségével az NWPath-tel.

Főbb pontok

  • NWPathMonitor — a Network keretrendszer osztálya aszinkron hálózati útvonal figyeléshez iOS és macOS rendszeren.
  • NWPath információkat tartalmaz a hálózat elérhetőségéről, az interfész típusáról (Wi-Fi, mobil adat, Ethernet) és a költség státuszáról.
  • A start metódus elindítja a figyelést a megadott dispatch queue-n, a cancel metódus leállítja.
  • A pathUpdateHandler tulajdonság — closure, amely a hálózati útvonal állapotának minden változásakor meghívódik.
  • NWPathMonitor támogatja a szűrést a kívánt interfész típus szerint a requiredInterfaceType paraméteren keresztül.

Mi az NWPathMonitor?

NWPathMonitor — egy osztály a Network keretrendszerből, amelyet az Apple az iOS 12 és macOS 10.14 Mojave rendszerben vezetett be. Modern API-t biztosít az eszköz hálózati útvonalának — az alkalmazás forgalma által használt hálózati interfészek kombinációjának — változásainak nyomon követésére.

Az iOS 12 előtt a hálózat figyelésére a Reachability könyvtárat használták, amely a C-alapú SystemConfiguration keretrendszerre épült. Az NWPathMonitor egy natív Swift alternatíva gazdagabb API-val, modern kapcsolattípusok (VPN, multipath, LTE, 5G) támogatásával és beépített GCD-vel való munkával.

A legfontosabb különbség az NWPathMonitor és a Reachability között — az NWPath objektum nem csak egy bináris „elérhető/nem elérhető“ státuszt ad, hanem teljes képet nyújt az útvonalról: a használt interfészeket, azok prioritását, költségeket, barangolási státuszt és a proxy és VPN lehetőségét. A fejlesztő átfogó információkat kap a hálózati kérésekkel kapcsolatos döntések meghozatalához.

A Network keretrendszer megjelenésének története

A Network keretrendszer az alacsony szintű C-API-k — CFStream és BSD Sockets — modern helyettesítőjeként jelent meg. Egységes interfészt biztosít a hálózati kommunikációhoz az Apple összes platformján, beleértve a watchOS-t és a tvOS-t is. Az NWPathMonitor ennek a keretrendszernek a része az NWConnection, NWListener és NWBrowser mellett.

A Network keretrendszer Swift-ben íródott és GCD-t használ az aszinkron feldolgozáshoz. Ez azt jelenti, hogy az NWPathMonitor callback-jei a megadott dispatch queue-n hajtódnak végre, integrálódva az alkalmazás meglévő többszálú architektúrájába manuális szálkezelés nélkül.

Hogyan használjuk az NWPathMonitor-t az alkalmazásban

Az NWPathMonitor használata az osztály egy példányának létrehozásával és a pathUpdateHandler beállításával kezdődik. Ezután meghívásra kerül a start metódus a dispatch queue megadásával, amelyen a closure végrehajtódik. A figyelés leállítása a cancel metódussal történik, amely felszabadítja az erőforrásokat is.

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("Hálózat elérhető")
            } else {
                print("Hálózat nem elérhető")
            }
        }
        monitor.start(on: queue)
    }

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

Munka az interfész típussal

Az NWPathMonitor konfigurálható úgy, hogy csak egy adott interfész típust figyeljen. Ehhez a NWPathMonitor(requiredInterfaceType:) inicializátor használatos az NWInterface.InterfaceType paraméterrel — .wifi, .cellular, .wiredEthernet vagy .loopback. Ha a típus nincs megadva, a figyelés minden interfészre kiterjed.

Gyakorlati példa: egy streaming alkalmazás csak a Wi-Fi-t figyelheti, és figyelmeztetheti a felhasználót a mobil adatra váltáskor. Az isConstrained és isExpensive ellenőrzése NWPath-ben lehetővé teszi annak meghatározását, hogy az aktuális kapcsolat díjköteles-e vagy sebességkorlátozott-e.

A figyelés életciklusa

A figyelést az alkalmazás indításakor vagy előtérbe kerüléskor kell elindítani, és háttérbe kerüléskor leállítani. Javasolt egyetlen NWPathMonitor példányt létrehozni a teljes alkalmazáshoz (singleton), és azt különböző modulokból protokollon vagy szolgáltatási rétegen keresztül használni.

Az NWPath tulajdonságai és lehetőségei

Az NWPath — a pathUpdateHandler-nek átadott objektum, amely leírja a hálózati útvonal aktuális állapotát. Öt kulcsfontosságú tulajdonságot tartalmaz, amelyek a hálózatfigyelési forgatókönyvek többségét lefedik. NWPath.Status — egy felsorolás három állapottal: satisfied (elérhető), unsatisfied (nem elérhető) és requiresConnection (kapcsolat szükséges).

TulajdonságTípusLeírás
statusNWPath.StatusAz útvonal aktuális állapota: satisfied, unsatisfied, requiresConnection
availableInterfaces[NWInterface]Az összes elérhető hálózati interfész listája
gateways[NWEndpoint]Az útválasztáshoz használt átjárók listája
isExpensiveBoolTrue, ha a kapcsolat díjköteles (mobil adat, személyes hotspot)
isConstrainedBoolTrue, ha a kapcsolat sebességkorlátozott (Low Data Mode)

Költségek és korlátozások ellenőrzése

Az isExpensive tulajdonság — kritikus fontosságú jelző a nagy adatmennyiséggel dolgozó alkalmazások számára. Ha isExpensive = true, az alkalmazásnak csökkentenie kell a streaming minőségét, el kell halasztania a frissítések letöltését, vagy figyelmeztetnie kell a felhasználót. Az isConstrained a Low Data Mode bekapcsolt állapotát jelzi.

Az internet elérhetőségének (nem csak a hálózatnak) ellenőrzéséhez a usesInterfaceType metódus használatos. Ha az eszköz internet nélküli Wi-Fi-hez csatlakozik — az NWPath satisfied-t mutathat, de a tényleges hozzáférés hiányzik. Ilyen esetekben további érvényesítés szükséges az NWConnection-en keresztül.

NWPathMonitor implementációs példák

Nézzünk egy fejlett NWPathMonitor implementációt költségek, interfésztípusok kezelésével és a ViewModel értesítésével publisheren keresztül. A példában a Combine keretrendszer van használva a UI reaktív frissítéséhez a hálózati állapot változásakor.

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

Hálózatvesztés kezelése késleltetett művelettel

Kapcsolat elvesztésekor nemcsak a UI értesítése lehet szükséges, hanem késleltetett műveletek végrehajtása is — például egy kérés piszkozatának mentése későbbi elküldéshez. Implementáljon egy késleltetett kérések sorát, amely összegyűjti a műveleteket unsatisfied státusznál, és elküldi őket a satisfied helyreállításakor.

Ehhez a feladathoz a ReachabilityManager delegátussal minta ideális: az NWPathMonitor értesíti a menedzsert, a menedzser frissíti a sort és a UI-t. Amikor a státusz satisfied-re változik, a sor automatikusan kiürül, és a UI jelzést kap a kapcsolat helyreállításáról.

NWPathMonitor vs Reachability

Az NWPathMonitor megjelenése előtt a hálózatfigyelés szabványos megoldása iOS-ben az Apple Reachability könyvtára volt (példa a dokumentációból), amely a SystemConfiguration-re épült. A fő különbségek: a Reachability C-ben, SCNetworkReachability-n keresztül működik, nem támogatja a modern hálózati típusokat, és csak bináris választ ad az elérhetőségről.

Az NWPathMonitor megoldja ezeket a korlátozásokat: Swift-ben íródott, támogatja a VPN, multipath, 5G és LTE technológiákat, részletes információkat nyújt minden interfészről, és aszinkron módon, GCD-n keresztül működik. A Reachability-t még mindig használják olyan projektekben, amelyek minimális iOS 11 és alacsonyabb támogatást igényelnek.

JellemzőNWPathMonitorReachability
Minimális verzióiOS 12iOS 2
NyelvSwift (Network)C (SystemConfiguration)
Interfész típusokWi-Fi, Cellular, Ethernet, VPNWi-Fi, WWAN (általános)
isExpensiveVanNincs
AszinkronitásGCD (dispatch queue)RunLoop
Több interfészVan (multipath)Nincs

Mikor használjuk a Reachability-t

Ha az alkalmazása támogatja az iOS 11 és alacsonyabb verziókat, a Reachability marad az egyetlen lehetőség. iOS 12+ projektekhez ajánlott azonnal NWPathMonitor-t használni — jobban integrálódik a modern Swift kóddal, Combine-nal és SwiftUI-val.

A Reachability-ről NWPathMonitor-ra való migráció egyszerű: elég az SCNetworkReachability hívásokat NWPathMonitor-ra cserélni, megtartva ugyanazt a feldolgozási logikát. Az absztrakciós réteg (NetworkMonitorProtocol protokoll) lehetővé teszi a megvalósítások közötti váltást az alkalmazás üzleti logikájának megváltoztatása nélkül.

Gyakran Ismételt Kérdések

Milyen minimális iOS verzió szükséges az NWPathMonitor-hoz?

Az NWPathMonitor iOS 12.0, macOS 10.14, watchOS 5.0 és tvOS 12.0 verziótól elérhető. Régebbi verziókat támogató projektekhez használja a Reachability-t a SystemConfiguration-ből vagy a wrapper könyvtárakat feltételes fordítás segítségével a #available-en keresztül.

Mi a különbség az NWPath.Status.satisfied és unsatisfied között?

Satisfied azt jelenti, hogy a forgalom legalább egy interfészen áthaladhat. Unsatisfied — egyetlen interfész sem elérhető. A requiresConnection állapot — az útvonal kapcsolat létesítését igényli (például a VPN nincs csatlakoztatva), és a forgalom ideiglenesen nem halad át.

Hogyan határozható meg a hálózat típusa — Wi-Fi vagy mobil?

Használja a usesInterfaceType metódust az NWPath-en: path.usesInterfaceType(.wifi) Wi-Fi-hez, path.usesInterfaceType(.cellular) mobil adathoz. A metódus true-t ad vissza, ha az aktuális forgalom a megadott interfész típuson halad át.

Le kell állítani az NWPathMonitor-t háttérbe lépéskor?

Ajánlott szüneteltetni a figyelést háttérben az akkumulátor kímélése érdekében. A monitor.cancel() hívása az applicationDidEnterBackground-ban és az újraindítás az applicationWillEnterForeground-ban csökkenti az energiafogyasztást. Kritikus műveletekhez használja a Background Task-ot.

Hogyan kezeljük a captive portálokat az NWPathMonitor-ral?

Az NWPathMonitor satisfied státuszt mutathat még captive portál esetén is. A valós internet-hozzáférés meghatározásához hajtson végre egy HTTP kérést egy megbízható végponthoz az NWConnection-en keresztül. Ha átirányítás érkezik — a portál aktív, engedélyezés szükséges a WebView-ban.

Összefoglalás

  • NWPathMonitor — a Network keretrendszer osztálya hálózati útvonal figyeléshez iOS 12+ rendszeren GCD és Combine támogatással.
  • NWPath teljes információt tartalmaz a kapcsolatról: státusz, interfész típusok, költségek, korlátozások és átjárók.
  • A start metódus elindítja a figyelést a megadott soron, a pathUpdateHandler NWPath frissítéseket kap.
  • Az isExpensive és isConstrained tulajdonságok lehetővé teszik a díjköteles és korlátozott kapcsolatok azonosítását.
  • NWPathMonitor felváltotta a Reachability-t iOS 12+ rendszeren, gazdagabb API-t biztosítva Swift-ben.
  • Szűrés típus szerint interfész a requiredInterfaceType paraméterrel rendelkező inicializátoron keresztül valósítható meg.
  • Háttérmunkához a figyelést szüneteltetni kell foreground és background közötti váltáskor.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is