[swift] Reachability를 사용한 로그인 여부 확인하기

하나의 핵심적인 기능은 앱 사용자가 로그인 상태인지 확인하는 것입니다. 이를 위해 네트워크 상태를 체크하여 오프라인인 경우에는 로그인 버튼을 비활성화시켜야 합니다. 이때 Reachability를 사용하면 네트워크 연결 상태를 간단하게 확인할 수 있습니다.

Reachability 클래스 추가하기

다음과 같이 Reachability 클래스를 추가합니다. 이 예제에서는 Reachability.swift 파일을 사용합니다.

import Foundation
import SystemConfiguration

public class Reachability {

    class func isConnectedToNetwork() -> Bool {

        var zeroAddress = sockaddr_in()
        zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
        zeroAddress.sin_family = sa_family_t(AF_INET)

        guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
            $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { zeroSockAddress in
                SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
            }
        }) else {
            return false
        }

        var flags: SCNetworkReachabilityFlags = []
        if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {
            return false
        }

        let isReachable = flags.contains(.reachable)
        let needsConnection = flags.contains(.connectionRequired)
        return (isReachable && !needsConnection)
    }
}

Reachability를 사용하여 네트워크 상태 확인하기

앱의 뷰 컨트롤러에서 다음 코드를 사용하여 네트워크 상태를 확인하고 로그인 버튼을 활성화/비활성화시킬 수 있습니다.

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var loginButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Reachability를 사용하여 네트워크 상태 확인
        if Reachability.isConnectedToNetwork() {
            loginButton.isEnabled = true
        } else {
            loginButton.isEnabled = false
        }
    }
}

위의 예제에서는 Reachability 클래스의 isConnectedToNetwork() 메서드를 사용하여 네트워크 상태를 확인합니다. 만약 네트워크에 연결되어 있으면 로그인 버튼을 활성화시키고, 그렇지 않으면 비활성화시킵니다.

이제 앱이 로그인 상태일 때만 로그인 버튼을 활성화할 수 있으며, 네트워크 연결 상태에 따라 적절한 조치를 취할 수 있습니다.

더 많은 정보 및 상세한 사용법은 Reachability 라이브러리의 문서를 참고하세요.