NWPathMonitor: คืออะไร, การตรวจสอบเครือข่าย และการทำงานใน iOS

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-03-10 เวลาอ่าน: 9 นาที

NWPathMonitor เป็นคลาสในเฟรามว์ค Network ใน iOS และ macOS สำหรับตรวจสอบสถานะของเส้นทางเครือข่ายของอุปกรณ์ ตาม Apple Developer Documentation (2025) NWPathMonitor ช่วยให้แอปพลิเคชันสามารถติดตามความพร้อมของเครือข่าย ระบุชนิดอินเทอร์เฟส และตอบสนองต่อการเปลี่ยนแปลงการเชื่อมต่อ NWPathMonitor ให้ข้อมูลเกี่ยวกับชนิดการเชื่อมต่อ ค่าใช้จ่ายข้อมูล และความพร้อมของอินเทอร์เน็ตผ่าน callback ที่สะดวกกับ NWPath

หัวข้อสำคัญ

  • NWPathMonitor — คลาสของเฟรามว์ค Network สำหรับการตรวจสอบเส้นทางเครือข่ายแบบไม่ซังโครนัสใน iOS และ macOS
  • NWPath ประกอบด้วยข้อมูลเกี่ยวกับความพร้อมของเครือข่าย ชนิดอินเทอร์เฟส (Wi-Fi, ข้อมูลมือถือ, Ethernet) และสถานะค่าใช้จ่าย
  • เมธอด start เริ่มการตรวจสอบบน dispatch queue ที่ระบุ เมธอด cancel หยุดมัน
  • คุณสมบัติ pathUpdateHandler — closure ที่ถูกเรียกทุกครั้งที่สถานะของเส้นทางเครือข่ายเปลี่ยนแปลง
  • NWPathMonitor รองรับการกรองตามชนิดอินเทอร์เฟสที่ต้องการผ่านพารามิเตอร์ requiredInterfaceType

NWPathMonitor คืออะไร?

NWPathMonitor เป็นคลาสของเฟรามว์ค Network ที่ Apple แนะนำใน iOS 12 และ macOS 10.14 Mojave เพื่อติดตามการเปลี่ยนแปลงในเส้นทางเครือข่ายของอุปกรณ์ — การรวมกันของอินเทอร์เฟสเครือข่ายที่ทราฟิคของแอปพลิเคชันไหลผ่าน

ก่อน iOS 12 ไลบรารี Reachability ที่สร้างบนเฟรามว์ค SystemConfiguration แบบ C ถูกใช้สำหรับการตรวจสอบเครือข่าย NWPathMonitor เป็นทางเลือกแบบ Swift ดั้งเดิมที่มี API ที่หลากหลายกว่า รองรับ ชนิดการเชื่อมต่อที่ทันสมัย (VPN, multipath, LTE, 5G) และการผนวกาน GCD ในตัว

ความแตกต่างหลักระหว่าง NWPathMonitor และ Reachability — ออบเจกต์ NWPath ไม่ได้ให้เฉพาะสถานะแบบไบนารี “พร้อม/ไม่พร้อม” แต่ให้ภาพที่สมบูรณ์ของเส้นทาง: อินเทอร์เฟสที่ใช้งาน ลำดับความสำคัญ ค่าใช้จ่าย สถานะการโรมมิ่ง และความสามารถของ proxy และ VPN นักพัฒนาได้รับข้อมูลที่ครอบคลุมสำหรับการตัดสินใจเกี่ยวกับคำขอเครือข่าย

ประวัติของเฟรามว์ค Network

เฟรามว์ค Network เกิดขึ้นเป็นตัวแทนที่ทันสมัยสำหรับ API ระดับต่ำของ C — CFStream และ BSD Sockets เพื่อให้การเชื่อมต่อเครือข่ายแบบเดียวกันบนทุกแพลตฟอร์ม Apple รวมถึง watchOS และ tvOS NWPathMonitor เป็นส่วนหนึ่งของเฟรามว์คนี้พร้อมกับ NWConnection, NWListener และ NWBrowser

