【问题标题】:FirebaseRemoteConfig getString returns empty but bytearray of remote config is not emptyFirebaseRemoteConfig getString 返回空,但远程配置的 bytearray 不为空
【发布时间】:2022-05-24 16:58:21
【问题描述】:

在第一张图片中,我停止了尝试从 FirebaseRemoteConfig 获取一些数据的应用程序。我评估的代码是从 FirebaseRemoteConfig 获取字符串的简单代码。但它返回空字符串。

然后在第二张图片中,我深入到 FirebaseRemoteConfig 对象内部,发现 zzogi.zzogw.get("configns:firebase") 的哈希图有我需要的东西。

为什么即使 remoteConfig 有值,remoteConfig.getString() 也不返回我的值?

仅供参考,这是 gradle 行

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

这是我创建 FirebaseRemoteConfig 对象的代码。如果您需要更多代码,请询问。

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

【问题讨论】:

    标签: android firebase firebase-remote-config


    【解决方案1】:

    您应该为所有配置参数添加默认值。您可以在 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>
    

    您无需在每次需要 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
    

    【讨论】:

      【解决方案2】:

      尝试使用 firebaseRemoteConfig.fetchAndActivate()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多