FirebaseRemoteConfig getString возвращает пустой, но байтовый массив удаленной конфигурации не пуст - PullRequest
0 голосов
/ 24 октября 2018

На первом изображении я остановил приложение, в котором я пытаюсь получить данные из FirebaseRemoteConfig.Код, который я оценил, - это простой код для получения строки из FirebaseRemoteConfig.Но он возвращает пустую строку.

Затем на втором изображении я немного углубляюсь в объект FirebaseRemoteConfig и обнаруживаю, что хэш-карта zzogi.zzogw.get ("configns: firebase") имеет то, что мне нужно.

Почему remoteConfig.getString () не возвращает мое значение, даже если remoteConfig имеет значение?

К вашему сведению, это строки в градле

implementation 'com.google.firebase:firebase-core:11.8.0'
implementation 'com.google.firebase:firebase-config:11.8.0'

, и это код, которыйЯ создаю FirebaseRemoteConfig Object.Если вам нужно больше кода, пожалуйста, спросите.

public FirebaseRemoteConfig getFirebaseRemoteConfig(){
    FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings settings = new FirebaseRemoteConfigSettings.Builder()
            .setDeveloperModeEnabled(true)
            .build();
    config.setConfigSettings(settings);
    return config;
}

enter image description here

enter image description here

1 Ответ

0 голосов
/ 08 ноября 2018

Вы должны добавить значения по умолчанию для всех ваших параметров конфигурации.Вы можете создать ресурс xml с именем config в папке xml для значений по умолчанию, подобных этому.

<?xml version="1.0" encoding="utf-8"?>
<defaultsMap>
    <entry>
        <key>foo</key>
        <value>bar</value>
    </entry>
    <entry>
        <key>some_key</key>
        <value>true</value>
    </entry>
    <entry>
        <key>another_key</key>
        <value>2</value>
    </entry>
</defaultsMap>

Вам не нужно устанавливать config и значения по умолчанию каждый раз, когда вам нужен экземпляр FirebaseRemoteConfig.Запустите это только один раз в методе onCreate вашей основной деятельности.

public void configureFirebaseRemoteConfigInstance(){
    FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
            .setDeveloperModeEnabled(BuildConfig.DEBUG)
            .build();
    mFirebaseRemoteConfig.setConfigSettings(configSettings);
    mFirebaseRemoteConfig.setDefaults(R.xml.config);
}

А затем получите переопределения с сервера.Вы можете вызвать это в onResume.Он не будет проверять сервер до тайм-аутов cacheExpiration.Кроме того, когда вы находитесь в режиме разработки, cacheExpiration будет равен 0. Нет необходимости изменять код для производства.

public void refreshConfigValuesIfNeeded() {
    FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    long cacheExpiration = 7200; //2 hour in seconds.
    if (mFirebaseRemoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled()) {
        cacheExpiration = 0;
    }
    mFirebaseRemoteConfig.fetch(cacheExpiration).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            FirebaseRemoteConfig.getInstance().activateFetched();
        }
    });
}

В конце концов, вы можете достичь значений конфигурации, где вам нужно:

FirebaseRemoteConfig.getInstance().getString("foo"); //Outputs bar
FirebaseRemoteConfig.getInstance().getBoolean("some_key"); //Outputs true
FirebaseRemoteConfig.getInstance().getLong("another_key"); // Outputs 2
...