プログラミング

【Swift】iOSでのFirebase Remote Configの使い方

swift-eyecatch

Firebase Remote Configは、コンソールで値を設定することで、アプリを開くタイミングでその設定値をアプリ利用者に反映させることが出来ます。

いわば、文字列をレスポンスする簡単なAPIです。

key value方式で値を設定しておくだけなので、様々な用途で使用でき、しかもコンソールからいつでも値を変更することが可能です。

iOS で Firebase Remote Config を使ってみる

Firebase Remote Configの使用例

以前のクライアントワークでは、アプリの強制アップデートの実装に、Firebase Remote Configを使用しました。

アプリを開くたびに、強制アップデートが必要なバージョンコードをレスポンスし、アプリ内でのBuild Versionと比較して、ポップアップ等を用いてアプリのアップデートをお知らせするといった実装です。

このケースでは、Build Versionは”X.X.X”という文字列なので、Firebase Remote Configでレスポンスする値も、”X.X.X”とフォーマットを揃えました。

これにより、「ポップアップ必要なし」「アップデートがあることを知らせるポップアップを表示」「アップデートしないとアプリが利用できない」という処理を出し分けることが出来ます。

プロジェクトにもよると思いますが、アップデートを、バグフィックス、マイナーアップデート、メジャーアップデートと分けて、定義するといい感じかと思います。

Firebase Remote Configを実装する

Firebaseのアプリへの組み込みとコンソールでのFirebase Remote Configの設定は事前に完了している前提で進めます。

ほとんど、公式ドキュメントの通りに実装しています。

// MARK: - Firebase Remote Config Force Update
extension AppDelegate {

    private func checkForUpdates() {
        AppDelegate.shared.checkForUpdates(completion: { latestVersion, force in
            self.showAlert(latestVersion, force)
        })
    }

    func checkForUpdates(completion: @escaping ((_ latestVersion: String, _ force: Bool) -> Void)) {
        let remoteConfig = RemoteConfig.remoteConfig()
        let settings = RemoteConfigSettings()
        settings.minimumFetchInterval = 0; // for test
        remoteConfig.configSettings = settings
        remoteConfig.fetch() { (status, error) -> Void in
            guard status == .success else {
                return
            }
            remoteConfig.activate() { (changed, error) in
                guard let fetchedString = remoteConfig.configValue(forKey: "version").stringValue else {
                    return
                }
                //比較処理など
                completion(version, false)
            }
        }
        remoteConfig.fetch(completionHandler: nil)
    }

    private func showAlert(_ latestVersion: String, _ force: Bool) {
        // alert表示処理など
    }
}

fetch出来る回数はデフォルトでは12時間以内で1回となっています。1度値を取得すると、12時間以内はfetchされた値のみが参照出来るという仕様のようです。

ただし、実装段階では、数値の変更が反映されるかどうかの確認などが必要になってきますので、このminimumFetchIntervalを0に設定すると良さげです。(そして、リリースのタイミングではずす、外さなくても動きはする)

設定値の取得は、remoteConfigをfetchしたあとにactivateすれば、configValue(forKey)で取得出来るようになります。

あとは、アプリを立ち上げた時などで、”checkForUpdates”を呼ぶようにします。