以前にreact-native-firebaseのセットアップ方法と各機能の簡単な説明についてご紹介しました。 今回はその中の機能一つであるremote-configについてインストール方法や使い方を公式ソースに従ってご紹介します。 アプリのバージョンを上げることなく内部的な設定値を更新でき、ABテストなどにも応用が効くため非常に有益な機能です。
react-native@0.63.3
@react-native-firebase/app@8.4.6
@react-native-firebase/remote-config@9.0.11
※セットアップが済んでいない場合は、Firebase
のプロジェクト作成とGoogleService-Info.plist
等のファイル組み込みを行うこと。
公式「Firebase Remote Config」には以下のように記載があります。
アプリのアップデートを公開しなくても、アプリの動作と外観を変更できます。コストはかからず、1 日あたりのアクティブ ユーザー数の制限もありません。
とあるように「特定の設定値」をFirebase
側管理にすることで、それらの変更を「アプリのアップデートなしに」行うことができます。
よくある「最新のバージョンに更新してください」のような表示も、Remote Config
側で「強制アップデートが必要なバージョン数」という設定値を持たせておき、アプリ側のバージョンと突合することで実現できます。
既に@react-native-firebase/app
をインストールされている方は1行目は不要です。
yarn add @react-native-firebase/app
yarn add @react-native-firebase/remote-config
続いてpod install
を行います。
cd ios && pod install
Firebase
で作成済みのプロジェクトを開き、メニューからRemote Config
を開きます。
以下のようにパラメータの入力画面が最初から開かれていると思うので、任意の値を入力します。
ここではtest
というキーに対してhoge
という値を設定します。
入力が完了したら「パラメータを追加」を押して完了してください。
続いて以下のような画面に切り替わると思います。 これは現在このプロジェクトで保持している設定値の一覧です。
「ドラフト」の状態になっているものは、まだアプリケーション側には反映されておらず、画面上部の「変更を公開」を押すことで反映されます。
そのまま「変更を公開」を押して、入力内容を反映させましょう。
大きく分けると3段階のフェーズがあり、それぞれ「初期値設定」「フェッチとアクティブ化」「値の取得」とします。
仮にアプリがFirebase
と正常に通信できないまま動作した時用に、対応するキーに対して初期値を設定します。
import React, { useEffect } from 'react';
import remoteConfig from '@react-native-firebase/remote-config';
function App() {
useEffect(() => {
remoteConfig()
.setDefaults({
// ここで先ほど作成した`test`というキーに`default`という初期値を設定する
test: 'default',
})
.then(() => {
console.log('初期値の設定が完了しました。');
});
}, []);
}
こうする事で、仮にFirebase
からtest
の値を取得できなかった場合にdefault
を値として扱うようになります。
上記に追記してフェッチ・アクティブ化処理を記載します。
何をしているかというと、Firebase
と通信して値を取得(フェッチ)して、端末内で有効化(アクティブ化)をしています。
イメージとしてはFirebase
側と同期を取っているフェーズで、取得した値を実際にコード上で扱うのは次の「値の取得」フェーズです。
import React, { useEffect } from 'react';
import remoteConfig from '@react-native-firebase/remote-config';
function App() {
useEffect(() => {
remoteConfig()
.setDefaults({
// ここで先ほど作成した`test`というキーに`default`という初期値を設定する
test: 'default',
})
.then(() => {
console.log('初期値の設定が完了しました。');
return () => remoteConfig().fetchAndActivate();
})
.then(fetchedRemotely => {
if (fetchedRemotely) {
console.log('フェッチ成功');
}
else {
console.log('フェッチ失敗、もしくはフェッチ済み');
}
});
}, []);
}
余談ですが、remote-config
は読み取ってきた値をアプリケーション側にキャッシュとして保持します(デフォルトでは12時間)。
これは、値が頻繁に更新された場合にアプリケーション側の表示がコロコロと変わらないようにするためのものです。
もしキャッシュ時間を独自で定義したい場合は以下のように秒数指定ができます。
// 10分間キャッシュ
remoteConfig().fetchAndActivate(600);
ここまできたらあとは簡単です。 以下のようにして値を取得しましょう。
// `test`の値を文字列型で取得
const test = remoteConfig().getValue('test').asString();
getValue()
の後ろにasString()
とあるように、目的の値の型によってasBoolean()
やasNumber()
など関数が違います。
またgetAll()
のように全ての値を一度に取得するような関数もあります。
const parameters = remoteConfig().getAll();
Object.entries(parameters).forEach((kvp) => {
const [key, entry] = kvp;
console.log('Key: ', key);
console.log('Source: ', entry.getSource());
console.log('Value: ', entry.asString());
});
実際に上記ソースをアプリケーションで動かしてみると、Firebase
側のコンソール画面が下記のように変化すると思います。
これはremote-config
の値を正常に取得(フェッチ)できているということであり、実際にアプリ上でtest
というキーで"hoge"
を扱うことができました。
今回はFirebase Remote Config
の機能について@react-native-firebase/remote-config
のインストールから使用方法までご紹介しました。
設定値はアプリ内部に持たせても機能しますが、バージョンアップの手間を減らすという意味で非常に有益だと思います。