2017-02-19 5 views
1

Firebase Remote Configを使用してリモートデータを取得しています。私のアプリは最初の起動から最新のデータが必要です。 (activateFetched()が正常にトリガされた)最初のフェッチ作品もFirebase Remote Config - 初期フェッチでローカルデフォルト値を返す

myValue = mFirebaseRemoteConfig.getBoolean(Constants.FIREBASE_REMOTE_MY_VALUE); 
  1. mFirebaseRemoteConfig.fetch(cacheExpiration) 
        .addOnCompleteListener(new OnCompleteListener<Void>() { 
         @Override 
         public void onComplete(@NonNull Task<Void> task) { 
          if (task.isSuccessful()) { 
           mFirebaseRemoteConfig.activateFetched(); 
          } 
         } 
        }); 
    

    とで値を読む:

    は私が取得し、自分のアプリケーションのonCreate()でアップデートやっていますただし、公開されたリモート設定ではなくremote_config_defaultsの値を返します。

  2. 2回目のフェッチは、数秒後でもリモート値を返します。
  3. その後、次のフェッチはcacheExpirationルールに従います(これはまったく問題ありません)。

私のリモート値が最初の呼び出しで取得されない理由は何ですか?

答えて

2

リモートパラメータを取り出すの非同期性を見下ろすされているようですね。 Firebusサーバーへの要求が送信され、応答が受信された後でonComplete()コールバックが発生します。これにはほんの数分の1秒かかります。

あなたの文は、フェッチされた値を使用する場合:

myValue = mFirebaseRemoteConfig.getBoolean(Constants.FIREBASE_REMOTE_MY_VALUE); 

fetch()コールをたどり、コンフィグデータが受信される前に、それが実行される、onComplete()コールバックではありません。 2回目のコールは、最初のコールが完了し、フェッチされてアクティブ化されたデータが存在するために十分な時間が経過したために機能するように見えます。

+0

非同期についてこのリマインダーをありがとう。まさにそれです。 – LegZ

2

Firebase Remote Configのコールバックは、そのように設計されており、キャッシュされた値を最初に返します。サーバーからキャッシュされた値が保存されていない場合、デフォルトで定義された値が返され、リモートフェッチがトリガーされます。次回の復帰時には、保存された値をサーバから取得して返します。

Firebaseリモートコンフィグは以下のように記述することができる値を決定する方法:それはそれを使用して返されますがある場合は、サーバから保存されたキャッシュされた値が、存在する場合

まずそれがチェック最初の呼び出しでその値。

キャッシュされた値がない場合、プログラムでも既定のファイルでも定義された既定値が検索されます。 (setDefaults()を呼び出すとき)

サーバからキャッシュされた値がなく、デフォルトでは値がない場合、そのタイプのシステムデフォルトが使用されます。

詳細情報はここで見つけることができます:https://firebase.google.com/docs/remote-config/ Firebase Remote Config defaults

関連する問題