概要
Firebase Remote Configを使用し、強制アップデート機能を実装したので、その過程をまとめたいと思います。
Firebase Remote Configとは
Firebase Remote Configは、クラウド上でkey-valueを管理することができるサービスです。
クラウド上で管理する値を変更するだけで、即座にアプリに変更を反映させることができます。本来であれば、コードを変更し、Appleに審査を通すなどのプロセスが必要ですが、Firebase Remote Configを使えば、すぐにアプリのデータの更新が可能になります。
具体的な用途としては、A/Bテスト、新機能のテスト、今回紹介する強制アップデート機能など様々な使い道があります。
強制アップデート機能について
強制アップデート機能では、Firebase Remote Configを使ってアプリのversionを管理します。
手元にインストールされているアプリのversionとFirebase Remote Configで管理しているversionの値を比較し、Remote Configのversionの方が新しい場合、最新のアプリのインストールを促すアラートを表示します。
致命的なバグが見つかった時やアプリのリニューアルで大幅にUIが変更された時などユーザーにアプリをアップデートしてほしい際、強制アップロード機能を使用します。
実装手順
1. Firebase Remote Configにverを登録する
Firebaseの管理画面から、Remote Configを選択し、「パラーメータを追加」ボタンをタップすると画像のようなキーと値を登録する画面が表示されるので、任意のキーと値を登録するだけで簡単に設定を行うことができます。
2. ダウンロードしているアプリのverを取得する
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
3. Remote Configのverを取得する
func getLatestVersion() {
let expirationDuration: TimeInterval = 30
let versionKey = "pfc_ios_version"
remoteConfig = RemoteConfig.remoteConfig()
// Remote Configからデータを取得
remoteConfig.fetch(withExpirationDuration: expirationDuration) { [weak self] status, error -> Void in
guard let self = self else { return }
if status == .success {
self.remoteConfig.activateFetched()
guard let appStoreVer = self.remoteConfig[versionKey].stringValue else { return }
}
}
}
4. アップロード可能な最新のverがある場合、アップデートを促すアラートを表示する
versionの比較に関してはこちらの記事を参考が参考になりました。
5. アラートタップ後にAppStoreに遷移させる
func launcAppStore() {
// App StoreのアプリのURL
let appURL = ""
guard let url = URL(string: appURL) else { return }
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
他にもSKStoreProductViewController
を使用してアプリ内でAppStoreを開く方法もあります。詳細はこちらの記事が参考になります。
まとめ
今回は、強制アップデート機能実装のためにFirebase Remote Configを使用しました。Remote Configは他の用途でも活用できそうなので、次回は別の機能で使用してみたいです。
参考資料
- [Firebase Remote Config]
(https://firebase.google.com/docs/remote-config?hl=ja) - [[iOS] アプリからApp Storeを表示する方法について]
(https://dev.classmethod.jp/smartphone/launching-app-store-from-ios-app/) - [Swift3でバージョン文字列を比較する]
(https://qiita.com/_mogaming/items/f98ae83f8c72b25a45c2) - [[iOS] アプリからApp Storeを表示する方法について]
(https://dev.classmethod.jp/smartphone/launching-app-store-from-ios-app/)