เฟรามว์ค Network เขียนด้วย Swift และใช้ GCD สำหรับการประมวลผลแบบไม่ซังโครนัส ซึ่งหมายความว่า callback ของ NWPathMonitor ทำงานบน dispatch queue ที่ระบุ โดยผสานกับสถาปัตยกรรมมัลติเธอร์เดิ้งของแอปพลิเคชันโดยไม่ต้อง จัดการเธรดด้วยตนเอง

วิธีใช้ NWPathMonitor ในแอปพลิเคชัน

การใช้ NWPathMonitor เริ่มด้วยการสร้างอินสแตนซ์ของคลาสและการกำหนดค่า callback pathUpdateHandler จากนั้นเมธอด start จะถูกเรียกด้วย dispatch queue ที่คลอเจอร์จะทำงาน การตรวจสอบจะหยุดโดยเมธอด cancel ซึ่งยังปล่อยทรัพยากร

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("เครือข่ายพร้อม")
            } else {
                print("เครือข่ายไม่พร้อม")
            }
        }
        monitor.start(on: queue)
    }

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

การทำงานกับชนิดอินเทอร์เฟส

NWPathMonitor สามารถกำหนดค่าให้ตรวจสอบเฉพาะชนิดอินเทอร์เฟสที่ต้องการ ใช้ตัวเริ่มต้น NWPathMonitor(requiredInterfaceType:) กับพารามิเตอร์ NWInterface.InterfaceType — .wifi, .cellular, .wiredEthernet หรือ .loopback หากไม่ระบุชนิด การตรวจสอบจะครอบคลุมทุกอินเทอร์เฟส

ตัวอย่างที่ใช้ได้จริง: แอปพลิเคชันสตรีมิ่งสามารถตรวจสอบเฉพาะ Wi-Fi และเตือนผู้ใช้เมื่อสลับไปใช้ข้อมูลมือถือ การตรวจสอบ isConstrained และ isExpensive ใน NWPath ช่วยระบุว่าการเชื่อมต่อปัจจุบันมีค่าใช้จ่ายหรือจำกัดความเร็ว

วงจรของการตรวจสอบ

การตรวจสอบควรเริ่มเมื่อเปิดแอปพลิเคชันหรือเมื่อเข้าสู่เฟอร์กราวน์ และหยุดเมื่อเข้าสู่แบ็กกราวน์ แนะนำให้สร้าง อินสแตนซ์ NWPathMonitor เดียว สำหรับทั้งแอปพลิเคชัน (singleton) และใช้งานจากโมดูลต่าง ๆ ผ่านโปรโตคอลหรือชั้นบริการ

คุณสมบัติและความสามารถของ NWPath

NWPath เป็นออบเจกต์ที่ส่งไปยัง pathUpdateHandler ซึ่งอธิบายสถานะปัจจุบันของเส้นทางเครือข่าย ประกอบด้วยคุณสมบัติห้าข้อที่ครอบคลุมสิ่งที่สนารีโอการตรวจสอบเครือข่ายส่วนใหญ่ NWPath.Status — การแจงเนติมด้วยสามสถานะ: satisfied (พร้อม), unsatisfied (ไม่พร้อม) และ requiresConnection (ต้องการเชื่อมต่อ)

คุณสมบัติชนิดคำอธิบาย
statusNWPath.Statusสถานะเส้นทางปัจจุบัน: satisfied, unsatisfied, requiresConnection
availableInterfaces[NWInterface]รายการอินเทอร์เฟสเครือข่ายทั้งหมดที่พร้อม
gateways[NWEndpoint]รายการเกตแวย์ที่ใช้สำหรับการเลือกเส้นทาง
isExpensiveBoolTrue หากการเชื่อมต่อมีค่าใช้จ่าย (ข้อมูลมือถือ, ฮอตส์ปต์ส่วนบุคคล)
isConstrainedBoolTrue หากการเชื่อมต่อถูกจำกัดความเร็ว (โหมดข้อมูลต่ำ)

การตรวจสอบค่าใช้จ่ายและข้อจำกัด

คุณสมบัติ isExpensive เป็นโดยสารสำคัญสำหรับแอปพลิเคชันที่ทำงานกับข้อมูลจำนวนมาก หาก isExpensive = true แอปพลิเคชันควรลดคุณภาพสตรีมิ่ง เลือนการดาวน์โหลดอัพเดต หรือเตือนผู้ใช้ isConstrained บ่งบอกว่าโหมดข้อมูลต่ำเปิดใช้งาน

