2017-05-07 2 views
0

다음 Provider 메소드를 사용하여 생성 된 FirebaseRemoteConfig 클래스의 싱글 톤 인스턴스를 사용하고 있습니다.FirebaseRemoteConfig 사용하기 우리가 실행할 때마다 setDefault 메소드가 캐시 된 Config 값을 마지막 페치에서 덮어 쓸 지 혼란 스럽습니다.

@Provides 
@Singleton 
FirebaseRemoteConfig provideFirebaseRemoteConfig() { 
    final FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); 
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() 
      .setDeveloperModeEnabled(BuildConfig.DEBUG) 
      .build(); 
    mFirebaseRemoteConfig.setConfigSettings(configSettings); 
    mFirebaseRemoteConfig.setDefaults(R.xml.remote_config_defaults); 

    long cacheExpiration = 3600 * 3; // 3 hours in seconds. 

    if (mFirebaseRemoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled()) { 
     cacheExpiration = 0; 
    } 

    mFirebaseRemoteConfig.fetch(cacheExpiration) 
      .addOnCompleteListener(new OnCompleteListener<Void>() { 
       @Override 
       public void onComplete(@NonNull Task<Void> task) { 
        if (task.isSuccessful()) { 
         // Once the config is successfully fetched it must be activated before newly fetched 
         // values are returned. 
         mFirebaseRemoteConfig.activateFetched(); 
        } else { 
         FirebaseCrash.log("RemoteConfig fetch failed at " +System.currentTimeMillis()); 
        } 
       } 
      }); 
    return mFirebaseRemoteConfig; 
} 

이제 여기서 문제는 그 나는 싱글 인스턴스를 생성하고있는 setdefaults를 방법 매번 설정하고 마지막 가져온 설정 값이 만료 시간이 있기 때문에, 그것은 구성 값을 되 돌리는 것을 의미하지 않는 경우 가져온 마지막 알려진 설정을 선택하는 대신 하드 코드 된 초기 기본값으로 설정합니다. 이는 마지막으로 가져온 Config 값이 만료 된 후 서버에서 가져올 수없는 경우입니다.

문서를 살펴 보았지만 간단한 개요를 제외하고는 전체 캐싱이 어떻게 작동하는지에 대해서는 구체적으로 자세히 설명하지 않았습니다. 따라서 RemoteConfig 사용 경험이있는 사람들은 쉽게 대답 할 수 있지만 처음 사용하면 도움이된다.

답변

2

아니요. setDefaults은 RemoteConfig에서받은 이전에 가져온 값을 덮어 쓰지 않습니다.

RemoteConfig의 관점에서 볼 때 "만료 시간"은 이전에 가져온 값이 유효하지 않은 것으로 간주하지 않습니다. 단지 네트워크에 나가 새로운 값이 나타나는지 확인해야 할 때입니다. 그들이 없으면 (또는 네트워크에 연결할 수없는 경우) RemoteConfig는 이전에 이전에 다운로드 한 값을 유지합니다.