Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Remote Config 参数和条件

使用 Firebase 控制台或 Remote Config 后端 API时,您需要定义一个或多个参数(键值对),并为这些参数提供应用内默认值。您可以通过定义服务器端参数值来替换应用内默认值。参数键和参数值都是字符串,但是当您在自己的应用中使用参数值时,这些值可以转换为其他数据类型。

借助 Firebase 控制台或 Remote Config REST API,您可以为参数创建新的默认值,以及用于定位应用实例组的条件值。每当您在 Firebase 控制台中更新配置时,Firebase 都会创建并发布 Remote Config 模板的新版本。系统会存储以前的版本,便于您根据需要进行检索或回滚。您也可以通过 REST API 执行这些操作。

本指南将介绍参数、条件、规则、条件值以及各种参数值在 Remote Config 服务器和应用中的优先级,还介绍了用于创建条件的规则类型的相关详细信息。

条件、规则和条件值

条件用于定位一组应用实例。条件由一个或多个规则组成,对于给定应用实例,这些规则必须全部求值为 true,才能使条件求值为 true。如果规则的值未指定(例如没有值可用),该规则将求值为 false

例如,指定应用的初始屏幕的参数可以使用简单规则 if device_os = Android 根据操作系统类型显示不同的图片:

或者,可以使用时间条件来控制应用何时显示特别促销商品。

一个参数可以具有多个使用不同条件的条件值,并且多个参数可以共用一个项目中的多个条件。在 Firebase 控制台的“参数”标签页中,您可以查看每个参数的条件值的提取百分比。此指标表示过去 24 小时内收到每个值的请求所占的百分比。

参数值优先级

一个参数可能有多个与其关联的条件值。以下规则用于确定在某个特定时间点从 Remote Config 服务器获取哪个值,以及在给定的应用实例中使用哪个值:

服务器端参数值按以下优先级列表获取

  1. 首先,对于某个给定的应用实例,如果有任何条件求值为 true,则应用相应的条件值。如果多个条件求值为 true,则 Firebase 控制台界面中显示的第一个(最上面)条件的优先级最高,并且系统在应用从后端中提取值时会提供与该条件关联的条件值。您可以通过在条件标签页中拖放条件来更改条件的优先级。

  2. 如果没有条件求值为 true 的条件值,则应用从后端提取值时系统会提供服务器端默认值。如果后端中不存在某个参数,或者如果默认值设为 Use in-app default,则当应用提取值时,系统不会为该参数提供任何值。

在您的应用中,参数值由 get 方法根据以下优先级列表返回

  1. 如果从后端提取并激活了某个值,则应用将使用该提取的值。参数值一旦激活则永久有效。
  2. 如果未从后端提取任何值,或者如果从 Remote Config 后端提取的值尚未激活,则应用将使用应用内默认值。
  3. 如果未设置应用内默认值,则应用会使用静态类型值(例如,对于 int 使用 0,对于 boolean 使用 false)。

下图总结了参数值在 Remote Config 后端和应用中的优先级排序:

参数值数据类型

借助 Remote Config,您可以为每个参数选择数据类型,并在模板更新之前根据该类型验证所有服务器端值。数据类型存储在 getRemoteConfig 请求中并会通过该请求返回。

目前支持的类型如下:

  • String
  • Boolean
  • Number
  • JSON

在 Firebase 控制台界面中,您可以从参数键旁边的下拉菜单中选择数据类型。在 REST API 中,可以使用参数对象中的 value_type 字段来设置类型。

参数组

Remote Config 可让您将参数组合在一起,以获得更有条理的界面和思维模型。

例如,假设您需要在发布新的登录功能时启用或停用三种不同的身份验证类型。借助 Remote Config,您可以创建三个参数以根据需要启用类型,然后将其整理到名为“新登录”的组中,无需添加前缀或特殊排序。

您可以使用 Firebase 控制台或 Remote Config REST API 创建参数组。您创建的每个参数组在 Remote Config 模板中都有一个唯一的名称。创建参数组时,请注意以下事项:

  • 在任何时候,参数都只能包含在一个组中,并且参数键在所有参数中必须保持唯一。
  • 参数组名称不得超过 256 个字符。
  • 如果您同时使用 REST API 和 Firebase 控制台,请确保所有 REST API 逻辑都已更新,以便在发布时处理参数组。

