“在 Android 上集成 Remote Config”Codelab

1. 简介

上次更新日期:2021 年 3 月 9 日

什么是 Firebase Remote Config?

Firebase Remote Config 是一项云服务,可让您更改应用的行为和外观,而无需用户免费下载应用更新。使用 Remote Config 时,您可以创建应用内默认值,以控制应用的行为和外观。之后,您便可以使用 Firebase 控制台或 Remote Config 后端 API 为所有应用用户或细分用户群替换应用内默认值。您的应用可控制何时应用更新,并能经常检查有无更新并应用更新,而对性能的影响微乎其微。

运作方式

Remote Config 包含一个客户端库,可处理提取和缓存参数值等重要任务,同时仍让您能够控制何时激活新值,从而影响应用的用户体验。这样,您就可以通过控制更改的时机来维持良好的应用体验。

Remote Config 客户端库中的 get 方法提供了统一的参数值访问点。应用在获取服务器端值时所使用的逻辑与在获取应用内默认值时相同,因此您无需编写大量代码,就可以将 Remote Config 的功能添加到您的应用中。

如需替换应用内默认值,您可以使用 Firebase 控制台或 Remote Config 后端 API 创建与应用中使用的参数名称相同的参数。对于每个参数,您可以设置服务器端默认值以覆盖应用内默认值,还可以创建条件值,以针对满足特定条件的应用实例覆盖应用内默认值。下图显示了参数值在 Remote Config 后端和应用中的优先级排序:

61f12f33d2ac3133

学习内容

  • 如何实现 Firebase Remote Config
  • 如何使用 Firebase Remote Config 在不更新应用的情况下更改值

所需条件

  • 最新版本的 Android Studio
  • Firebase 账号
  • (推荐,但不强制要求)用于运行应用的实体 Android 设备
  • 具备 Java 或 Kotlin 的基础知识

2. 准备工作

(可选)下载示例代码

在此 Codelab 中,您将构建自己的测试应用,但如果您想查看并运行现有的示例应用,可以下载快速入门示例代码。

点击以下按钮下载此 Codelab 的所有代码:

解压下载的 ZIP 文件。此操作将解压缩名为 quickstart-android-master 的根文件夹。

...或者从命令行克隆 GitHub 代码库。

$ git clone https://github.com/firebase/quickstart-android.git

该代码库包含多个文件夹。我们将使用 android_studio_folder.png config 文件夹。

(可选)导入示例代码

启动 Android Studio,然后在欢迎屏幕中选择 Import project。然后,打开下载的文件夹并选择 android_studio_folder.png config 文件夹。然后点击“打开”。

5f90353b0b519642

创建新的 Android 项目

  1. 在 Android Studio 中,启动新项目
  2. 选择“基本活动”
  3. 在“Configure Your Project”中屏幕:
  4. 为您的项目命名。系统会自动为您生成软件包名称和保存位置。
  5. 语言:Java
  6. 最低 SDK 版本 16

3. 将 Firebase 和 Firebase Analytics 添加到您的 Android 项目

创建 Firebase 项目

您需要先创建一个要关联到您的 iOS 应用的 Firebase 项目,然后才能将 Firebase 添加到您的 Android 应用。访问了解 Firebase 项目以详细了解 Firebase 项目。

  1. 在 Firebase 控制台中,点击添加项目,然后选择或输入项目名称910158221fe46223

如果您已有 Google Cloud Platform (GCP) 项目,可以从下拉菜单中选择相应项目,将 Firebase 资源添加到该项目。

  1. (可选)如果要创建新项目,可以修改项目 ID

Firebase 会自动为您的 Firebase 项目分配一个唯一 ID。如需了解 Firebase 如何使用项目 ID,请访问“了解 Firebase 项目”。

  1. 点击继续
  2. 为您的项目设置 Google Analytics,以便在使用以下任何 Firebase 产品时都能获得最佳体验:
  • Firebase Crashlytics
  • Firebase Predictions
  • Firebase Cloud Messaging
  • Firebase In-App Messaging
  • Firebase Remote Config
  • Firebase A/B Testing

出现提示时,选择使用现有的 Google Analytics 账号或创建新账号。如果您选择创建新账号,请选择您的 Google Analytics 报告位置,然后接受项目的数据共享设置和 Google Analytics 条款。

1282a798556779ab

48ade68c8de27d2

  1. 点击创建项目(如果使用现有 GCP 项目,则点击添加 Firebase)。

Firebase 会自动为您的 Firebase 项目预配资源。完成此过程后,您将进入 Firebase 控制台中 Firebase 项目的概览页面。

在 Firebase 中注册您的应用

有了 Firebase 项目后,您就可以向其中添加 Android 应用了。

请访问了解 Firebase 项目,详细了解将应用添加到 Firebase 项目的最佳做法和注意事项,包括如何处理多个 build 变体。

  1. 转到 Firebase 控制台。
  2. 在“项目概览”页面顶部,点击 Android 图标以启动设置工作流。如果您已向 Firebase 项目添加了应用,请点击“添加应用”以显示平台选项。
  3. Android 软件包名称字段中输入应用的软件包名称。
  4. (可选)输入应用别名
  5. 请将 SHA-1 字段留空,因为此项目不需要 SHA-1。
  6. 点击注册应用

添加 Firebase 配置文件

接下来,系统会提示您下载配置文件,其中包含应用所需的所有 Firebase 元数据。点击下载 google-services.json,获取 Firebase Android 配置文件 (google-services.json)。

bc8ec7d3c9a28d75.png

a99b7415462dfc8b.png

项目级 Gradle 文件 (build.gradle) 中添加规则,以包含 Google 服务 Gradle 插件。此外,请确认您拥有 Google 的 Maven 制品库。

项目级 build.gradle (<project>/build.gradle):

buildscript {

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
  }

  dependencies {
    // ...

    // Add the following line:
    classpath 'com.google.gms:google-services:4.3.5'  // Google Services plugin
  }
}

allprojects {
  // ...

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
    // ...
  }
}

在您的模块(应用级)Gradle 文件(通常是 app/build.gradle)中,应用 Google 服务 Gradle 插件:

应用级 build.gradle (<project>/<app-module>/build.gradle)

应用插件:“com.android.application”

// 添加以下行

apply plugin: ‘com.google.gms.google-services'// Google 服务插件

android {

// ...

}

将 Firebase SDK 添加到您的 Android 应用

使用 Remote Config 时,需要有 Google Analytics 才能将应用实例有条件地定位到用户属性和受众群体。请务必在项目中启用 Google Analytics。

(这已在示例快速入门代码中完成)

使用 Firebase Android BoM模块(应用级)Gradle 文件(通常为 app/build.gradle)中声明 Remote Config Android 库的依赖项。借助 Firebase Android BoM,可确保您的应用始终使用 Firebase Android 库的兼容版本。

此外,在设置 Google Analytics 时,您还需要将 Firebase SDK for Google Analytics 添加到您的应用中。在依赖项下,添加以下代码:

app/build.gradle

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:26.6.0')

    // Declare the dependencies for the Remote Config and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-config'
    implementation 'com.google.firebase:firebase-analytics'
}

将项目与 Gradle 文件同步

为确保所有依赖项都对您的应用可用,请选择 File >Sync Project with Gradle Files

4. 查看 Remote Config 的主要组件

下面我们将回顾在应用中使用 Remote Config 的步骤。已在快速入门 Codelab 代码中完成这些步骤。请在查看快速入门 Codelab 代码时参考本部分内容,了解代码执行情况。

1. 获取 Remote Config 单例对象

获取 Remote Config 对象实例,并设置最小提取间隔以实现频繁刷新:

MainActivity.java

mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);

此单例对象用于存储应用内默认参数值,从后端提取更新后的参数值,以及控制提取的值何时可供应用使用。

在开发期间,建议设置相对较短的最小提取间隔。如需了解详情,请参阅限制

2. 设置应用内默认参数值

您可以在 Remote Config 对象中设置应用内默认参数值,以便应用在连接到 Remote Config 后端之前能够按预期运行,并且保证在后端中未设置任何值时可以使用默认值。

您可以使用 Map 对象或 XML 资源文件(存储在您应用的 res/xml 文件夹中)定义一组参数名称和默认参数值。Remote Config 快速入门示例应用使用 XML 文件来定义默认参数名称和值。下面展示了如何创建您自己的 XML 文件:

  1. res 文件夹下创建一个 xml 文件夹。

4b8a2a637a626e94

  1. 右键点击新创建的 xml 文件夹,然后创建一个文件。

358b4ba740120ece

  1. 设置默认值。在下一部分中,您将尝试更改 Remote Config 快速入门 XML 文件中的默认值。
  2. 使用 setDefaultsAsync(int) 方法将这些值添加到 Remote Config 对象,如下所示:

MainActivity.java

mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);

3. 获取要在应用中使用的参数值

现在,您可以从 Remote Config 对象中获取参数值。如果您在后端中设置值,然后提取并激活它们,这些值便可供您的应用使用。否则,您需要获取使用 setDefaultsAsync(int) 方法配置的应用内参数值。如需获取这些值,请调用下列与应用所需数据类型对应的方法,并以实参形式提供形参键:

4. 提取并激活值

  1. 如需从 Remote Config 后端提取参数值,请调用 fetch() 方法。系统将提取您在后端中设置的所有值,并将其存储在 Remote Config 对象中。
  2. 要将提取的参数值提供给您的应用,请调用 activate() 方法。如果您想在一次调用中提取并激活值,可以使用 fetchAndActivate()请求从 Remote Config 后端提取值,并使其可供应用使用:

MainActivity.java

mFirebaseRemoteConfig.fetchAndActivate()
        .addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
            @Override
            public void onComplete(@NonNull Task<Boolean> task) {
                if (task.isSuccessful()) {
                    boolean updated = task.getResult();
                    Log.d(TAG, "Config params updated: " + updated);
                    Toast.makeText(MainActivity.this, "Fetch and activate succeeded",
                            Toast.LENGTH_SHORT).show();

                } else {
                    Toast.makeText(MainActivity.this, "Fetch failed",
                            Toast.LENGTH_SHORT).show();
                }
                displayWelcomeMessage();
            }
        });

由于这些更新后的参数值会影响应用的行为和外观,因此您应该选择激活已提取的值的时机,例如在用户下次打开您的应用时激活,以确保为用户提供流畅的体验。如需了解详情和查看示例,请参阅 Remote Config 加载策略

限制

如果应用在短时间内提取次数过多,提取调用会受到限制,并且 SDK 会返回 FirebaseRemoteConfigFetchThrottledException。在 SDK 17.0.0 版本之前,应用在 60 分钟内最多可以发送 5 次提取请求(在较新版本中,此限制更为宽松)。

在应用开发期间,您可能需要非常频繁地(每小时很多次)提取和激活配置,以便在开发和测试应用时快速迭代。为了让最多 10 名开发者对项目进行快速迭代,您可以在应用中临时设置一个具有较短最小提取间隔 (setMinimumFetchIntervalInSeconds) 的 FirebaseRemoteConfigSettings 对象。

Remote Config 的默认最小提取间隔为 12 小时,这意味着无论实际上调用了多少次提取方法,在 12 小时的时间段内最多只会从后端提取一次配置。具体而言,最小提取间隔按以下顺序确定:

  1. fetch(long) 中的参数
  2. FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long) 中的参数
  3. 默认值 12 小时

如需将最小提取间隔设置为自定义值,请使用 FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long)

5. 使用 Remote Config 更改应用行为

更改应用内默认参数

打开 res/xml/remote_config_defaults.xml 并将默认值更改为其他内容。

res/xml/remote_config_defaults.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- START xml_defaults -->
<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>
</defaultsMap>
    <!-- END xml_defaults -->

验证应用内默认值的变化

  1. 在模拟器中或使用测试设备运行项目来确认行为。
  2. 在 Java 或 Kotlin 版本上点击“打开”。

c1582b989c25ced.png

  1. 查看主视图中的欢迎辞。

4c838bf5a629d5b8

在 Remote Config 后端中设置参数值

现在,我们来测试通过 Remote Config 发送值的操作。使用 Firebase 控制台或 Remote Config 后端 API,您可以创建新的服务器端默认值,这些值会根据您希望的条件逻辑或用户定位条件来替换应用内的值。本部分介绍了在 Firebase 控制台中创建这些值的步骤。

  1. 打开 Firebase 控制台,然后打开您的项目。
  2. 从“吸引”部分的左侧菜单中,选择 Remote Config,以查看 Remote Config 信息中心。
  3. Add a parameters(添加参数)下,输入 Parameter key.Default value 下添加所需的任何文本。然后,点击“添加参数”。在此 Codelab 中,我们将使用 res/xml/remote_config_defaults.xml 文件中的参数键。有关详情,请参阅下表:

参数键

默认值 (remote_config_defaults.xml)

说明

loading_phrase

正在提取配置...

String;在提取 Remote Config 值时显示。

welcome_message_caps

false

布尔值;如果为 true,将 welcome_message 更改为全部大写

welcome_message

欢迎使用我的炫酷应用!

String;欢迎信息

屏幕截图示例:

28fa48f18da43002

  1. 添加完参数后,点击“发布更改”。
  2. 在模拟器或设备上运行您的应用,然后点击“Fetch Remote Welcome”(获取远程欢迎)按钮。

cfe900477549adb7.png

  1. 应根据您的 Remote Config 参数和值更新欢迎辞!

6. 恭喜

恭喜,您已成功使用 Remote Config 更改了欢迎辞!还有很多方法可以利用 Remote Config 来更改和自定义应用。请参阅下面列出的其他资源: