版权声明:本文为博主原创文章,未经允许不得转载,如有问题,欢迎指正,谢谢! https://blog.csdn.net/cbk861110/article/details/88587273
项目源码请移步:https://github.com/caobaokang419/FirebaseApp(欢迎Github Fork&Star,如有描述错误的地方,请帮忙指正),谢谢!
一、 概念阐述:
Remote Config(远程配置):是一种云服务,可以通过该服务更改应用的外观和行为,无需用户下载应用更新。使用 Remote Config时,创建控制应用的行为和外观的应用内默认值。随后可以使用 Firebase console 为所有应用用户或者细分用户群替换应用内默认值。应用控制何时更新,应用会经常检查有无更新,并在几乎不对性能造成任何影响的情况下更新应用。
二、远程配置的集成说明:
- Remote Config(远程配置):需自备梯子
三、代码汉化说明:
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); } }