Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 远程配置值获取不一致_Android_Android Lifecycle_Firebase Remote Config - Fatal编程技术网

Android 远程配置值获取不一致

Android 远程配置值获取不一致,android,android-lifecycle,firebase-remote-config,Android,Android Lifecycle,Firebase Remote Config,我正在onStart()和onStop()中获取Firebase远程配置值。我在“min_版本”中持有的变量,用于应用程序内更新功能。所以我的问题是,当我要远程配置并更新这些值时,它们不会立即更新,而是在更新为新值之前,将它们的旧值保存到另一个应用程序生命周期迭代中。这意味着,如果我决定要更新某个版本的所有用户,他们不会立即获得应用内更新,而是在通过onStop进行一次迭代后,然后再获得更新 以下是我的onStart()和onStop()代码 这是我的“getMinAppVersion()”方法

我正在onStart()和onStop()中获取Firebase远程配置值。我在“min_版本”中持有的变量,用于应用程序内更新功能。所以我的问题是,当我要远程配置并更新这些值时,它们不会立即更新,而是在更新为新值之前,将它们的旧值保存到另一个应用程序生命周期迭代中。这意味着,如果我决定要更新某个版本的所有用户,他们不会立即获得应用内更新,而是在通过onStop进行一次迭代后,然后再获得更新

以下是我的onStart()和onStop()代码

这是我的“getMinAppVersion()”方法-


private void getMinAppVersion(String didComeFrom, OnRemoteConfigFetchComplete listener){
    //fetching the min_version parameter from 'remote config' of Firebase and saves it to our local variable.
    FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder().setMinimumFetchIntervalInSeconds(200).build();
    mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
    mFirebaseRemoteConfig.fetch(0);
    mFirebaseRemoteConfig.activate().addOnCompleteListener(task -> {
      if (task.isSuccessful()) {
        min_version = mFirebaseRemoteConfig.getLong(RemoteConfigUtil.MIN_VERSION);
        Timber.tag("min_version_" + didComeFrom).d(String.valueOf(min_version));
        if (listener != null)
          listener.onFetchComplete();
      } else {
        Timber.tag("min version").d("error while fetching and activating remove config");
      }
    });
  }


控制台中的远程配置更新不是即时的。它们不像推送通知那样工作。新值仅在返回的任务完成后生效,然后调用。我要指出的是,您没有使用fetch()返回的任务来确定何时从Firebase接收到新值。

控制台中的远程配置更新不是即时的。它们不像推送通知那样工作。新值仅在返回的任务完成后生效,然后调用。我要指出的是,您没有使用fetch()返回的任务来确定何时从Firebase接收到新值。

这就是为什么会发生这种情况。
远程配置
根据官方文档将值缓存在本地存储器中。这里可以参考并考虑

“远程配置包括一个客户端库,用于处理诸如获取参数值和缓存参数值等重要任务,同时还可以让您控制何时激活新值,从而影响应用程序的用户体验。这样,您就可以通过控制任何更改的时间来保护应用程序体验。”

当您使用客户端库获取远程配置参数时,缓存的值将返回给您(如果存在)(TL;DL)。有关详细信息,您可以阅读官方文档。它使用最小时间间隔获取值以避免应用程序崩溃,对于该最小时间间隔,最后获取的值用作缓存

mFirebaseRemoteConfig=FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings=新的FirebaseRemoteConfigSettings.Builder()
.setMinimumFetchIntervalInSeconds(3600)
.build();
mFirebaseRemoteConfig.setConfigSettingsAsync(配置设置);

这里的
3600
是新提取之间的
最小间隔时间,您可以根据需要调整时间。如果您最近调用了
fetch()
,并且再次调用它,则客户端库将根据
最小间隔
时间来确定应执行新API调用或提供缓存值的时间。Firebase remote config在REST api上工作并使用它。

以下是它发生的原因。
远程配置
根据官方文档将值缓存在本地存储器中。这里可以参考并考虑

“远程配置包括一个客户端库,用于处理诸如获取参数值和缓存参数值等重要任务,同时还可以让您控制何时激活新值,从而影响应用程序的用户体验。这样,您就可以通过控制任何更改的时间来保护应用程序体验。”

当您使用客户端库获取远程配置参数时,缓存的值将返回给您(如果存在)(TL;DL)。有关详细信息,您可以阅读官方文档。它使用最小时间间隔获取值以避免应用程序崩溃,对于该最小时间间隔,最后获取的值用作缓存

mFirebaseRemoteConfig=FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings=新的FirebaseRemoteConfigSettings.Builder()
.setMinimumFetchIntervalInSeconds(3600)
.build();
mFirebaseRemoteConfig.setConfigSettingsAsync(配置设置);

这里的
3600
是新提取之间的
最小间隔时间,您可以根据需要调整时间。如果您最近调用了
fetch()
,并且再次调用它,则客户端库将根据
最小间隔
时间来确定应执行新API调用或提供缓存值的时间。Firebase remote config可在REST api上工作并使用。

您好,谢谢您的回答。如果你看我文章中的代码,我有一个0毫秒的最小间隔,这应该会产生一个“fcm样”的行为,还是应该?好吧,如果我理解正确,SDK有一些崩溃安全机制,忽略我的0毫秒值,并将其放入一些最小允许值以防止崩溃?因为我没有看到任何撞车的情况。非常感谢。问题是远程配置比大型数据库更方便用户。是否有任何推荐的方法可以使用远程配置生成实时行为?我知道如何在实时数据库中执行此操作,但感谢您的提议。所以我得到了我的答案,非常感谢!您好,谢谢您的回答。如果你看我文章中的代码,我有一个0毫秒的最小间隔,这应该会产生一个“fcm样”的行为,还是应该?好吧,如果我理解正确,SDK有一些崩溃安全机制,忽略我的0毫秒值,并将其放入一些最小允许值以防止崩溃?因为我没有看到任何撞车的情况。非常感谢。问题是远程配置比大型数据库更方便用户。是否有任何推荐的方法可以使用远程配置生成实时行为?我知道如何在实时数据库中执行此操作,但感谢您的提议。所以我得到了我的答案,非常感谢!谢谢你的回答。因此,您建议在“fetch()”方法中添加一些完成侦听器?如果是,我该怎么办

private void getMinAppVersion(String didComeFrom, OnRemoteConfigFetchComplete listener){
    //fetching the min_version parameter from 'remote config' of Firebase and saves it to our local variable.
    FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder().setMinimumFetchIntervalInSeconds(200).build();
    mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
    mFirebaseRemoteConfig.fetch(0);
    mFirebaseRemoteConfig.activate().addOnCompleteListener(task -> {
      if (task.isSuccessful()) {
        min_version = mFirebaseRemoteConfig.getLong(RemoteConfigUtil.MIN_VERSION);
        Timber.tag("min_version_" + didComeFrom).d(String.valueOf(min_version));
        if (listener != null)
          listener.onFetchComplete();
      } else {
        Timber.tag("min version").d("error while fetching and activating remove config");
      }
    });
  }