Firebase Remote Config supporta la configurazione lato server utilizzando gli SDK Firebase Admin per Node.js (v12.1.0+), Python (v6.7.0+), Java (v9.7.0+) e Go (v4.17.0+).
Questa funzionalità ti consente di gestire in modo dinamico il comportamento e la configurazione delle applicazioni lato server utilizzando Remote Config. Sono incluse le implementazioni serverless come Cloud Functions for Firebase e i servizi containerizzati su Cloud Run.
A differenza degli SDK client Firebase, che recuperano una configurazione specifica del client derivata dal template Remote Config, l'SDK Remote Config lato server scarica o recupera un template Remote Config completo da Firebase. Il tuo server può quindi valutare il template con ogni richiesta in arrivo e utilizzare la propria logica per fornire una risposta personalizzata con una latenza molto bassa. Puoi utilizzare le condizioni per controllare e personalizzare le risposte in base a percentuali casuali e attributi del client definiti negli indicatori personalizzati.
Con Remote Config lato server, puoi:
- Definisci i parametri di configurazione per le applicazioni in esecuzione o accessibili tramite il tuo server, consentendo casi d'uso come la configurazione remota dei parametri e dei prompt del modello di AI e altre integrazioni, per garantire la sicurezza delle tue chiavi API.
- Regola dinamicamente i parametri in risposta ai cambiamenti nell'ambiente o ad altre modifiche dell'applicazione, come l'aggiornamento dei parametri LLM e degli endpoint del modello.
- Controlla i costi aggiornando da remoto le API chiamate dal tuo server.
- Genera configurazioni personalizzate on-the-fly per i client che accedono al tuo server.
- Registra i client che hanno ricevuto un valore parametro e utilizzalo in Cloud Functions for Firebase come parte di un sistema di verifica dei diritti.
Puoi eseguire il deployment di Remote Config lato server su Cloud Run, Cloud Functions for Firebase o ambienti server in hosting autonomo.
Prima di iniziare
Segui le istruzioni riportate in Aggiungi l'SDK Firebase Admin al tuo server per creare un progetto Firebase, configurare un service account e aggiungere l'SDK Firebase Admin al tuo server. Assicurati di utilizzare una versione supportata dell'SDK Admin per la tua piattaforma:
- Node.js: SDK Firebase Admin Node.js v12.1.0 o versioni successive
- Python: SDK Firebase Admin Python v6.7.0 e versioni successive
- Java: SDK Firebase Admin per Java v9.7.0 o versioni successive
- Go: SDK Firebase Admin Go v4.17.0 o versioni successive
Passaggio 1: inizializza l'SDK Firebase Admin e autorizza le richieste API
Quando inizializzi l'SDK Admin senza parametri, l'SDK utilizza le Credenziali predefinite dell'applicazione Google e legge le opzioni dalla variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS. Inizializza l'SDK e configura Remote Config per la tua piattaforma:
Node.js
Importa initializeApp e getRemoteConfig, quindi inizializza l'istanza dell'applicazione Firebase:
import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";
// Initialize Firebase
const firebaseApp = initializeApp();
Python
Importa firebase_admin (insieme a asyncio e json per il caricamento asincrono dei modelli e l'analisi JSON), quindi inizializza l'applicazione:
import firebase_admin
import asyncio
import json
firebase_admin.initialize_app()
Java
Inizializza l'SDK Firebase Admin utilizzando FirebaseOptions e le credenziali del tuo service account:
// Initialize the Firebase Admin SDK
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.build();
FirebaseApp.initializeApp(options);
Vai
Inizializza l'applicazione Firebase e crea un'istanza client RemoteConfig:
ctx := context.Background()
// Initialize Firebase
app, err := firebase.NewApp(ctx, nil)
if err != nil {
log.Fatalln("Error initializing app:", err)
}
remoteConfig, err := app.RemoteConfig(ctx)
if err != nil {
log.Fatalln("Error initializing remote config client:", err)
}
Passaggio 2: identifica i valori parametro predefiniti per l'applicazione server
Identifica le variabili nella tua app che vuoi aggiornare dinamicamente con Remote Config. Poi, valuta quali variabili devono essere impostate per impostazione predefinita nella tua applicazione e quali devono essere i relativi valori predefiniti. In questo modo, l'applicazione viene eseguita correttamente anche se la connessione al server di backend Remote Config viene interrotta.
Ad esempio, se stai scrivendo un'applicazione server che gestisce una funzione AI generativa, puoi impostare un nome del modello predefinito, un preambolo del prompt e una configurazione di AI generativa, come i seguenti:
| Nome del parametro | Descrizione | Tipo | Valore predefinito |
|---|---|---|---|
model_name |
Nome API del modello | Stringa | gemini-3.8-flash |
preamble_prompt |
Prompt da anteporre alla query dell'utente | Stringa | 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 |
Parametri da inviare al modello | JSON | {"stopSequences": ["I hope this helps"],
"maxOutputTokens": 512} |
Passaggio 3: configura l'applicazione server
Dopo aver determinato i parametri che vuoi utilizzare con Remote Config, configura l'applicazione in modo che imposti i valori predefiniti, recuperi il template Remote Config specifico per il server e ne valuti i valori.
Accedi al modello di server Remote Config e caricalo.
Node.js
Inizializza il template del server utilizzando
initServerTemplate()e chiamaload()per recuperare il template dal backend:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = rc.initServerTemplate(); // Load Remote Config await template.load();Se utilizzi Node.js all'interno di Cloud Functions for Firebase, puoi utilizzare la funzione asincrona
getServerTemplate()per inizializzare e caricare il template in un unico passaggio:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = await rc.getServerTemplate();Python
Inizializza il template del server utilizzando
init_server_template()e chiamaload()per recuperare il template dal backend:from firebase_admin import remote_config # Initialize server-side Remote Config template = remote_config.init_server_template() # Load the template from the backend asyncio.run(template.load())In alternativa, se utilizzi Python con Cloud Functions for Firebase, puoi utilizzare la funzione asincrona
get_server_template()per inizializzare e caricare il template in un unico passaggio:# Initialize server-side Remote Config template = await remote_config.get_server_template()Java
Inizializza il client Remote Config lato server utilizzando
FirebaseRemoteConfig.getInstance():// Initialize server-side Remote Config client FirebaseRemoteConfig rc = FirebaseRemoteConfig.getInstance();In alternativa, se utilizzi Java con Cloud Functions for Firebase, puoi utilizzare
getServerTemplate()per inizializzare e caricare il template in un unico passaggio:ServerTemplate template = rc.getServerTemplate();Vai
Inizializza il template del server utilizzando
InitServerTemplate()e chiamaLoad()per recuperare il template dal backend:// Initialize server-side Remote Config defaultConfig := make(map[string]any) templateDataJSON := "" template, err := remoteConfig.InitServerTemplate(defaultConfig, templateDataJSON) if err != nil { log.Fatalln("Error initializing server template:", err) } // Load Remote Config err = template.Load(ctx) if err != nil { log.Fatalln("Error fetching server template:", err) }Un altro modo per inizializzare il modello è utilizzare la funzione
GetServerTemplateper recuperare il modello lato server richiesto. Puoi convertire questo template in un formato JSON che può essere archiviato localmente e, successivamente, inizializzare questo template JSON utilizzando la funzioneInitServerTemplate.Per assicurarti che l'applicazione venga eseguita correttamente anche se la connessione al server di backend Remote Config viene interrotta, aggiungi valori predefiniti per ogni parametro nell'app.
Node.js
Aggiungi un oggetto
defaultConfigall'interno della funzione del modelloinitServerTemplateogetServerTemplate:const template = rc.initServerTemplate({ defaultConfig: { model_name: "gemini-3.8-flash", generation_config: '{"stopSequences": [], "maxOutputTokens": 512}', 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!" }, }); // Load Remote Config await template.load();Python
Aggiungi un dizionario
default_configall'interno della funzione del modelloinit_server_templateoget_server_template:template = remote_config.init_server_template({ 'default_config': { 'model_name': "gemini-3.8-flash", 'generation_config': '{"stopSequences": [], "maxOutputTokens": 512}', '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!" }, }) # Load Remote Config asyncio.run(template.load())Un altro modo per inizializzare un modello è utilizzare la funzione
get_server_templateper recuperare il modello lato server richiesto. Puoi convertire questo modello in un formato JSON utilizzando la funzionetemplate.to_json. Questo template JSON può essere archiviato localmente e puoi inizializzarlo in un secondo momento utilizzando la funzioneinit_server_template.Java
Aggiungi un oggetto
defaultConfigutilizzandoKeysAndValuesall'interno della funzionegetServerTemplate:// 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);In alternativa, puoi passare un modello memorizzato nella cache predefinito durante l'inizializzazione di Remote Config, che può essere utilizzato anche quando la connessione al server Remote Config viene interrotta:
String templateDataJSON = "{}"; // add your default template as JSON ServerTemplate template = rc.serverTemplateBuilder() .defaultConfig(defaultConfig) .cachedTemplate(templateDataJSON) .build();Vai
Aggiungi una mappa
defaultConfigall'interno della funzione del templateInitServerTemplateoGetServerTemplate:// Initialize server-side Remote Config defaultConfig := make(map[string]any) defaultConfig["model_name"] = "gemini-3.8-flash" // Assume the type generationConfig has been defined defaultConfig["generation_config"] = &generationConfig{ StopSequences: []string{"I hope this helps"}, MaxOutputTokens: 512, } defaultConfig["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!" templateDataJSON := "" template, err := remoteConfig.InitServerTemplate(defaultConfig, templateDataJSON) if err != nil { log.Fatalln("Error initializing server template:", err) } // Load Remote Config err = template.Load(ctx) if err != nil { log.Fatalln("Error fetching server template:", err) }Dopo aver caricato il modello, valutalo per importare i parametri e i valori dal modello:
Node.js
Utilizza
template.evaluate():// Add template parameters to config const config = template.evaluate();Python
Utilizza
template.evaluate():# Add template parameters to config config = template.evaluate()Java
Utilizza
template.evaluate():// Add template parameters to config ServerConfig config = template.evaluate();Vai
Utilizza
template.Evaluate()con un contesto di valutazione vuoto quando non vengono applicate condizioni:// An empty evaluation context means no conditions are applied. evaluationContext := make(map[string]any) config, err := template.Evaluate(evaluationContext) if err != nil { log.Fatalln("Error evaluating template:", err) }Facoltativamente, se imposti condizioni nel template Remote Config, definisci e fornisci i valori di contesto che preferisci:
- Se utilizzi
condizioni di percentuale,
aggiungi l'ID di randomizzazione (
randomizationId,randomization_idorandomizationID) che vuoi utilizzare per valutare le condizioni all'interno della funzione di valutazione del template. - Se utilizzi gli indicatori personalizzati, definisci gli attributi e i relativi valori. Gli indicatori personalizzati sono disponibili con l'SDK Firebase Admin per Node.js v12.5.0 e versioni successive, l'SDK per Python v6.7.0 e versioni successive, l'SDK per Java v9.7.0 e versioni successive e l'SDK per Go v4.17.0 e versioni successive.
Ad esempio, puoi impostare un ID installazione Firebase o un ID utente come ID di randomizzazione per assicurarti che ogni utente che contatta il tuo server venga aggiunto al gruppo randomizzato appropriato,
versioncome indicatore personalizzato per scegliere come target versioni client specifiche eplatformcome indicatore personalizzato per scegliere come target le piattaforme client.Per saperne di più sulle condizioni, consulta Tipi di regole di condizione.
Node.js
Passa un oggetto di contesto di valutazione contenente
randomizationIded eventuali indicatori personalizzati atemplate.evaluate():// Add template parameters to `config`. Evaluates the // template and returns the parameter value assigned to // the group assigned to the {randomizationId} and version. const config = template.evaluate({ randomizationId: "2ac93c28-c459-4760-963d-a3974ec26c04", version: "1.0", platform: "Android" });Python
Passa un dizionario contenente
randomization_ide tutti gli indicatori personalizzati atemplate.evaluate():# Add template parameters to `config`. Evaluates the # template and returns the parameter value assigned to # the group assigned to the {randomization_id} and version. config = template.evaluate({ 'randomization_id': "2ac93c28-c459-4760-963d-a3974ec26c04", 'version': "1.0", 'platform': "Android" })Java
Crea un contesto
KeysAndValuescontenenterandomizationIded eventuali indicatori personalizzati e passalo atemplate.evaluate():// 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);Vai
Passa una mappa del contesto di valutazione contenente
randomizationIDed eventuali indicatori personalizzati atemplate.Evaluate():// Add template parameters to `config`. Evaluates the // template and returns the parameter value assigned to // the group assigned to the {randomizationID}, version, and platform. evaluationContext := make(map[string]any) evaluationContext["randomizationID"] = "2ac93c28-c459-4760-963d-a3974ec26c04" evaluationContext["version"] = "1.0" evaluationContext["platform"] = "Android" config, err := template.Evaluate(evaluationContext) if err != nil { log.Fatalln("Error evaluating template:", err) }- Se utilizzi
condizioni di percentuale,
aggiungi l'ID di randomizzazione (
Poi, estrai i valori dei parametri necessari dall'oggetto di configurazione valutato. Utilizza i metodi getter per eseguire il cast dei valori da Remote Config nel formato previsto.
Ad esempio, se stai implementando Agent Platform sul tuo server e vuoi modificare il modello e i relativi parametri, puoi configurare i parametri per
model_nameegeneration_config. Di seguito sono riportati i metodi getter supportati e un esempio di come accedere ai valori Remote Config per ogni piattaforma:Node.js
Metodi getter supportati:
- Booleano:
getBoolean - Oggetto:
getValue - Numero:
getNumber - Stringa:
getString
// Replace defaults with values from Remote Config. const generationConfig = JSON.parse( config.getString('generation_config')); const is_ai_enabled = config.getBoolean('is_ai_enabled'); const model = config.getString('model_name'); // Generates a prompt comprised of the Remote Config // parameter and prepends it to the user prompt const prompt = `${config.getString('preamble_prompt')} ${req.query.prompt}`;Python
Metodi getter supportati:
- Booleano:
get_bool - Numero intero:
get_int - Fluttuazione:
get_float - Stringa:
get_string - Origine del valore:
get_value_source
# Replace defaults with values from Remote Config. generation_config = json.loads(config.get_string('generation_config')) is_ai_enabled = config.get_bool('is_ai_enabled') model = config.get_string('model_name') # Generates a prompt comprised of the Remote Config # parameter and prepends it to the user prompt. prompt = f"{config.get_string('preamble_prompt')}{req.args.get('prompt')}"Java
Metodi getter supportati:
- Booleano:
getBoolean - Stringa:
getString - Doppio:
getDouble - Formato esteso:
getLong - Origine del valore:
getValueSource
// Get the model name String modelName = config.getString("model_name"); // Get the origin of value assigned to param ValueSource modelNameSource = config.getValueSource("model_name");Il metodo
getValueSourcerestituisce unValueSourceche indica se l'origine del valore del parametro èSTATIC,REMOTEoDEFAULT.Vai
Metodi getter supportati:
- Booleano:
GetBoolean - Numero intero:
GetInt - Fluttuazione:
GetFloat - Stringa:
GetString - Origine del valore:
GetValueSource
// Replace defaults with values from Remote Config. // Assume the type generationConfig has been defined var genConfig generationConfig err = json.Unmarshal([]byte(config.GetString("generation_config")), &genConfig) if err != nil { log.Fatalln("Error unmarshaling generation config:", err) } model := config.GetString("model_name") // Parameter created on the console isAIEnabled := config.GetBoolean("is_ai_enabled") // Generates a prompt comprised of the Remote Config // parameter and prepends it to the user prompt (assume it is extracted from the request body) userPrompt := "What is Remote Config?" prompt := fmt.Sprintf("%s %s", config.GetString("preamble_prompt"), userPrompt)- Booleano:
Se il tuo server è a lunga esecuzione, a differenza di un ambiente serverless, ricarica periodicamente il template (ad esempio, utilizzando
setIntervalin Node.js ojava.util.Timerin Java) per verificare che stai recuperando il template più aggiornato dal server Remote Config.
Passaggio 4: imposta i valori dei parametri specifici del server in Remote Config
Poi, crea un modello Remote Config lato server e configura i parametri e i valori da utilizzare nella tua app.
Ecco come creare un modello Remote Config specifico per il server:
Nella console Firebase, vai alla pagina DevOps e coinvolgimento > Remote Config > Parametri.
Dal selettore Client/Server nella parte superiore della pagina, seleziona Server.
Definisci i parametri Remote Config con gli stessi nomi e tipi di dati dei parametri definiti nella tua app e fornisci i valori. Questi valori eseguiranno l'override della configurazione predefinita (
defaultConfigodefault_config) impostata in Configura l'applicazione server quando recuperi e valuti il modello e assegni questi valori alle variabili.Facoltativamente, imposta le condizioni per applicare in modo permanente i valori a un campione casuale di istanze o indicatori personalizzati che definisci. Per saperne di più sulle condizioni, consulta Tipi di regole delle condizioni.
Al termine dell'aggiunta dei parametri, fai clic su Pubblica modifiche.
Rivedi le modifiche e fai di nuovo clic su Pubblica modifiche.
Passaggio 5: esegui il deployment con Cloud Functions for Firebase o Cloud Run
Se la tua applicazione server è leggera e basata su eventi, ti consigliamo di eseguire il deployment del codice utilizzando Cloud Functions for Firebase. Ad esempio, supponiamo che tu abbia un'app che include dialoghi tra personaggi basati su un'API di AI generativa (ad esempio Google AI o Agent Platform). In questo caso, puoi ospitare la logica di gestione dell'LLM in una funzione che l'app chiama on demand.
Per trovare una soluzione che utilizzi Cloud Functions for Firebase di 2ª gen. con Remote Config lato server, consulta Utilizza Remote Config lato server con Cloud Functions for Firebase e Agent Platform.
Per scoprire di più sul deployment della tua app con Cloud Functions for Firebase, consulta Inizia: scrivi, testa ed esegui il deployment delle tue prime funzioni.
Prova una funzione richiamabile di esempio con Remote Config e App Check lato server in Chiama Agent Platform Gemini API (formerly Vertex AI) con Remote Config e App Check.
Se stai creando un'app web con rendering lato server, App Hosting supporta i framework web più diffusi.
In caso contrario, potresti prendere in considerazione Cloud Run. Per eseguire il deployment della tua app server con Cloud Run, segui la guida rapida per il tuo linguaggio:
- Guida rapida: esegui il deployment di un servizio Node.js in Cloud Run
- Guida rapida: esegui il deployment di un servizio Python in Cloud Run
- Guida rapida: esegui il deployment di un servizio Java in Cloud Run
- Guida rapida: esegui il deployment di un servizio Go in Cloud Run
Passaggi successivi
- Esplora i parametri e le condizioni lato server in Parametri e condizioni (lato server).
- Segui una soluzione completa: Utilizza Remote Config lato server con Cloud Functions for Firebase e Agent Platform.
- Scopri come gestire le versioni dei modelli Remote Config.