Firebase Remote Config 支持使用 Firebase Admin Java SDK v9.7.0 版或更高版本进行服务器端配置。借助这项功能,您可以使用 Remote Config 动态管理服务器端应用的行为和配置,包括 Cloud Functions 等无服务器实现。
与 Firebase 客户端 SDK 不同,服务器端 Remote Config SDK 会从 Firebase 提取完整的 Remote Config 模板,而客户端 SDK 提取的是从 Remote Config 模板派生出的客户端专属配置。之后,服务器可以针对每个传入请求为模板赋值,并用自己的逻辑以极低的延迟提供自定义响应。 您可以使用条件根据随机百分比和自定义信号中定义的属性来控制和自定义响应。
借助服务器端 Remote Config,您可以:
- 为在服务器上运行或通过服务器访问的应用定义配置参数,支持远程配置 AI 模型参数和提示以及其他集成等使用场景,以确保 API 密钥的安全性。
- 根据环境的变化或其他应用变化动态调整参数,比如更新 LLM 参数和模型端点。
- 通过远程更新服务器调用的 API 来控制费用。
- 为访问服务器的客户端即时生成自定义配置。
- 记录哪些客户端收到了参数值,并将其作为授权验证系统的一部分在 Cloud Functions 中使用。
您可以在 Cloud Run、Cloud Functions 或自托管的服务器环境中部署服务器端 Remote Config。
准备工作
按照将 Firebase Admin SDK 添加到您的服务器中的说明,创建 Firebase 项目、设置服务账号,并将 Firebase Java SDK 添加到服务器。
第 1 步:初始化 Firebase Admin Java SDK 并对 API 请求授权
如果在初始化 Admin SDK 时未提供任何参数,该 SDK 将使用 Google 应用默认凭据并从 GOOGLE_APPLICATION_CREDENTIALS
环境变量中读取选项。如需初始化 SDK 并添加 Remote Config,请使用以下内容:
// Initialize the Firebase Admin SDK
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.build();
FirebaseApp.initializeApp(options);
第 2 步:确定服务器应用的默认参数值
确定应用中您想要使用 Remote Config 动态更新的变量。然后,考虑应用中必须默认设置哪些变量,以及它们的默认值应该是什么。这可确保应用成功运行,即使其与 Remote Config 后端服务器的连接中断也是如此。
例如,如果您要编写一个管理生成式 AI 函数的服务器应用,您可以设置默认的模型名称、提示序言和生成式 AI 配置,如下所示:
参数名称 | 说明 | 类型 | 默认值 |
---|---|---|---|
model_name |
模型 API 名称 | 字符串 | gemini-2.5-flash |
preamble_prompt
|
要附加到用户查询前面的提示 | 字符串 | I'm a
developer who
wants to learn
about Firebase and
you are a helpful
assistant who
knows everything
there is to know
about Firebase! |
generation_config
|
要发送到模型的参数 | JSON |
{"stopSequences":
["I hope this
helps"],
"temperature":
0.7,
"maxOutputTokens":
512, "topP": 0.9,
"topK": 30} |
第 3 步:配置服务器应用
确定要用 Remote Config 配置的参数后,您便可以开始配置应用,以设置默认值、提取服务器专属的 Remote Config 模板并使用其值。以下步骤介绍了如何配置 Java 应用。
访问并加载模板
// Initialize server side Remote Config client FirebaseRemoteConfig rc = FirebaseRemoteConfig.getInstance();
或者,如果您将 Java 与 Cloud Functions 搭配使用,则可以使用异步
getServerTemplate
,用一个步骤即可初始化和加载模板:template = rc.getServerTemplate();
为应用添加每个参数的默认值,以确保应用成功运行,即使其与 Remote Config 后端服务器的连接中断也是如此。为此,请在
getServerTemplate
模板函数中添加一个defaultConfig
:// Initialize default config using KeysAndValues KeysAndValues defaultConfig = new KeysAndValues.Builder() .put("rc_param_1", "default value 1") .put("rc_param_2", "default value 2") .build(); ServerTemplate template = rc.getServerTemplate(defaultConfig);
或者,您可以在初始化 Remote Config 时传递默认缓存模板,即使与 RC 服务器的连接中断,也可以使用该模板。
templateDataJSON = "{}" // add your default template as json ServerTemplate template = rc.serverTemplateBuilder() .defaultConfig(defaultConfig) .cachedTemplate(templateDataJSON) .build();
模板加载后,使用
template.evaluate()
从模板导入参数和值:此外,如果您在 Remote Config 模板中设置了条件,则可以选择定义并提供所需的值:
- 如果使用百分比条件,请在
template.evaluate()
函数中添加要用作上下文来评估条件的randomizationId
。 - 如果使用自定义信号,请定义属性及其值。自定义信号适用于 Firebase Admin Java SDK 9.7.0 版及更高版本。
// Add custom signals and randomizationID KeysAndValues context = new KeysAndValues.Builder() .put("custom_signal_key", "99") .put("randomizationId", "2ac93c28") .build(); // Evaluate the template with signals ServerConfig config = template.evaluate(context)
- 如果使用百分比条件,请在
接下来,从配置常量中提取所需的参数值。您可以使用
getters
将 Remote Config 中的值转换为您需要的格式。系统支持以下类型:- 布尔值:
getBoolean
- 字符串:
getString
- 双精度型:
getDouble
- 长整型:
getLong
- 值来源:
getValueSource
例如,如果您要在服务器上实现 Vertex AI 并想要更改模型和模型参数,则可能需要为
model_name
和generation_config
配置参数。以下示例展示了如何访问 Remote Config 的值:// Get the model name String modelName = config.getString("model_name"); // Get the origin of value assigned to param ValueSource modelNameSource = config.getValueSource("model_name");
方法
getValueSource()
返回一个 ValueSource,用于指明参数的值来源可以是 STATIC、REMOTE 或 DEFAULT。- 布尔值:
如果您的服务器长时间运行(即不是无服务器环境),您可以使用
java.util.Timer
定期重新加载模板,以确保定期从 Remote Config 服务器提取最新的模板。
第 4 步:在 Remote Config 中设置服务器专属参数值
接下来,创建一个服务器 Remote Config 模板,并配置要在应用中使用的参数和值。
如需创建服务器专属 Remote Config 模板,请执行以下操作:
- 打开 Firebase 控制台Remote Config 参数页面,然后从客户端/服务器选择器中选择服务器。
- 定义与应用中定义的参数具有相同名称和数据类型的 Remote Config 参数,并提供值。当您提取模板、为模板赋值,并将这些值分配给变量时,这些值将替换您在配置服务器应用步骤设置的
default_config
。 - 此外,您还可以选择设置条件,将值持续应用于随机实例样本或您定义的自定义信号。如需详细了解条件,请参阅条件规则类型。
- 添加完参数后,点击发布更改。
- 审核更改,然后再次点击发布更改。
第 5 步:使用 Cloud Functions 或 Cloud Run 进行部署
如果您的服务器应用是轻量级的事件驱动型应用,不妨考虑使用 Cloud Functions 来部署您的代码。例如,如果您有一款应用,其中包含由生成式 AI API(例如 Google AI 或 Vertex AI)提供技术支持的角色对话。在这种情况下,您可以在应用按需调用的函数中托管 LLM 服务逻辑。
如果您的应用打算长时间运行(例如,是包含资源的 Web 应用),不妨考虑使用 Cloud Run。如需使用 Cloud Run 部署服务器应用,请按照快速入门:将 Java 服务部署到 Cloud Run 中的指南操作。
如需详细了解 Cloud Run 和 Cloud Functions 的最佳使用场景,请参阅 Cloud Functions 与 Cloud Run:如何选择应使用这两种服务中的哪一种服务。