본문 바로가기

iOS

[iOS] 네트워크 연결은 코드로 어떻게 확인할까?

 

앱 사용 도중 네트워크가 끊긴다면 우리는 이런 화면을 볼 수 있다.

 

 

네트워크 연결이 끊어질 때.

 

iOS 에선 네트워크 통신을 하고있는지, 하지 않는지 확인할 수 있는 프레임워크가 있다.

import Network

 

위 프레임워크는 실시간으로 네트워크 연결을 감지하여 현재 기기의 인터넷 연결상태와 연결타입을 알 수 있도록 알려준다.


 

☑️ 싱글톤 클래스로 네트워크를 연결하는 클래스

import Foundation
import Network

final class NetworkCheck {
    static let shared = NetworkCheck()
    private let queue = DispatchQueue.global()
    private let monitor: NWPathMonitor
    public private(set) var isConnected: Bool = false
    public private(set) var connectionType: ConnectionType = .unknown

    // 연결타입
    enum ConnectionType {
        case wifi
        case cellular
        case ethernet
        case unknown
    }

    // monotior 초기화
    private init() {
        monitor = NWPathMonitor()
    }

    // Network Monitoring 시작
    public func startMonitoring() {
        monitor.start(queue: queue)
        monitor.pathUpdateHandler = { [weak self] path in

            self?.isConnected = path.status == .satisfied
            self?.getConnectionType(path)

            if self?.isConnected == true {
            	print("연결")
            } else {
            	print("연결안됨")
            }
        }
    }

    // Network Monitoring 종료
    public func stopMonitoring() {
        monitor.cancel()
    }

    // Network 연결 타입
    private func getConnectionType(_ path: NWPath) {
        if path.usesInterfaceType(.wifi) {
            connectionType = .wifi
        } else if path.usesInterfaceType(.cellular) {
            connectionType = .cellular
        } else if path.usesInterfaceType(.wiredEthernet) {
            connectionType = .ethernet
        } else {
            connectionType = .unknown
        }
    }
}

 

 

 

☑️ AppDelegate 에서 클래스 호출하기

AppDelegate 파일에서 앱이 구동될 때 실행되는 함수에, 위에서 작성한 싱글톤 클래스를 호출한다.

// file: AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool {
	NetworkCheck.shared.startMonitoring()
	return true
}

 

 

 

☑️ 네트워크 변화 상태는 currentPath 에서

네트워크 변화 상태는 실시간으로 monitor.pathUpdateHandler = { path in... 클로저에서 확인할 수 있다.

네트워크가 변한다면 이 부분이 호출이되고 path 변수에 현재 네트워크 정보가 들어있다.

if monitor.currentPath.status == .satisfied {
    print("연결 됨")
} else {
    print("연결 끊김")
}


if monitor.currentPath.isExpensive {
    // 셀룰러, 핫스팟으로 연결될 경우
} 

if monitor.currentPath.isConstrained {
    // 데이터 전송속도 400kb이하 (저전송 데이터 모드)
}

 

 

 

 

 

 

✅ 정리: 'Network' 프레임워크는 실시간으로 네트워크 연결을 감지하여 현재 기기의 인터넷 연결상태와 연결타입을 알 수 있도록 알려준다. 'currentPath' 를 활용해 네트워크의 변화 상태를 확인할 수 있다.

 

 


 

 

 

 

 

 

 

출처: https://qteveryday.tistory.com/m/314, https://www.vadimbulavin.com/network-connectivity-on-ios-with-swift/

'iOS' 카테고리의 다른 글

[iOS] AppDelegate, SceneDelegate ?  (1) 2022.09.20
[iOS] 왜 UI는 메인스레드에서 업데이트 될까?  (2) 2022.09.06