본문 바로가기

IOS Swift

iOS App 강제 업데이트 기능

목차

  1. 사용자에게 안좋은 경험을 주는데 강제 업데이트 기능 왜 넣는걸까?
  2. 강제 업데이트 넣는 법

1. 강제 업데이트 기능 왜 넣는걸까?

'강제 업데이트 기능을 넣으면 뭐가 좋은걸까?' 라는 궁금증을 가지고 있다가
은행앱을 보는 순간 음.. 어? 왜 (구)신한카드 앱을 업그레이드 하지 않고 새로 만든거지??

아 설마!!

💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡

깨달음을 얻었습니다. (추측이긴 하지만)

앱 버전이 올라갈 때 마다 API가 추가되거나 수정되거나 그럴 수 있잖아요.

그런데 앱에는 앱버전이 있잖아요?!

그래서 사용자가 옛날 버전의 앱을 사용하게 하려면 백엔드 측에서 옛날 API도 고려해서 코드를 작성해야겠죠!

그것을 방지하려면 저렇게 옛날 앱을 켜면 새로운 앱으로 설치받거나 이동되도록 하면? 옛날 API는 필요하지 않고 최신의 API만 사용할 수 있는거죠!

은행은 금융쪽이니까 아무래도 그런 부분 민감하지 않을까???? 생각하고 있습니다!

아무튼 그래서 강제 업데이트 기능을 넣으면 앱을 새로 만들지 않고도 옛날 API를 사용하지 않도록 할 수 있기에 같은 이유이지 않을까 합니다.

 

2. 강제 업데이트 하는 법

  • 버전 체크하는 API 만들기
  • 클라이언트에서 확인

 

- 버전 체크하는 API 만들기

말 그대로 백엔드 측에서 앱 버전을 체크하는 API를 만들어서 이걸로 강제 업데이트 기능을 활성/비활성 하는 거에요!

스플래쉬 화면에서 설치되어있는 앱 버전을 보내고 업데이트 해야 하는지 판별해서 서버에서 응답으로 Bool 값으로 보내주도록 구현하면 되요.

 

- 앱 내에서 확인하는 방법

비추.. 앱스토어에 새로운 버전이 올라오고 24시간이 지나서야 최신 버전을 가져왔음 🥹

스택오버플로우 보니 일반적으로 업데이트된 앱 정보가 App Store Connect에서 공개되기까지 24시간 지연이 있다고 하네요.

(출처: https://stackoverflow.com/questions/43226752/itunes-lookup-api-return-old-data-in-my-app)

func shouldUpdate() -> Bool {
        
        guard
            let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String,
            let url = URL(string: "https://itunes.apple.com/lookup?bundleId=앱의 번들아이디"),
            let data = try? Data(contentsOf: url),
            let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any],
            let results = json["results"] as? [[String: Any]],
            !results.isEmpty,
            let appStoreVersion = results[0]["version"] as? String
        
        else { return false }
        
        
        let nowVersionArr = version.split(separator: ".").map { $0 }
        let storeVersionArr = appStoreVersion.split(separator: ".").map { $0 }
        
        print(nowVersionArr)
        print(storeVersionArr)
        
        // Major 또는 Minor 자리가 최신 스토어 버전보다 작으면 -> 업데이트 필요
        if (nowVersionArr[0] < storeVersionArr[0]) ||
            ((nowVersionArr[0] <= storeVersionArr[0]) && (nowVersionArr[1] < storeVersionArr[1])) {
            return true
        }
        
        return false
    }

 

참고한 자료

https://velog.io/@sso0022/iOS-%EA%B0%95%EC%A0%9C-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%95%B1%EC%8A%A4%ED%86%A0%EC%96%B4-%EC%B5%9C%EC%8B%A0%EB%B2%84%EC%A0%84-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0

 

[iOS] 강제 업데이트 / 앱스토어 최신버전 확인하기

서비스를 안정적으로 이용하기 위해 업데이트를 해주세요 ! 하는 법 🐶

velog.io

 

반응형