หากต้องการตรวจสอบความพร้อมของอินเทอร์เน็ต (ไม่ใช่แค่เครือข่าย) ให้ใช้เมธอด usesInterfaceType หากอุปกรณ์เชื่อมต่อ Wi-Fi โดยไม่มีอินเทอร์เน็ต — NWPath อาจแสดง satisfied แต่ไม่สามารถเข้าถึงได้จริง ในกรณีเช่นนี้ จำเป็นต้องมีการตรวจสอบเพิ่มเติมผ่าน NWConnection

ตัวอย่างการนำไปใช้ NWPathMonitor

มาดูการนำไปใช้ NWPathMonitor ขั้นสูงด้วยการจัดการค่าใช้จ่าย ชนิดอินเทอร์เฟส และการแจ้ง ViewModel ผ่าน publisher ตัวอย่างใช้ Combine framework สำหรับการอัพเดต UI แบบไร้เสียงเมื่อสถานะเครือข่ายเปลี่ยนแปลง

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

การจัดการสูญเสียเครือข่ายด้วยการดำเนินการที่เลือนไว้

เมื่อการเชื่อมต่อหาย คุณอาจต้องไม่เพียงแจ้ง UI แต่ยังต้องดำเนินการที่เลือนไว้ — ตัวอย่างเช่น บันทึกคำขอร่างสำหรับส่งทีหลัง นำไปใช้ คิวของคำขอที่เลือนไว้ ซึ่งสะสมการดำเนินการในระหว่างสถานะ unsatisfied และส่งมันเมื่อ satisfied ถูกกลับคืนมา

รูปแบบ ReachabilityManager กับ delegate เหมาะสมสำหรับงานนี้: NWPathMonitor แจ้งตัวจัดการ ตัวจัดการอัพเดตคิวและ UI เมื่อสถานะเปลี่ยนเป็น satisfied คิวจะถูกล้างโดยอัตโนมัติ และ UI จะได้รับการแจ้งการเชื่อมต่อใหม่

NWPathMonitor vs Reachability

ก่อน NWPathMonitor โซลูชันมาตรฐานสำหรับการตรวจสอบเครือข่ายใน iOS คือไลบรารี Reachability ของ Apple (ตัวอย่างจากเอกสาร) ที่สร้างบน SystemConfiguration ความแตกต่างหลัก: Reachability ทำงานผ่าน SCNetworkReachability ด้วย C ไม่รองรับชนิดเครือข่ายที่ทันสมัย และให้เฉพาะคำตอบแบบไบนารีเกี่ยวกับความพร้อม

NWPathMonitor แก้ไขข้อจำกัดเหล่านี้: เขียนด้วย Swift รองรับ VPN, multipath, 5G และ LTE ให้ข้อมูลในรายละเอียดเกี่ยวกับแต่ละอินเทอร์เฟส และทำงานแบบไม่ซังโครนัสผ่าน GCD Reachability ยังคงใช้ในโครงการที่รองรับ iOS 11 และต่ำกว่า

ลักษณะNWPathMonitorReachability
รุ่นต่ำสุดiOS 12iOS 2
ภาษาSwift (Network)C (SystemConfiguration)
ชนิดอินเทอร์เฟสWi-Fi, Cellular, Ethernet, VPNWi-Fi, WWAN (ทั่วไป)
isExpensiveมีไม่มี
ไม่ซังโครนัสGCD (dispatch queue)RunLoop
หลายอินเทอร์เฟสมี (multipath)ไม่มี

เมื่อไหร่ที่ควรใช้ Reachability

หากแอปพลิเคชันของคุณรองรับ iOS 11 และต่ำกว่า Reachability ยังเป็นตัวเลือกเดียว สำหรับ โครงการ iOS 12+ แนะนำให้ใช้ NWPathMonitor โดยตรง — มันผสานกับโค้ด Swift สมัยใหม่ Combine และ SwiftUI ได้ดีกว่า

