#何ができるか
FirebaseスイートにはRealtime DBやCloud Messaging、Analyticsなど便利な機能が用意されていますが、Firebase Remote Configもその一つで、無料でアプリのABテストが実施できるパワフルなサービスですよね。(QiitaのタグにRealtimeDatabaseやCloudMessagingがあるのに、RemoteConfigがないのが残念だったので、作りました。)
Firebase Remote Configを使うと、無料で、サーバレスで、アプリのABテストを(プロダクション環境でも)行うことができます。iOS/ Androidの両方で利用可能です。
考え方
デフォルトの設定値をアプリに内蔵させておき、一方で、Firebaseサーバ上の値をフェッチして反映できればその値を使って設定値を動的に書き換えてくれます。
Firebaseサーバ上の値は、比較的フレンドリーなwebコンソールから操作できます。
基本的な実装手順
おおむね、この公式日本語記事が全てです。この通りにやれば終わります。
ただし、現時点(FirebaseRemoteConfig 2.1.1)では、日本語版の説明が若干古いので、英語記事で最新仕様を確認する必要があります。
読み替えが必要だった点
日本語ドキュメントのAPIのサンプルが古い。置き換えは以下のとおり。
self.remoteConfig = FIRRemoteConfig.remoteConfig()
self.remoteConfig = RemoteConfig.remoteConfig()
クラス名の接頭辞がなくなったというだけですね。リファレンスの通りにやって解決できないと焦りますが、英語リファレンスを確認しましょう。
そのうち、日本版リファレンスも刷新されると思います。
キャッシュ
Firebaseはアプリ側で値をキャッシュすることが原則で、 fetch(completionHandler: RemoteConfigFetchCompletion? = nil)
を使うと、12時間はキャッシュされた値が利用されるようです。その間はFirebaseサーバ値を変更しても即時反映されません。通常、それほど機動的に設定値の切り替えをする必要がないと思うので、こちらで問題ないはずです。
即時反映を行うには、fetch(withExpirationDuration expirationDuration: TimeInterval, completionHandler: RemoteConfigFetchCompletion? = nil)
のほうを使います。 expirationDuration: 0
にすれば、即時に切り替えが反映できます。ただし、1時間に5回までです。