2016-10-10 4 views
0

私はIOSアプリケーションを開発しています。私はユーザーに必然的にアップグレードさせる必要があるユースケースがあります。たとえば、ユーザーはバージョン1であり、バージョン2と3は2つあります(現在はアプリストアにあります)。バージョン1にセキュリティ上の脆弱性があることが判明したので、ユーザーにアプリストア経由でアップグレードするよう警告を出します。最小バージョンの基準に基づいてIOSアプリケーションの強制アップデートを実装する

1. Implement a rest service which vends the minimum required version. 
2. Implement a local upgrade handler that calls the rest service, 
    gets the current version(natively) and compares the version 
    against the min required version. 
3. If the version is lower than min required version, upgrade by 
    opening app store. 

これまでのところ、私は成功したRESTサービスとアップグレードハンドラの一部を実装することができました - :今私のアプローチは、以下です。マイアラートビューのコードは次のようになります -

private func alertUserWithHandler(title: String?, message: String, upgradeHandler: ((UIAlertAction) -> Void)?){ 
    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: upgradeHandler)) 
    self.presentViewController(alert, animated: true, completion: nil) 
    AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate)) 
} 

そして、私のアップグレードハンドラが見え、次のように: -

// The upgrade handler takes the user to the AppStore. 
func upgradeHandler(action:UIAlertAction) { 
    UIApplication.sharedApplication().openURL(NSURL(string:"location in appstore")) 
} 

このアプローチの問題は、そのないブロッキングハンドラです。ユーザーは[OK]ボタンを押してからアプリストアに移動し、アプリを再開するために戻ることができます。アップグレードを強制します(つまり、アップグレードが正常に完了するまでユーザーはアプリを使用できません)。

誰かがユーザーのアップグレードを強制する良い方法を提案できますか?

+0

ボタンを持たない 'upgradeHandler()'に別のAlertControllerを表示することができます。 – FelixSFD

+0

@FelixSFD - それ以外はどうやってハンドラを渡すのですか? –

+0

アプリの開始時にユーザー確認リクエストを含むアプリバージョンを送信することができます。バックエンドでバージョンが古すぎる場合はエラーを返します。アプリケーションでは、このエラーを個別に処理することはできません。 – MaksTheAwesome

答えて

1

バージョンとビルドをパラメータとして持つWebサービスにヒットするシングルトンクラスでsharedInstance()を作成しました。それが本当に戻ってくると、私は、Webサービスが誤って戻ってくるまで解読できない、アプリケーション上のモーダルビューを提示します。それをsharedInstanceに入れることで、すべてのView Controllerで呼び出す必要はありません。私はまた、アプリが最初に起動したときにそれを一度呼びます。

関連する問題