【Swift3】 최신 버전의 설치를 촉구하는 경고 표시
단말기에 인스톨 하고 있는 version보다 새로운 version가 릴리스 되고 있었을 경우에 인스톨을 촉구하는 경고를 표시시키는 코드입니다.
이전, Objective-C로 작성 Qiita에 들었습니다만, 이번은 Swift3로 재작성했습니다.
코드
import UIKit
/************変更箇所*************/
private let appId = ""
private let title = "アップデート"
private let message = "新しいVersionのインストール準備ができています。"
private let okBtnTitle = "今すぐインストール"
private let cancelBtnTitle = "後で"
/*******************************/
private var topViewController: UIViewController? {
guard var topViewController = UIApplication.shared.keyWindow?.rootViewController else { return nil }
while let presentedViewController = topViewController.presentedViewController {
topViewController = presentedViewController
}
return topViewController
}
enum UpdateType {
case normal
case force
}
class UpdateChecker {
static func run(updateType: UpdateType) {
guard let url = URL(string: "https://itunes.apple.com/jp/lookup?id=\(appId)") else { return }
let request = URLRequest(url: url)
let session = URLSession(configuration: .default)
let task = session.dataTask(with: request, completionHandler: {
(data, _, _) in
guard let d = data else { return }
do {
guard let results = try JSONSerialization.jsonObject(with: d, options: .allowFragments) as? NSDictionary else { return }
guard let resultsArray = results.value(forKey: "results") as? NSArray else { return }
guard let storeVersion = (resultsArray[0] as? NSDictionary)?.value(forKey: "version") as? String else { return }
guard let installVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else { return }
guard installVersion.compare(storeVersion) == .orderedAscending else { return }
showAlert(updateType: updateType)
} catch {
print("Serialization error")
}
})
task.resume()
}
private static func showAlert(updateType: UpdateType) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
let okAction = UIAlertAction(title: okBtnTitle, style: .default, handler: { Void in
guard let url = URL(string: "itms-apps://itunes.apple.com/app/id\(appId)") else { return }
UIApplication.shared.open(url, options: [:], completionHandler: nil)
})
alert.addAction(okAction)
if updateType == .normal {
let cancelAction = UIAlertAction(title: cancelBtnTitle, style: .cancel, handler: nil)
alert.addAction(cancelAction)
}
topViewController?.present(alert, animated: true, completion: nil)
}
}
사용법
알림을 표시하고자 하는 시점에
UpdateChecker.run(updateType: .normal)
강제 업데이트 하고 싶은 경우는 아래의 코드를 applicationDidBecomeActive에 쓰면 좋다고 생각합니다.
UpdateChecker.run(updateType: .force)
코드상에서 아래와 같이 묶어 있는 부분은 적절히 변경해 주세요.
/************変更箇所*************/
/*******************************/
간략한 설명
아래 URL을 두드리면 앱의 정보를 json으로 얻을 수 있으므로,
"https://itunes.apple.com/jp/lookup?id=\(appId)"
퍼스하고, 단말에 인스톨 하고 있는 앱의 version과 비교해, 새로운 것이라면 showAlert 메소드에 날리도록(듯이) 하고 있습니다.
do {
guard let results = try JSONSerialization.jsonObject(with: d, options: .allowFragments) as? NSDictionary else { return }
guard let resultsArray = results.value(forKey: "results") as? NSArray else { return }
guard let storeVersion = (resultsArray[0] as? NSDictionary)?.value(forKey: "version") as? String else { return }
guard let installVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else { return }
guard installVersion.compare(storeVersion) == .orderedAscending else { return }
showAlert(updateType: updateType)
}
전환 버튼을 탭하면 URL 스키마를 두드려 AppStore로 날아갑니다.
guard let url = URL(string: "itms-apps://itunes.apple.com/app/id\(appId)") else { return }
UIApplication.shared.open(url, options: [:], completionHandler: nil)
Reference
이 문제에 관하여(【Swift3】 최신 버전의 설치를 촉구하는 경고 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/s0hno/items/80260013d47f84194dee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)