Firebase Remote Configの導入手順について

Firebase Remote Configって何?

Firebase Remote Config とはアプリ内パラメータを定義し、その値をクラウドで更新することができます。
Firebaseのコンソール側でKey:Valueの値を登録しておくことができます。

メリット

Firebase Remote Configのメリットとしては、アプリの動作や外観を変更する際に、アプリのアップデートを配布せずとも、Firebase Remote Configのコンソール上で設定を修正するだけで変更することができます。
基本的に全ユーザーに対して同じKey-Valueをリアルタイムに配信・反映でき、

  • 条件(アプリバージョン、OS、指定%のユーザー等)を指定してValueを変える事もできます。
  • A/Bテストにも使用することができます。

実行環境

  • Xcode11.7
  • Swift5

導入手順

Firebaseコンソールでの設定

1. Firebaseコンソールを開き、メニューからRemote Configを選択します。

2. 条件の設定

ここでは、それぞれ値を取得する際の条件を設定することができます。
今回はアプリのバージョンが2.54以上の場合とそれよりも小さい場合で条件を設定しています。
image.png

バージョン以外にも

  • 現在の時刻とデバイスで取得された時刻
  • デバイスの地域 / 国
  • ビルド番号

などで条件を設定することも可能です。

3. パラメーターキーの設定

上記で決めた条件に基づいて、

  • アプリバージョン >= 2.54 の場合:ヤフーのURL
  • アプリバージョン < 2.54 の場合:グーグルのURL

を取得するように設定しています。

これによってアプリのバージョンによって遷移する先のURLを変更することができます。

Swift側

1.Remote Configオブジェクトの作成

import FirebaseRemoteConfig

remoteConfig = RemoteConfig.remoteConfig()
let settings = RemoteConfigSettings()
remoteConfig.configSettings = settings

// フェッチ間隔の設定(開発環境のみ設定)
settings.minimumFetchInterval = 0

Remote Configは基本的に一度フェッチしたらキャッシュ時間内(デフォルトでは12時間)では再度フェッチされません。

そのため、開発環境で複数回にわたってフェッチを確認することが必要な場合は、上記のようにminimumFetchIntervalを設定する必要があります。

2.デフォルト値の設定

Firebase Remote Config側に値が設定されていなかった時やFirebase Remote Configからまだ値を取得できていない時に使うデフォルト値をここで設定します。

plistファイルを作成し、一連のパラメータ名とデフォルト値を定義します。

<plist version="1.0">
<dict>
	<key>url</key>
	<string>https://www.google.com/</string>
</dict>
</plist>
// RemoteConfigDefaultsはplistファイルのファイル名
remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults")

3.値の読み込み

remoteConfig.fetchAndActivate { (status, error) -> Void in
            if status == .successFetchedFromRemote || status == .successUsingPreFetchedData {
                // fetchが完了した際の処理を記述
                print("Config fetched!")
                // 今回取得した値はjson形式のためデコードする必要があります
                let jsonString = remoteConfig["parameter"].stringValue
                let jsonData = jsonString?.data(using: .utf8)
                do {
                    // getUrlにRemote Configから取得した値を格納している
                    var urlDictionary = try JSONSerialization.jsonObject(with: jsonData!, options: [])
                    guard let dictionary = urlDictionary as? [String: Any],
                    let getUrl = dictionary["url"] as? [String: Any] else { return }
            } else {
                // fetchに失敗した際の処理を記述
 }

fetchAndActivateによってfetchした値を有効化する処理を一度に行っています。

このように実装することでアプリのバージョンを条件に画面遷移するURLを切り替えることができます。

おわりに

Firebase Remote Configのメリットと使い方を紹介しました。
よく使われる利用例としてはアプリのバージョンを管理して強制アップデートを促す際に利用されるそうなので、導入してみてはいかがでしょうか。