Firebase Remote Config の読み込み戦略

Firebase Remote Config では、いつ、どのようにサーバーから新しい値をフェッチしてアプリで有効にするかを管理できるため、表示される構成を変更するタイミングを制御して、質の高いエンドユーザー エクスペリエンスを確保できます。アプリの起動時に新しい値をフェッチするために fetchAndActivate() を使用できます。また、リアルタイム Remote Config を補助的な方法として使用して、Remote Config の新しいバージョンの公開後に最新のパラメータ値を自動的にフェッチすることができます。

このガイドでは 3 つの読み込み方法を紹介し、アプリに最適なオプションを選択する際の主な考慮事項について説明します。

方法 1: 値をフェッチして読み込み時に有効にする

この方法では、アプリの初回起動時に fetchAndActivate() を呼び出して Remote Config から新しい値をフェッチし、値の読み込みが完了すると同時に有効にします。このシンプルなアプローチは、構成変更後に UI の表示が大幅に変化しない場合に適しています。ユーザーが UI を使用しているときに UI が明らかに変化するような状況では、この方法は使用しないでください。

アプリは fetchAndActivate() を呼び出した後、addOnConfigUpdateListener を呼び出してパラメータ値の更新のリッスンをリアルタイムで開始できます。このメソッドは、サーバーサイドのパラメータ値の更新をリッスンし、自動的にフェッチしてリスナーを呼び出します。シンプルな方法は、リスナーで新しい値を有効にする方法です。ただし、fetchAndActivate() で説明したように、機密性の高い UI では即時アクティブ化を避ける必要があります。

方法 2: 読み込み画面の表示中に有効にする

方法 1 で発生する可能性がある UI の問題の解決策として、読み込み画面を利用できます。アプリをすぐに起動する代わりに、読み込み画面を表示して、完了ハンドラで fetchAndActivate を呼び出します。その直後に、もう一度コールバックまたは通知を使用して読み込み画面を閉じてから、ユーザーがアプリの操作を開始できるようにします。

この方法を使用する場合は、読み込み画面にタイムアウトを追加することをおすすめします。Remote Config の 1 分間のタイムアウトでは、アプリの起動に関して質の高いユーザー エクスペリエンスを提供するには長すぎる場合があるためです。

この方法に適しているのは、addOnConfigUpdateListener を呼び出して Remote Config のリアルタイムの更新をリッスンすることです。読み込み画面が表示されたらリスナーを追加します。次に、Remote Config の値により表示が大幅に変化しない場合に、アプリ内の 1 つ以上のポイントで activate() を使用します。

方法 3: 次回の起動時に新しい値を読み込む

これは、新しい構成値を読み込み、アプリの次回の起動時に有効にする効果的な方法です。この方法では、アプリは起動時にフェッチした値を有効にしてから、新しい値のフェッチを試行します。つまり、新しい構成値はフェッチ済みであるものの、まだ有効になっていないという前提に基づいて動作します。この方法でのオペレーションの順序は次のとおりです。

  1. 起動時に、以前にフェッチした値をすぐに有効にします。これにより、以前のセッションでサーバーからダウンロードした値がすぐに適用されます。
  2. ユーザーがアプリを操作しているときに、デフォルトの最小フェッチ間隔に基づく非同期の呼び出しを開始し、新しい値をフェッチして、リアルタイムの構成更新リスナーを追加します。リアルタイム リスナーは、アプリの実行中にサーバーで公開された値を自動的にフェッチします。リアルタイムの更新では、最小フェッチ間隔の設定が省略されます。
  3. フェッチ呼び出しの完了ハンドラまたは完了コールバックでは、何の処理も行いません。ダウンロードした値は、次回のアプリ起動時に有効にするまでアプリで保持されます。

この方法では、ユーザーの待機時間が大幅に短縮されます。フェッチとリアルタイム リスナーの方法を、必要に応じて activate() 呼び出しと組み合わせることで、ユーザーがアプリを操作する際に Remote Config から最新の値を取得できるようにします。

回避すべき読み込み方法

読み込みに関する長所と短所を説明しましたが、避けるべき使用パターンがいくつかあります。

  • ユーザーが UI を表示または操作している間は、UI に関連する更新や切り替えは行わない。ただし、終了したプロモーションに関連するオプションを削除するなど、アプリやビジネスに関するやむを得ない理由がある場合は、この限りではありません。
  • 大量のフェッチ リクエストを同時に送信しない。サーバーでアプリがスロットル処理される恐れがあります。更新を頻繁にフェッチする必要がある場合は、リアルタイム Remote Config を使用します。ほとんどの本番環境シナリオでスロットル処理が発生するリスクは低いものの、開発中は問題になる可能性があります。リアルタイム Remote Config は、このユースケース向けに設計されています。スロットル処理のガイダンスをご覧ください。
  • Remote Config の値を取得するためにネットワーク接続に依存しない。アプリ内デフォルト パラメータ値を設定して、アプリが常に想定どおりに動作するようにします。ダウンロードしたテンプレートのデフォルトを使用して、アプリと Remote Config バックエンドのデフォルト値を定期的に同期できます。

次のステップ

構成値を読み込む方法は、上で説明した 3 つの基本的な方法に限られません。ニーズに応じて、より高度な方法を考案することもできます。

構成値をフェッチして有効にするための特定の呼び出しについて詳しくは、お使いのプラットフォームの API リファレンスをご覧ください。