앱 사용 도중 네트워크가 끊긴다면 우리는 이런 화면을 볼 수 있다.
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 |