NWPathMonitor iOS और macOS में Network फ़्रेमवर्क का एक वर्ग है जो डिवाइस के नेटवर्क पथ की स्थिति की निगरानी के लिए है। Apple Developer Documentation (2025) के अनुसार, NWPathMonitor एप्लिकेशन को नेटवर्क उपलब्धता को ट्रैक करने, इंटरफ़ेस प्रकार निर्धारित करने और कॉनेक्शन परिवर्तनों पर प्रतिक्रिया देने की अनुमति देता है। NWPathMonitor NWPath के साथ एक सुविधाजनक कॉलबैक के माध्यम से कनेक्शन प्रकार, डेटा लागत और इंटरनेट उपलब्धता के बारे में जानकारी प्रदान करता है।
मुख्य बातें
NWPathMonitor Network फ़्रेमवर्क का एक वर्ग है जो Apple द्वारा iOS 12 और macOS 10.14 Mojave में प्रस्तुत किया गया था। यह डिवाइस के नेटवर्क पथ में परिवर्तनों को ट्रैक करने के लिए एक आधुनिक API प्रदान करता है — नेटवर्क इंटरफ़ेसों का संयोजन जिसके माध्यम से एप्लिकेशन का ट्रैफ़िक गुजरता है।
iOS 12 से पहले, नेटवर्क निगरानी के लिए C-आधारित SystemConfiguration फ़्रेमवर्क पर निर्मित Reachability लाइब्रेरी का उपयोग किया जाता था। NWPathMonitor एक समृद्ध API के साथ एक देशी Swift विकल्प है, जो आधुनिक कनेक्शन प्रकारों (VPN, multipath, LTE, 5G) का समर्थन और बिल्ट-इन GCD एकीकरण प्रदान करता है।
NWPathMonitor और Reachability के बीच मुख्य अंतर — NWPath ऑब्जेक्ट केवल एक द्विआधारी “उपलब्ध/अनुपलब्ध” स्थिति ही नहींं, बल्कि पथ की पूरी तस्वीर प्रदान करता है: उपयोग किए गए इंटरफ़ेस, उनकी प्राथमिकता, लागत, रोमिंग स्थिति और प्रॉक्सी और VPN क्षमताएँ। डिवेलपर को नेटवर्क अनुरोधों के बारे में निर्णय लेने के लिए व्यापक जानकारी मिलती है।
Network फ़्रेमवर्क निम्न-स्तरीय C API — CFStream और BSD Sockets के आधुनिक प्रतिस्थापन के रूप में उभरा। यह watchOS और tvOS सहित सभी Apple प्लेटफ़ॉर्म पर नेटवर्क संचार के लिए एक एकीकृत इंटरफ़ेस प्रदान करता है। NWPathMonitor NWConnection, NWListener और NWBrowser के साथ इस फ़्रेमवर्क का हिस्सा है।
Network फ़्रेमवर्क Swift में लिखा गया है और अस्यंक्रोनस प्रोसेसिंग के लिए GCD का उपयोग करता है। इसका मतलब है कि NWPathMonitor कॉलबैक निर्दिष्ट dispatch queue पर निष्पादित होते हैं, जो एप्लिकेशन के मौजूदा मल्टीथ्रेडिंग आर्किटेक्चर में मैनुअल थ्रेड प्रबंधन के बिना एकीकृत होते हैं।
NWPathMonitor का उपयोग वर्ग का एक उदाहरण बनाने और pathUpdateHandler कॉलबैक को कॉन्फ़िगर करने से शुरू होता है। फिर start विधि को एक dispatch queue के साथ बुलाया जाता है जहाँ क्लोजर निष्पादित होगा। निगरानी cancel विधि द्वारा रोकी जाती है, जो संसाधनों को भी मुक्त करती है।
import Network
class NetworkMonitor {
private let monitor = NWPathMonitor()
private let queue = DispatchQueue("monitor")
func startMonitoring() {
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
print("नेटवर्क उपलब्ध")
} else {
print("नेटवर्क अनुपलब्ध")
}
}
monitor.start(on: queue)
}
func stopMonitoring() {
monitor.cancel()
}
}
NWPathMonitor को केवल एक विशिष्ट इंटरफ़ेस प्रकार की निगरानी के लिए कॉन्फ़िगर किया जा सकता है। इसके लिए प्रारंभक NWPathMonitor(requiredInterfaceType:) का उपयोग करें जिसमें NWInterface.InterfaceType पारमीटर — .wifi, .cellular, .wiredEthernet या .loopback हो। यदि कोई प्रकार निर्दिष्ट नहीं है, तो निगरानी सभी इंटरफ़ेसों को कवर करती है।
व्यावहारिक उदाहरण: एक स्ट्रीमिंग एप्लिकेशन केवल Wi-Fi की निगरानी कर सकता है और सेलुलर डेटा पर स्विच करने पर उपयोगकर्ता को चेतावनी दे सकता है। NWPath में isConstrained और isExpensive की जांच यह निर्धारित करने की अनुमति देती है कि क्या वर्तमान कनेक्शन शुल्क युक्त है या गति सीमित है।
निगरानी एप्लिकेशन लॉन्च या अग्रगमन में आने पर शुरू होनी चाहिए और पृष्ठभूमि में जाने पर रुकनी चाहिए। पूरे एप्लिकेशन के लिए एक NWPathMonitor उदाहरण (singleton) बनाने और इसे प्रोटोकॉल या सर्विस परत के माध्यम से विभिन्न मॉड्यूलों से उपयोग करने की अनुशंसा दी जाती है।
NWPath एक ऑब्जेक्ट है जो pathUpdateHandler को भेजा जाता है और नेटवर्क पथ की वर्तमान स्थिति का वर्णन करता है। इसमें पाँच मुख्य गुण हैं जो अधिकांश नेटवर्क निगरानी परिदृश्यों को कवर करते हैं। NWPath.Status — तीन अवस्थाओं वाला एक एनुमरेशन: satisfied (उपलब्ध), unsatisfied (अनुपलब्ध) और requiresConnection (कनेक्शन की आवश्यकता है)।
| गुण | प्रकार | वर्णन |
|---|---|---|
| status | NWPath.Status | वर्तमान पथ स्थिति: satisfied, unsatisfied, requiresConnection |
| availableInterfaces | [NWInterface] | सभी उपलब्ध नेटवर्क इंटरफ़ेसों की सूची |
| gateways | [NWEndpoint] | रूटिंग के लिए उपयोग किए जाने वाले गेटवेज़ की सूची |
| isExpensive | Bool | True यदि कनेक्शन शुल्क युक्त है (सेलुलर डेटा, व्यक्तिगत हॉटस्पॉट) |
| isConstrained | Bool | True यदि कनेक्शन गति सीमित है (निम्न डेटा मोड) |
isExpensive गुण एप्लिकेशनों के लिए एक महत्वपूर्ण फ़्लैग है जो बड़ी मात्रा में डेटा के साथ काम करते हैं। यदि isExpensive = true है, तो एप्लिकेशन को स्ट्रीमिंग गुणवत्ता कम करनी चाहिए, अपडेट डाउनलोड स्थगित करने चाहिए या उपयोगकर्ता को चेतावनी देनी चाहिए। isConstrained इंदिकात करता है कि निम्न डेटा मोड सक्षम है।
इंटरनेट उपलब्धता (केवल नेटवर्क नहीं) की जाँच करने के लिए, usesInterfaceType विधि का उपयोग करें। यदि डिवाइस बिना इंटरनेट के Wi-Fi से जुड़ा है — NWPath satisfied दिखा सकता है, लेकिन वास्तविक पहुँच अनुपस्थित है। ऐसे मामलों में, NWConnection के माध्यम से अतिरिक्त सत्यापन की आवश्यकता होती है।
आइए लागत संभालन, इंटरफ़ेस प्रकार और प्रकाशक के माध्यम से ViewModel अधिसूचना के साथ एक उन्नत NWPathMonitor कार्यान्वयन देखें। उदाहरण नेटवर्क स्थिति बदलने पर प्रतिक्रियाशील UI अपडेट के लिए Combine फ़्रेमवर्क का उपयोग करता है।
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
}
}
जब कनेक्शन खो जाता है, तो आपको न केवल UI को सूचित करने की आवश्यकता हो सकती है बल्कि विलंबित कार्रवाई करने की भी — उदाहरण के लिए, बाद में भेजने के लिए एक अनुरोध मसौदा सहेजें। एक विलंबित अनुरोधों की पंक्ति लागू करें जो unsatisfied स्थिति के दौरान संचालनों को एकत्र करती है और satisfied बहाल होने पर उन्हें भेजती है।
इस कार्य के लिए डिलीगेट के साथ ReachabilityManager पैटरन आदर्श है: NWPathMonitor मैनेजर को सूचित करता है, मैनेजर पंक्ति और UI को अपडेट करता है। जब स्थिति बदलकर satisfied हो जाती है, तो पंक्ति स्वचालित रूप से खाली हो जाती है, और UI को कनेक्शन बहाली का संकेत मिलता है।
NWPathMonitor से पहले, iOS में नेटवर्क निगरानी का मानक समाधान Apple की Reachability लाइब्रेरी (दस्तावेज़ीकरण से उदाहरण) था, जो SystemConfiguration पर निर्मित है। मुख्य अंतर: Reachability C में SCNetworkReachability के माध्यम से काम करती है, आधुनिक नेटवर्क प्रकारों का समर्थन नहीं करती है, और केवल एक द्विआधारी उपलब्धता प्रतिक्रिया देती है।
NWPathMonitor इन सीमाओं को संबोधित करता है: यह Swift में लिखा गया है, VPN, multipath, 5G और LTE का समर्थन करता है, प्रत्येक इंटरफ़ेस के बारे में विस्तृत जानकारी प्रदान करता है और GCD के माध्यम से अस्यंक्रोनस रूप से काम करता है। Reachability का उपयोग अभी भी न्यूनतम iOS 11 और उससे नीचे का समर्थन करने वाली परियोजनाओं में किया जाता है।
| विशेषता | NWPathMonitor | Reachability |
|---|---|---|
| न्यूनतम संस्करण | iOS 12 | iOS 2 |
| भाषा | Swift (Network) | C (SystemConfiguration) |
| इंटरफ़ेस प्रकार | Wi-Fi, Cellular, Ethernet, VPN | Wi-Fi, WWAN (सामान्य) |
| isExpensive | हाँ | नहीं |
| अस्यंक्रोनस | GCD (dispatch queue) | RunLoop |
| अनेक इंटरफ़ेस | हाँ (multipath) | नहीं |
यदि आपका एप्लिकेशन iOS 11 और उससे नीचे का समर्थन करता है, तो Reachability एकमात्र विकल्प बनी रहती है। iOS 12+ परियोजनाओं के लिए, सीधे NWPathMonitor का उपयोग करने की अनुशंसा दी जाती है — यह आधुनिक Swift कोड, Combine और SwiftUI के साथ बेहतर एकीकृत होता है।
Reachability से NWPathMonitor में माइग्रेशन सरल है: बस SCNetworkReachability कॉल्स को NWPathMonitor से बदलें, समान हैंडलिंग तर्क को बनाए रखें। एक अबस्ट्रेक्शन परत (NetworkMonitorProtocol) एप्लिकेशन के व्यावसायिक तर्क को बदले बिना कार्यान्वयनों के बीच स्विच करने की अनुमति देगी।
अक्सर पूछे जाने वाले प्रश्न
NWPathMonitor iOS 12.0, macOS 10.14, watchOS 5.0 और tvOS 12.0 से उपलब्ध है। पुराने संस्करणों का समर्थन करने वाली परियोजनाओं के लिए, SystemConfiguration से Reachability या #available के माध्यम से सार्तिक संकलन वाली रैपर लाइब्रेरी का उपयोग करें।
Satisfied का मतलब है कि ट्रैफ़िक कम से कम एक इंटरफ़ेस से गुजर सकता है। Unsatisfied — कोई इंटरफ़ेस उपलब्ध नहीं है। requiresConnection अवस्था — पथ को कनेक्शन स्थापित करने की आवश्यकता है (उदाहरण के लिए, VPN कनेक्ट नहीं है), और ट्रैफ़िक अस्थायी रूप से पास नहीं हो सकता।
NWPath पर usesInterfaceType विधि का उपयोग करें: Wi-Fi के लिए path.usesInterfaceType(.wifi), सेलुलर डेटा के लिए path.usesInterfaceType(.cellular)। यह विधि true लौटाती है यदि वर्तमान ट्रैफ़िक निर्दिष्ट इंटरफ़ेस प्रकार से गुजरता है।
बैटरी बचाने के लिए पृष्ठभूमि में निगरानी रोकने की अनुशंसा दी जाती है। applicationDidEnterBackground में monitor.cancel() को कॉल करना और applicationWillEnterForeground में start को पुनर्स्थापित करना बिजली की खपत कम करता है। महत्वपूर्ण कार्रवाईयों के लिए Background Task का उपयोग करें।
NWPathMonitor कैप्टिव पोर्टल के साथ भी satisfied दिखा सकता है। वास्तविक इंटरनेट पहुँच निर्धारित करने के लिए, NWConnection के माध्यम से एक विश्वसनीय एंडपॉइंट पर HTTP अनुरोध निष्पादित करें। यदि रिडायरेक्ट होता है — पोर्टल सक्रिय है और WebView में प्रामाणीकरण की आवश्यकता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें