[swift] Reachability를 사용해 네트워크 연결 상태가 변경되는 경우 알림 보내기

iOS 앱을 개발하다보면, 사용자가 네트워크에 연결되어 있는지 여부를 확인해야 할 때가 있습니다. 네트워크 연결 상태가 변경될 때마다 적절한 조치를 취하려면 알림을 받을 필요가 있습니다. 이를 위해 Reachability라는 라이브러리를 사용하여 네트워크 연결 상태 변경을 감지하고 알림을 보낼 수 있습니다.

Reachability 라이브러리 설치

Reachability는 네트워크 상태를 확인하기 위한 라이브러리로, 네트워크 연결 상태를 모니터링하고 해당 상태를 감지할 수 있습니다. Reachability는 Cocoapods를 통해 설치할 수 있습니다.

# Podfile

platform :ios, '9.0'
use_frameworks!

target 'YourApp' do
    pod 'ReachabilitySwift'
end

위의 Podfile을 사용하여 Reachability를 설치한 후, 콘솔에서 pod install 명령어를 실행하여 라이브러리를 다운로드하고 프로젝트에 추가합니다.

Reachability 사용하기

이제 Reachability를 사용하여 네트워크 연결 상태가 변경되는 경우 알림을 받을 수 있습니다.

import Reachability

class NetworkManager {
    static let shared = NetworkManager()
    
    let reachability = try? Reachability()
    
    private init() {
        NotificationCenter.default.addObserver(self, selector: #selector(networkStatusChanged), name: .reachabilityChanged, object: nil)
        
        do {
            try reachability?.startNotifier()
        } catch {
            print("Failed to start reachability notifier")
        }
    }
    
    @objc func networkStatusChanged(notification: Notification) {
        guard let reachability = notification.object as? Reachability else { return }
        
        if reachability.connection != .unavailable {
            // 네트워크 연결됨
            print("네트워크 연결됨")
        } else {
            // 네트워크 끊김
            print("네트워크 끊김")
        }
    }
}

위의 예제 코드에서는 NetworkManager라는 싱글톤 클래스를 생성하여 Reachability를 사용합니다. reachabilityChanged 노티피케이션을 옵저빙하고, 네트워크 상태가 변경되면 networkStatusChanged 메소드가 호출됩니다. 메소드 내에서는 reachability.connection을 확인하여 연결 또는 끊김 여부를 판단합니다.

사용 예시

NetworkManager를 이용하여 네트워크 연결 상태 변경을 감지하고 알림을 받을 수 있습니다. 예를 들어, 앱 내에서 네트워크 연결 상태를 체크하여 사용자에게 알림을 보여줄 수 있습니다.

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        NotificationCenter.default.addObserver(self, selector: #selector(networkStatusChanged), name: .reachabilityChanged, object: nil)
    }
    
    @objc func networkStatusChanged(notification: Notification) {
        guard let reachability = notification.object as? Reachability else { return }
        
        if reachability.connection != .unavailable {
            // 네트워크 연결됨
            showConnectionStatus(status: "네트워크 연결됨")
        } else {
            // 네트워크 끊김
            showConnectionStatus(status: "네트워크 끊김")
        }
    }
    
    func showConnectionStatus(status: String) {
        let alertController = UIAlertController(title: "네트워크 상태", message: status, preferredStyle: .alert)
        let okAction = UIAlertAction(title: "확인", style: .default, handler: nil)
        alertController.addAction(okAction)
        present(alertController, animated: true, completion: nil)
    }
}

위의 예제 코드에서는 viewDidLoad 메소드에서 reachabilityChanged 노티피케이션을 옵저빙하여, 네트워크 상태가 변경되는 경우 networkStatusChanged 메소드가 호출되도록 설정합니다. 메소드 내에서는 showConnectionStatus 메소드를 호출하여 상태를 사용자에게 알립니다.

결론

Reachability를 사용하여 네트워크 연결 상태를 감지하고 알림을 받는 방법을 알아보았습니다. 네트워크 상태를 감지하고 적절한 조치를 취하는 것은 사용자 경험 향상에 도움이 될 수 있습니다. Reachability를 사용하여 앱을 개발할 때, 네트워크 연결 상태를 고려해 보세요.