Android Firebase入门到精通之四:Remote Config(远程配置) 的集成与开发

版权声明:本文为博主原创文章,未经允许不得转载,如有问题,欢迎指正,谢谢! https://blog.csdn.net/cbk861110/article/details/88587273

项目源码请移步:https://github.com/caobaokang419/FirebaseApp(欢迎Github Fork&Star,如有描述错误的地方,请帮忙指正),谢谢!

一、 概念阐述:

Remote Config(远程配置):是一种云服务,可以通过该服务更改应用的外观和行为,无需用户下载应用更新。使用 Remote Config时,创建控制应用的行为和外观的应用内默认值。随后可以使用 Firebase console 为所有应用用户或者细分用户群替换应用内默认值。应用控制何时更新,应用会经常检查有无更新,并在几乎不对性能造成任何影响的情况下更新应用。

二、远程配置的集成说明:

三、代码汉化说明:

1. project build.gradle 添加:

implementation 'com.google.firebase:firebase-config:16.1.0'

2. AndroidManifest.xml 添加(用于测试:Firebase后台配置,应用侧是否能实时读取,实现差异化定制):

<activity
    android:name="com.gary.firebase.remoteconfig.RemoteConfigActivity"
    android:theme="@style/AppTheme" />

3. 本地配置文件:remote_config_defaults.xml

<?xml version="1.0" encoding="utf-8"?>
<defaultsMap>
    <entry>
        <key>loading_phrase</key>
        <value>Fetching config…</value>
    </entry>
    <entry>
        <key>welcome_message_caps</key>
        <value>false</value>
    </entry>
    <entry>
        <key>welcome_message</key>
        <value>Welcome to my awesome app!</value>
    </entry>
    <entry>
        <key>weather_ui_bg_color</key>
        <value>#FFFFFF</value>
    </entry>
</defaultsMap>

4. Activity实现(兼容实现:云端实时配置 | 读取本地配置文件(无云端配置时)):

public class RemoteConfigActivity extends AppCompatActivity {
    private static final String TAG = "RemoteConfigActivity";

    // Remote Config keys
    private static final String LOADING_PHRASE_CONFIG_KEY = "loading_phrase";
    private static final String WELCOME_MESSAGE_KEY = "welcome_message";
    private static final String WELCOME_MESSAGE_CAPS_KEY = "welcome_message_caps";
    private static final String WEATHER_UI_BG_COLOR_KEY = "weather_ui_bg_color";
    private static final String DEF_WEATHER_CITY_INFO_KEY = "def_weather_city_info";

    private FirebaseRemoteConfig mFirebaseRemoteConfig;
    private TextView mWelcomeTextView;
    private TextView mDefCityTextView;
    private TextView mDefBgColorTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fb_remote_config);

        mWelcomeTextView = findViewById(R.id.welcomeTextView);
        mDefCityTextView = findViewById(R.id.defCityTextView);
        mDefBgColorTextView = findViewById(R.id.defBgColorTextView);

        Button fetchButton = findViewById(R.id.fetchButton);
        fetchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                fetchRemoteConfigs();
            }
        });

        mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
        FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
                .setDeveloperModeEnabled(BuildConfig.DEBUG)
                .build();
        mFirebaseRemoteConfig.setConfigSettings(configSettings);

        //Step1: 加载应用xml中默认属性值
        mFirebaseRemoteConfig.setDefaults(R.xml.remote_config_defaults);

        //Step2: 请求Remote config数据
        fetchRemoteConfigs();
    }

    private void fetchRemoteConfigs() {
        displayLocalConfigInfos();//Step3: 加载配置,刷新UI
        mFirebaseRemoteConfig.fetch(cacheExpiration)
                .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                            Toast.makeText(RemoteConfigActivity.this, "Fetch Succeeded",
                                    Toast.LENGTH_SHORT).show();

                            //Step4: 获取成功后,需APP主动Set
                            mFirebaseRemoteConfig.activateFetched();
                        } else {
                            Toast.makeText(RemoteConfigActivity.this, "Fetch Failed",
                                    Toast.LENGTH_SHORT).show();
                        }
                        displayConfigInfos(); //Step5: 重新加载配置,刷新UI
                    }
                });
    }

    private void displayConfigInfos() {
        if (mFirebaseRemoteConfig.getBoolean(WELCOME_MESSAGE_CAPS_KEY)) {
            mWelcomeTextView.setAllCaps(true);
        } else {
            mWelcomeTextView.setAllCaps(false);
        }
        mWelcomeTextView.setText(mFirebaseRemoteConfig.getString(WELCOME_MESSAGE_KEY));

        String defCityInfo = mFirebaseRemoteConfig.getString(DEF_WEATHER_CITY_INFO_KEY);
        mDefCityTextView.setText(defCityInfo);

        String defBgColor = mFirebaseRemoteConfig.getString(WEATHER_UI_BG_COLOR_KEY);
        mDefBgColorTextView.setText(defBgColor);
    }
}

猜你喜欢

转载自blog.csdn.net/cbk861110/article/details/88587273