使用 Firebase 控制台创建或修改参数组

您可以在 Firebase 控制台的参数标签页中对参数进行分组。要创建或修改参数组,请按以下步骤操作:

  1. 选择管理群组
  2. 选中您要添加的参数对应的复选框,然后选择移至组
  3. 选择现有群组,或通过输入名称和说明来创建一个新组,然后选择创建新组。 保存组后,可以使用发布更改按钮进行发布。

以编程方式创建群组

Remote Config REST API提供了一种自动创建和发布参数组的方法。 假设您熟悉 REST 并已设置好为对 API 的请求进行授权,则可以执行以下步骤以编程方式管理群组:

  1. 检索当前模板
  2. 添加 JSON 对象以表示参数组
  3. 使用 HTTP PUT 请求发布参数组。

parameterGroups 对象包含组键,其中包含嵌套说明和已分组参数的列表。请注意,每个组键都必须具有全局唯一性。

例如,以下是从模板修订版本中摘录的一个片段,其中添加了参数组“新菜单”和一个参数,pumpkin_spice_season

{
  "parameters": {},
  "version": {
    "versionNumber": "1",

    …

  },
  "parameterGroups": {
    "new menu": {
      "description": "New Menu",
      "parameters": {
        "pumpkin_spice_season": {
          "defaultValue": {
            "value": "true"
          },
          "description": "Whether it's currently pumpkin spice season."
        }
      }
    }
  }
}

条件规则类型

Firebase 控制台支持以下规则类型。Remote Config REST API 中提供了等效功能,详见条件表达式参考

规则类型运算符注意:
应用 == 从与 Firebase 项目关联的应用 ID 列表中选择。 将某个应用添加到 Firebase 时,您需要输入一个 iOS 软件包 ID 或 Android 软件包名称(用于指定一个在 Remote Config 规则中显示为应用 ID 的属性)。

请按以下所述使用此属性:
  • 对于 iOS 应用:使用应用的 CFBundleIdentifier。您可以在常规标签页中找到软件包标识符,以在 Xcode 中用于应用主目标。
  • 对于 Android 应用:使用应用的 applicationId。您可以在应用级 build.gradle 文件中找到 applicationId
应用版本 对于字符串值
完全匹配、
包含、
不包含、
正则表达式

对于数值
=、≠、>、≥、<、≤

指定您要定位的应用的版本。

使用此规则之前,您必须使用 App ID 规则选择与 Firebase 项目关联的 Android/iOS 应用。

对于 iOS:使用应用的 CFBundleShortVersionString

注意:请确保您的 iOS 应用使用的是 Firebase iOS SDK 6.24.0 版或更高版本,因为在早期版本中,系统不发送 CFBundleShortVersionString(请参阅版本说明)。

对于 Android:使用应用的 versionName

此规则在进行字符串比较时区分大小写。当使用完全匹配包含不包含正则表达式运算符时,您可以选择多个值。

使用正则表达式运算符时,您可以创建采用 RE2 格式的正则表达式。您的正则表达式可以与目标版本字符串的全部或部分文本匹配。您还可以使用 ^$ 定位点与目标字符串的开头部分、结尾部分或全部文本匹配。

build 号 对于字符串值
完全匹配、
包含、
不包含、
正则表达式

对于数值
=, ≠, >, ≥, <, ≤

指定您要定位的应用的 build。

使用此规则之前,您必须使用 App ID 规则选择与 Firebase 项目关联的 iOS 应用。

此运算符仅适用于 iOS 和 Android 应用。它对应于 iOS 版应用的 CFBundleVersion 和适用于 Android 的 versionCode。此规则在进行字符串比较时区分大小写。

当使用完全匹配包含不包含正则表达式运算符时,您可以选择多个值。

使用正则表达式运算符时,您可以创建采用 RE2 格式的正则表达式。您的正则表达式可以与目标版本字符串的全部或部分文本匹配。您还可以使用 ^$ 定位点与目标字符串的开头部分、结尾部分或全部文本匹配。

平台 == iOS
Android
Web
 
操作系统 ==

指定要定位到的操作系统。

使用此规则之前,您必须使用 App ID 规则选择与 Firebase 项目关联的 Web 应用

当操作系统及其版本与指定列表中的目标值匹配时,此规则求值为 true
浏览器 ==

指定要定位到的浏览器。

使用此规则之前,您必须使用 App ID 规则选择与 Firebase 项目关联的 Web 应用

当某个 Web 应用版本及其版本与指定列表中的目标值匹配时,此规则的计算结果为 true
日期/时间 <=、> 指定的日期和时间,可以是设备时区,也可以是指定时区,如“(GMT+11) 悉尼时间”。 将当前时间与设备提取时间进行比较。
用户(随机百分位) <=、> 0-100

使用此字段可将更改应用于一批随机选取的应用实例(抽样比例大小最小可以是 .0001%),使用 <=> 运算符将用户(应用实例)分组。

根据相关项目中定义某一个键,每个应用实例都会永久映射到一个随机整数或小数。除非您选择或创建另一个键,否则规则将使用默认键(在 Firebase 控制台中显示为 DEF)。只需清除使用此键随机选择用户字段,就可以将规则恢复为使用默认键。您可以在多个规则中使用单个键,以便在给定的百分比范围内始终处理相同的应用实例。或者,您也可以通过创建一个新键,在给定的百分比范围内选择一组新的随机分配的应用实例。

例如,若要创建两个相关的条件,每个条件对应于应用用户中 5% 的人,且没有重合的用户,则您可以让一个条件包含 <= 5% 规则,另一个条件同时包含 > 5% 规则和 <= 10% 规则。如果不禁止一些随机用户同时出现在这两个组中,可对每个条件中的规则使用不同的键。

用户(受众群体) == 从您为自己的项目设置的 Google Analytics(分析)受众群体名单中选择一个或多个受众群体。

此规则需要配合一条应用 ID 规则使用,以选择与您的 Firebase 项目关联的某个应用。

注意:由于许多 Analytics 受众群体是通过事件或用户属性定义的,而这些事件或属性可根据应用用户的行为或操作获得,因此对于某个给定的应用实例而言,用户(受众群体)规则可能需要一段时间才能生效。

设备所在国家/地区 == 选择一个或多个国家或地区。 如果某个给定的应用实例位于所列出的任何一个国家或地区中,则对于该实例而言,此规则的求值结果为 true。可以使用请求中的设备的 IP 地址或由 Firebase Analytics 确定的国家/地区代码(如果 Analytics 与 Firebase 共享其数据)来确定设备国家/地区代码。
设备语言 == 选择一种或多种语言。 对于某个给定的应用实例而言,如果安装了该应用实例的设备使用的语言是所列语言之一,则此规则的求值结果为 true
用户属性 对于字符串值
包含、
不包含、
完全匹配、
正则表达式

对于数值
=、≠、>、≥、<、≤

注意:在客户端上,只能为用户属性设置字符串值。对于使用数值运算符的条件,Remote Config 会将相应用户属性的值转换为整数/浮点数。
从可用的 Google Analytics(分析)用户属性列表中选择。 如需了解如何利用用户属性来针对非常具体的细分用户群量身打造应用,请参阅 Remote Config 和用户属性

如需了解关于用户属性的更多信息,请参阅下列指南:

当使用完全匹配包含不包含正则表达式运算符时,您可以选择多个值。

使用正则表达式运算符时,您可以创建采用 RE2 格式的正则表达式。您的正则表达式可以与目标版本字符串的全部或部分文本匹配。您还可以使用 ^$ 定位点与目标字符串的开头部分、结尾部分或全部文本匹配。

注意:目前,在创建 Remote Config 条件时无法使用自动收集的用户属性
导入的细分 == 选择一个或多个导入的细分。 此规则要求设置自定义导入的细分

搜索参数和条件

Firebase 控制台中,您可以使用 Remote Config 参数标签页顶部的搜索框来搜索项目的参数键、参数值和条件。

参数和条件的限制

在一个 Firebase 项目中,最多可以有 2000 个参数和 500 个条件。参数键最多可包含 256 个字符,且必须以下划线或英文字母(A-Z、a-z)开头,还可以包含数字。一个项目中所有参数值字符串的总长度不能超过 80 万个字符。

后续步骤

如需开始配置您的 Firebase 项目,请参阅设置 Firebase Remote Config 项目