【问题标题】:FirebaseRemoteConfig fetchAndActivate not updating new valueFirebaseRemoteConfig fetchAndActivate 不更新新值
【发布时间】:2020-02-14 02:43:47
【问题描述】:

在调试模式下,我已经将最小间隔设置为 0。 目前我获取新数据的方法是在启动应用之前先清除应用存储。

这是我的代码:

private fun initRemoteConfig() {
    remoteConfig = FirebaseRemoteConfig.getInstance()
    configSettings = FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(if (BuildConfig.DEBUG) 0 else 3600)
        .build()
    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
    fetch()
}

private fun fetch() {
    remoteConfig.fetchAndActivate()
        .addOnCompleteListener {
            if (it.isSuccessful) {
                val updated = it.result
                Logger.d(TAG, "Config params updated: $updated. Fetch and activate succeeded") // updated = false

                checkVersion()
            } else {
                Logger.d(TAG, "Fetch failed")
            }
        }

}

【问题讨论】:

    标签: android firebase-remote-config


    【解决方案1】:

    我将尝试阐明为什么用fetchactivate 替换fetchAndActivate 有效。

    原因是fetchAndActivate 函数后面的远程配置缓存。它会将新数据缓存一段时间。该时间默认为 -1,这可能意味着永远(虽然不确定,可能意味着 1 天,或者类似的东西)。

    当数据已经被缓存时,它甚至不会尝试再次获取它们。因此,它似乎不起作用。 当您调用 fetch(0) 时,它会将缓存时间设置为 0 秒。

    这就是它每次都会获取新的远程配置值的原因。

    【讨论】:

      【解决方案2】:

      我将代码从fetchAndActivate 更改为fetch,它似乎按预期工作。我现在正在从 Firebase 获取新数据。

      这是我更新的代码:

      private fun fetch() {
          val fetch = remoteConfig.fetch(if (BuildConfig.DEBUG) 0 else TimeUnit.HOURS.toSeconds(12))
          fetch.addOnCompleteListener {
              if (it.isSuccessful) {
                  remoteConfig.activate()
                  Logger.d(TAG, "Fetch and activate succeeded")
      
                  checkVersion()
              } else {
                  Logger.d(TAG, "Fetch failed")
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        试试这个

        private fun initRemoteConfig() {
          remoteConfig = FirebaseRemoteConfig.getInstance()
          configSettings = FirebaseRemoteConfigSettings.Builder()
            .setMinimumFetchIntervalInSeconds(if (BuildConfig.DEBUG) 0 else 3600)
            .build()
          remoteConfig.setConfigSettingsAsync(configSettings)  //You missed this line
          remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
          fetch()
        }
        
        private fun fetch() {
          remoteConfig.fetchAndActivate()
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    val updated = task.result
                    Logger.d(TAG, "Config params updated: $updated. Fetch and activate succeeded") // updated = false
                    checkVersion()
                } else {
                    Logger.d(TAG, "Fetch failed")
                }
            }
        }
        

        【讨论】:

        • 感谢您指出这一点,但我现在还有其他紧急任务。稍后会尝试并在此处更新进展情况。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-27
        • 2021-06-18
        • 2012-03-11
        • 1970-01-01
        • 1970-01-01
        • 2021-05-25
        • 2018-05-21
        相关资源
        最近更新 更多