본문 바로가기

개발

RxSwift로 앱 버전체크 API 통신 로직 만들기

728x90

RxSwift를 사용한 앱 버전 체크 API 통신 로직 구현

RxSwift를 사용하여 앱 버전 체크 API 통신 로직을 간편하고 효율적으로 구현하는 방법은 다음과 같습니다.

1. API 정의 및 모델링

  • 앱 버전 체크 API의 엔드포인트, 요청 및 응답 형식을 정의합니다.
  • 필요한 경우 API 모델을 생성하여 응답 데이터를 구조화합니다.

2. ViewModel 설정

  • ViewModel클래스를 만들고 앱 버전 체크 관련 속성과 메서드를 정의합니다.
  • RxSwift의 Observable을 사용하여 API 통신 로직을 구현하고, 응답 데이터를 처리합니다.
import RxSwift

import Moya

import Alamofire



enum AppVersionCheckResult {

    case newVersionAvailable(String) // 새로운 버전 정보

    case currentVersionUpToDate // 현재 버전이 최신 버전

    case error(Error) // 오류 발생

}



class AppVersionCheckViewModel {

    let appVersionCheckResult = PublishSubject<AppVersionCheckResult>()



    private let provider: MoyaProvider<AppVersionCheckAPI>



    init(provider: MoyaProvider<AppVersionCheckAPI>) {

        self.provider = provider

    }



    func checkAppVersion() {

        provider.request(.checkVersion)

            .asObservable()

            .map { response -> AppVersionCheckResult in

                switch response.result {

                case .success(let value):

                    if let appVersionInfo = try? value.map(to: AppVersionInfo.self) {

                        if appVersionInfo.version > Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "" {

                            return .newVersionAvailable(appVersionInfo.version)

                        } else {

                            return .currentVersionUpToDate

                        }

                    } else {

                        return .error(NSError(domain: "AppVersionCheckError", code: 101, userInfo: nil))

                    }

                case .failure(let error):

                    return .error(error)

                }

            }

            .subscribe(onNext: { [weak self] result in

                self?.appVersionCheckResult.onNext(result)

            })

            .disposed(by: disposeBag)

    }

}

 

3. UI 업데이트 및 로직 처리

  • ViewController에서 ViewModel의 appVersionCheckResult Observable을 구독하고, API 응답 결과에 따라 UI를 업데이트하거나 로직을 처리합니다.
class AppVersionCheckViewController: UIViewController {



    private let viewModel = AppVersionCheckViewModel(provider: MoyaProvider<AppVersionCheckAPI>())

    private let disposeBag = DisposeBag()



    override func viewDidLoad() {

        super.viewDidLoad()



        setupBindings()

    }



    private func setupBindings() {

        viewModel.appVersionCheckResult

            .subscribe(onNext: { [weak self] result in

                switch result {

                case .newVersionAvailable(let version):

                    self?.showNewVersionAlert(version: version)

                case .currentVersionUpToDate:

                    print("현재 버전이 최신 버전입니다.")

                case .error(let error):

                    print("앱 버전 체크 오류: \(error.localizedDescription)")

                }

            })

            .disposed(by: disposeBag)



        // 버튼 클릭 시 버전 체크 수행

        versionCheckButton.rx.tap

            .subscribe(onNext: { [weak self] in

                self?.viewModel.checkAppVersion()

            })

            .disposed(by: disposeBag)

    }



    private func showNewVersionAlert(version: String) {

        let alert = UIAlertController(title: "새로운 버전 출시", message: "버전 \(version)이 출시되었습니다. 지금 업데이트하시겠습니까?", preferredStyle: .alert)

        alert.addAction(UIAlertAction(title: "업데이트", style: .default, handler: { _ in

            // 업데이트 페이지로 이동

        }))

        alert.addAction(UIAlertAction(title: "나중에", style: .cancel, handler: nil))

        present(alert, animated: true)

    }

}

 

4. API 통신 라이브러리 설정

  • Moya 또는 Alamofire 같은 API 통신 라이브러리를 사용하여 API 요청 응답 처리를 수행합니다.