WebApp_UIKit_Base/WebAppUIKitBase/Scene/IntroVC.swift

209 lines
8.6 KiB
Swift

//
// IntroVC.swift
// WebAppUIKitBase
//
// Created by Sean Kim on 10/21/24.
//
import UIKit
import Alamofire
import SnapKit
import CoreLocation
class IntroVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
CommonUtils.shared.locationDelegate = self
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if isIllegalDevice() {
self.makeUIAlert(title: "안내",
message: "변경된 OS를 사용하는 기기는 서비스를 이용할 수 없습니다.",
okTitle: "확인") { _ in
exit(1)
}
} else {
if NetworkReachabilityManager.default?.isReachable == false {
self.makeUIAlert(title: "서비스 연결 문제 발생",
message: """
네트워크 문제로 서비스에 연결하지 못하였습니다.
네트워크 상태를 확인후 다시 실행해주세요.
""",
okTitle: "확인") { _ in
exit(1)
}
} else {
self.checkAppVersion()
}
}
}
private func checkAppVersion() {
Task {
do {
// VER_URL, VER_PARAM, VER_HEADERS
let result = try await CommonUtils.shared.afGET(url:VER_URL,
param: VER_PARAM,
headers: VER_HEADERS)
printLog("Success : \(result)")
let response = CommonUtils.shared.jsonToType("\(result)", as: VersionResponse.self)
if let code = response?.status.code, code == "000" {
if let currentVer = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String,
let finalVer = response?.data.finalVer, let forceVer = response?.data.forceVer,
let checkVer = response?.data.checkVer, let forceUpdtYn = response?.data.forceUpdtYn
{
switch self.versionCompare(currentVer, finalVer) {
case .equal, .bigger: //
CommonUtils.shared.checkLocationPermission()
case .smaller:
switch self.versionCompare(currentVer, forceVer) {
case .equal, .bigger:
if forceUpdtYn == "P" {// PASS P Y .
self.makeUITwoAlert(title: "업데이트 안내",
message: "최신 버전이 새로 나왔어요\n지금 업데이트하시겠어요?",
okTitle: "지금 업데이트",
okAction: { _ in
let appStoreURL = URL(string: "http://www.naver.com")!
UIApplication.shared.open(appStoreURL, options: [:], completionHandler: nil)
exit(1)
}, cancelTitle: "나중에") { _ in
CommonUtils.shared.checkLocationPermission()
}
} else {
CommonUtils.shared.checkLocationPermission()
}
case .smaller:
self.makeUIAlert(title: "업데이트 안내",
message: "앱을 사용하시려면\n최신버전으로 업데이트 해주세요",
okTitle: "지금 업데이트") { _ in
let appStoreURL = URL(string: "http://www.naver.com")!
UIApplication.shared.open(appStoreURL, options: [:], completionHandler: nil)
exit(1)
}
}
}
}
else {
throw NSError(domain: "com.version.API",
code: Int(response?.status.code ?? "") ?? -1,
userInfo: [NSLocalizedDescriptionKey: "Version is Wrong"])
}
} else {
throw NSError(domain: "com.version.API",
code: Int(response?.status.code ?? "") ?? -1,
userInfo: [NSLocalizedDescriptionKey: "Version is Wrong"])
}
} catch {
printLog("App Check ERROR: \(error)")
self.makeUIAlert(title: "서비스 연결 문제 발생",
message: """
일시적인 장애 또는 네트워크 문제로
서비스에 연결하지 못하였습니다.
문제가 계속될 경우 고객센터로 문의해 주세요
""",
okTitle: "확인") { _ in
exit(1)
}
}
}
}
/// compareVer .
///
/// [ : (RESULT) .]
private func versionCompare(_ currentVer: String, _ compareVer: String) -> CompareVersion {
let currentArray = currentVer.components(separatedBy: ["."]).map {Int($0) ?? 0}
let compareArray = compareVer.components(separatedBy: ["."]).map {Int($0) ?? 0}
printLog("Ver current: \(currentArray)")
printLog("Ver force: \(compareArray)")
for i in 0 ..< currentArray.count {
if currentArray[i] > compareArray[i] {
// == .
return .bigger
} else if currentArray[i] < compareArray[i] {
// ==
return .smaller
}
}
//
return .equal
}
private func moveToWeb() {
let VC = MainWebVC()
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let window = windowScene.windows.first {
window.rootViewController = VC
}
}
}
extension IntroVC: LocationDelegate {
func checkPermission(_ type: Bool) {
if type {
// CommonUtils.CommonUtils.shared.saveUdData("Y", forKey: "locationYn")
} else {
// CommonUtils.CommonUtils.shared.saveUdData("N", forKey: "locationYn")
self.moveToWeb()
}
}
func getLocation(_ location: CLLocation) {
CommonUtils.shared.locationManager.stopUpdatingLocation()
let lat = location.coordinate.latitude
let lng = location.coordinate.longitude
CommonUtils.shared.lastLocation = location
printLog("Intro \(String(describing: CommonUtils.shared.lastLocation))")
printLog("Intro Delegate = lattitude : \(lat) longitude : \(lng)")
printLog("위치 권한 허용 > 웹뷰 start")
self.moveToWeb()
}
}
enum CompareVersion: Int {
case equal = 0
case bigger
case smaller
}
class VersionResponse: Codable {
let status: Status
let data: VersionData
}
/// API
///
/// code: API (e.g. 000: )
///
/// message:
class Status: Codable {
let code, message: String
}
/// API
///
/// finaclVer:
///
/// forceVer:
///
/// checkVer:
///
/// forceUpdYn: P(Y) finalVer
///
/// remark:
class VersionData: Codable {
let finalVer, forceVer, checkVer: String?
let forceUpdtYn: String?
let remark: String?
}