Search code examples
firebasereact-nativereact-native-firebasefirebase-consolefirebase-remote-config

Firebase Remote Config unable to fetch values from console


I am using react-native-firebase https://rnfirebase.io/remote-config/usage to try fetching my values.

Firebase says it has fetched my values because I am receiving this console log:

"Configs were retrieved from the backend and activated."

BUT - when I try to output just the value I can only see the default values if they are set.

I am aware of the way firebase is caching remote config, but I still cant get it to work by setting a custom cache timeout.

I'm not so sure what I could be doing wrong.

Here is my code which executes on app load.

  async componentDidMount() {
    await remoteConfig()
    .setConfigSettings({
        minimumFetchInterval: 10,
        minimumFetchIntervalMillis: 10000, // 10 secs
        fetchTimeMillis: 10000
    })
    await remoteConfig()
      .setDefaults({
        min_app_version: 1.17,
        test_param: 'disabled'
      })
    //   await remoteConfig().fetch(0);
      await remoteConfig().fetchAndActivate(0)

      .then(fetchedRemotely => {
        if (fetchedRemotely) {
          console.log(
            '+++Configs were retrieved from the backend and activated.',
          );
          console.log(fetchedRemotely);
        } else {
          console.log(
            '+++++No configs were fetched from the backend, and the local configs were already activated',
          );
        }
      });

    //Code to get All parameters from Firebase Remote config
    //ONLY default values show here if they are set
    const parameters = remoteConfig().getAll();
    Object.entries(parameters).forEach($ => {
      const [key, entry] = $;
      console.log('--Key: ', key);
      console.log('--Source: ', entry.getSource());
      console.log('--Value: ', entry.asString());
      console.log('--------------------------------');
    });

    const minAppVersion = remoteConfig().getValue('min_app_version');
    const isApplicationOn = remoteConfig().getBoolean('is_application_on');

    //set value in redux (local storage)
    this.props.minAppVersionFirebaseRemoteConfig(minAppVersion._value)
    console.log(minAppVersion)
    console.log(isApplicationOn)
  }

Solution

  • The issue was my google plist file from firebase was not copying over properly in my xCode build phase script so things were not entirely in sync.

    For example, I used this to copy the right file over. I was using an if/else condition before that was not working, so I changed to a switch sdtatement and its fine now.

    I fixed this by using case/switch instead of if/else...

    case "${CONFIGURATION}" in
    
       "Release" )
            echo "BUILD CONFIG: RELEASE"
            cp -r "${RELEASE_INFO_PLIST_FILE}" "${PLIST_DESTINATION}" ;;
            
       "dev.release" )
            echo "BUILD CONFIG: RELEASE DEV"
            cp -r "${RELEASE_INFO_PLIST_FILE}" "${PLIST_DESTINATION}" ;;
    
       "Debug" )
            echo "BUILD CONFIG: DEBUG"
            cp -r "${DEBUG_INFO_PLIST_FILE}" "${PLIST_DESTINATION}" ;;
            
       "dev.debug" )
            echo "BUILD CONFIG: DEBUG DEV"
            cp -r "${DEBUG_INFO_PLIST_FILE}" "${PLIST_DESTINATION}" ;;
    
        *)
    

    I really don't know why the if/else was not working, but, I hope this helps someone!