การย้ายจาก Reachability ไปยัง NWPathMonitor ทำได้ง่าย: เพียงแทนที่การเรียก SCNetworkReachability ด้วย NWPathMonitor โดยรักษาตรรกะการจัดการเดิมแบบเดิม ชั้นการที่เป็นนามธรรม (NetworkMonitorProtocol) จะช่วยให้สามารถสลับระหว่างการนำไปใช้โดยไม่ต้องเปลี่ยนตรรกะธุรกิจของแอปพลิเคชัน

คำถามที่พบบ่อย

รุ่น iOS ต่ำสุดที่ต้องการสำหรับ NWPathMonitor คืออะไร?

NWPathMonitor ใช้งานได้ตั้งแต่ iOS 12.0, macOS 10.14, watchOS 5.0 และ tvOS 12.0 สำหรับโครงการที่รองรับรุ่นเก่ากว่า ให้ใช้ Reachability จาก SystemConfiguration หรือไลบรารีห่อหุ้มที่มีการคอมไพล์แบบมีเงื่อนไขผ่าน #available

NWPath.Status.satisfied แตกต่างจาก unsatisfied อย่างไร?

Satisfied หมายความว่าทราฟิคสามารถผ่านอย่างน้อยหนึ่งอินเทอร์เฟสได้ Unsatisfied — ไม่มีอินเทอร์เฟสใด เสรียมอยู่ สถานะ requiresConnection — เส้นทางต้องการสร้างการเชื่อมต่อ (ตัวอย่าง VPN ไม่ได้เชื่อมต่อ) และทราฟิคไม่สามารถผ่านได้ชั่วคราว

จะระบุชนิดเครือข่าย — Wi-Fi หรือมือถือ ได้อย่างไร?

ใช้เมธอด usesInterfaceType บน NWPath: path.usesInterfaceType(.wifi) สำหรับ Wi-Fi, path.usesInterfaceType(.cellular) สำหรับข้อมูลมือถือ เมธอดจะคืนค่า true หากทราฟิคปัจจุบันผ่านชนิดอินเทอร์เฟสที่ระบุ

จำเป็นต้องยกเลิก NWPathMonitor เมื่อเข้าสู่แบ็กกราวน์หรือไม่?

แนะนำให้หยุดการตรวจสอบในแบ็กกราวน์เพื่อประหยัดแบตเตอรี่ การเรียก monitor.cancel() ใน applicationDidEnterBackground และเริ่ม start ใหม่ใน applicationWillEnterForeground จะลดการใช้พลังงาน ใช้ Background Task สำหรับการดำเนินการที่สำคัญ

จะจัดการกับ captive portal โดยใช้ NWPathMonitor อย่างไร?

NWPathMonitor อาจแสดง satisfied แม้จะมี captive portal เพื่อระบุการเข้าถึงอินเทอร์เน็ตจริง ให้ดำเนินการ คำขอ HTTP ไปยังจุดสิ้นสุดที่เชื่อถือได้ ผ่าน NWConnection หากมีการเลียนเส้นทางเกิดขึ้น — พอร์แทลทำงานอยู่ และต้องการการรับรองอนุญาตใน WebView

สรุป

  • NWPathMonitor — คลาสของเฟรามว์ค Network สำหรับตรวจสอบเส้นทางเครือข่ายใน iOS 12+ พร้อมการรองรับ GCD และ Combine
  • NWPath ประกอบด้วยข้อมูลที่สมบูรณ์เกี่ยวกับการเชื่อมต่อ: สถานะ, ชนิดอินเทอร์เฟส, ค่าใช้จ่าย, ข้อจำกัด และเกตแวย์
  • เมธอด start เริ่มการตรวจสอบบนคิวที่ระบุ, pathUpdateHandler รับการอัพเดต NWPath
  • คุณสมบัติ isExpensive และ isConstrained ช่วยระบุการเชื่อมต่อที่มีค่าใช้จ่ายและถูกจำกัด
  • NWPathMonitor แทนที่ Reachability สำหรับ iOS 12+ โดยให้ API ที่หลากหลายกว่าใน Swift
  • การกรองตามชนิดอินเทอร์เฟส ทำได้ผ่านตัวเริ่มต้นด้วยพารามิเตอร์ requiredInterfaceType
  • สำหรับการทำงานในแบ็กกราวน์ การตรวจสอบควรหยุดและเริ่มใหม่เมื่อสลับระหว่าง foreground และ background

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม