本記事ではiOSアプリにFirebase.RemoteConfigを導入した際にしたことを紹介します。メモなのでそのまま運用できないかもしれません。
たとえば、ユーザーにアップデートを促す際にアラートを表示させます。
アラートの表示条件としては、ウェブに置いているコンテンツ*1に最新アプリのバージョン(1.0.1)を書いておいて、ユーザーが使用しているアプリ(1.0.0)よりも新しければアラートを表示させる、ということをよくしますよね。

そのほか、「2016年12月30日まではクローズ状態で、2017年1月1日になるとオープン状態にしたい」という要件があるかもしれません。期間が決まっていればアプリにハードコーディングでもしれおけば良いのですが、もし「必要とするコンテンツが揃い次第、オープン状態にしたい」となった場合アプリだけで制御することができません。
そのあたりの制御をFirebase.RemoteConfigを使うことで簡単に使用することができます。
前準備
先にFirebaseの導入を済ませておく必要があります。
Podfile
pod 'Firebase' pod 'Firebase/RemoteConfig'
コンフィグの初期値
default_config.plist

デフォルト値をplistから読み込ませておきます。
import UIKit
import Firebase
import FirebaseRemoteConfig
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var remoteConfig: FIRRemoteConfig?
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FIRApp.configure()
remoteConfig = FIRRemoteConfig.remoteConfig()
remoteConfig?.setDefaultsFromPlistFileName("default_config")
//デベロッパーモードを有効にしておく
if let settings = FIRRemoteConfigSettings(developerModeEnabled: true) {
remoteConfig?.configSettings = settings
}
return true
}
各画面でリモートのコンフィグ値をフェッチする
コンフィグの値はローカルにキャッシュされます。デフォルトでは12時間(43200秒間)キャッシュが保持されます。ここでは30秒キャッシュさせるようにしました。
なんどもサーバーへアクセスすることを防ぐために数回Remote Configへリクエストを送ると、キャッシュされたデータが返ってくるようになります。
import UIKit import FirebaseRemoteConfig class FirstViewController: UIViewController { let remoteConfig = FIRRemoteConfig.remoteConfig() @IBOutlet weak var detailLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() //キャッシュ保持期間を秒単位で指定する remoteConfig.fetch(withExpirationDuration: 30) { [weak self] (status, error) in if status == .success { print("Config fetched!") self?.remoteConfig.activateFetched() } else { print("Config not fetched") } self?.updateDisplay() } self.updateDisplay() } private func updateDisplay() { let p1 = remoteConfig["hogehoge_string"].stringValue let p2 = remoteConfig["hogehoge"].boolValue detailLabel.text = "\(p1) \(p2)" } }
Firebaseコンソールでパラメータを追加・変更する
コンソールでパラメータを追加します。追加できるのは文字列型、数字型、Bool型のようです。

適当なパラメータhogehogeを追加しました。デフォルト値がfalseだったのでtrueにしました。

アプリを起動させるとフェッチが動いて、Firebaseコンソールで設定した値を取得することができます。

let p1 = remoteConfig["hogehoge_string"].stringValue let p2 = remoteConfig["hogehoge"].boolValue detailLabel.text = "\(p1) \(p2)"
またコンソール上で値を変更してみました。

フェッチ期間を30秒に指定しているので、30秒以上経過すると新しい値が反映されることを確認できました。

関連記事
この他にもiOSアプリ開発で見つけたネタや悩んだ内容など紹介しています。Tipsをまとめておりますのでこちらのページをご参照ください。
*1:大抵JSONファイルだったりする