本記事では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ファイルだったりする