远程配置值获取不一致

问题描述 投票:0回答:2

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

这是我的onStart()和onStop()的代码-


@Override
  protected void onStart() {
    /**
     * We are fetching the minimum version that we want the user to have from Firebase Remote Config, only after we have the results we can proceed to start the app.
     */
    getMinAppVersion("onStart", () -> {
      // navigation drawer
      checkValidFacebookSession();
      initDrawerMenu();

      // network monitoring
      registerNetworkReceiver();

      // monitoring upload
      LocalBroadcastManager.getInstance(this).registerReceiver(mUploadReceiver, new IntentFilter(ULBroadcastConstants.UPLOAD_STATUS_ACTION));
      LocalBroadcastManager.getInstance(this).registerReceiver(mFCMReceiver, new IntentFilter(MyFirebaseMessagingService.RECEIVED_FCM_ACTION));

      checkInAppUpdate();
    });
    super.onStart();
  }

@Override
  protected void onStop() {
    getMinAppVersion("onStop", () -> {
      mNavigationView.setNavigationItemSelectedListener(null);
      mDrawerLayout.removeDrawerListener(mBadgeDrawerToggle);


      // network monitor
      unregisterNetworkReceiver();

      // unregister upload
      LocalBroadcastManager.getInstance(this).unregisterReceiver(mUploadReceiver);
      LocalBroadcastManager.getInstance(this).unregisterReceiver(mFCMReceiver);
    });

    super.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");
      }
    });
  }

android android-lifecycle firebase-remote-config
2个回答
1
投票

这就是为什么它发生的原因。 Remote Config根据官方文档将值缓存在本地存储中。您可以参考这里并考虑

“ Remote Config包括一个客户端库,该客户端库处理重要的任务,例如获取参数值并将其缓存,同时仍使您可以控制何时激活新值,以便它们影响您应用程序的用户体验。这可以保护您的应用程序通过控制任何更改的时间来体验应用程序。“

当使用客户端库获取remote-config参数时,如果缓存的值在那(TL; DL),它将返回给您以获取更多信息,您可以阅读官方文档here。它使用最小时间间隔来获取值,以避免应用程序崩溃,对于该最小间隔时间,最后获取的值用作缓存]

mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);

这里3600是新读取之间的minimum interval时间,您可以根据需要调整时间。如果您最近调用了fetch(),并且再次调用它,则客户端库将根据minimum-interval时间确定应执行新的API调用还是提供缓存的值。 Firebase远程配置可在REST api上使用,并且也使用Throttling


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.