Network 프레임워크를 사용해서 현재 기기의 인터넷 연결 상태와 연결 타입을 알 수 있다.
네트워크 연결을 지속적으로 감지하여 연결이 끊기면 실시간으로 알려준다.
1. NetworkMonitor 클래스 생성
Network 프레임워크를 import하고 네트워크 연결을 감지하는 싱글톤 패턴의 클래스를 별도로 만든다. NWPathMonitor로 현재 네트워크 연결 상태를 확인할 수 있다
// file: NetworkCheck.swift
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
}
}
}
2. AppDelegate에서 클래스 호출
그 다음 앱델리게이트에서 앱이 구동될때 실행되는 함수에서 위에서 작성한 싱글톤 클래스를 호출해준다.
네트워크 변화 상태는 실시간으로 monitor.pathUpdateHandler = { path in... 클로저에서 확인할 수 있다.
네트워크가 변하면 이부분이 호출이되고 path 변수에 현재 네트워크 정보가 들어있다.
그리고 아래처럼 뷰컨트롤러가 로드되었을때에 네트워크를 체크해 볼 수도 있다.
https://qteveryday.tistory.com/m/314