Firebase Remote Config supporta la configurazione lato server utilizzando gli SDK Firebase Admin per Node.js (v12.1.0 e versioni successive), Python (v6.7.0 e versioni successive), Java (v9.7.0 e versioni successive) e Go (v4.17.0 e versioni successive).
Questa funzionalità consente di gestire in modo dinamico il comportamento e la configurazione delle applicazioni lato server utilizzando Remote Config. Sono incluse implementazioni serverless come Cloud Functions for Firebase e servizi in container su Cloud Run.
A differenza degli SDK client Firebase, che recuperano una configurazione specifica del client derivata dal modello Remote Config, l'SDK Remote Config lato server scarica o recupera un modello Remote Config completo da Firebase. Il server può quindi valutare il modello con ogni richiesta in entrata 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 agli attributi dei clienti definiti negli indicatori personalizzati.
Con Remote Config lato server, puoi:
- Definisci i parametri di configurazione per le applicazioni in esecuzione o a cui si accede tramite il server, consentendo casi d'uso come la configurazione remota di parametri e prompt del modello di AI e altre integrazioni, per garantire la sicurezza delle chiavi API.
- Regola dinamicamente i parametri in risposta alle modifiche apportate all'ambiente o ad altre applicazioni, ad esempio l'aggiornamento dei parametri LLM e degli endpoint del modello.
- Controlla i costi aggiornando da remoto le API chiamate dal server.
- Genera configurazioni personalizzate al volo per i client che accedono al tuo server.
- Registra i client che hanno ricevuto un valore parametro e utilizzalo in Cloud Functions for Firebase nell'ambito di un sistema di verifica dei diritti.
Puoi eseguire il deployment di Remote Config lato server su Cloud Run, Cloud Functions for Firebase o in ambienti server self-hosted.
Prima di iniziare
Segui le istruzioni riportate in Aggiungere l'SDK Firebase Admin al server per creare un progetto Firebase, configurare un service account e aggiungere l'SDK Firebase Admin al 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 successive
- Python: SDK Firebase Admin Python v6.7.0 o versioni successive
- Java: Firebase Admin Java SDK 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 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 predefiniti dei parametri per l'applicazione server
Identifica le variabili nella tua app che vuoi aggiornare dinamicamente con Remote Config. Poi, considera quali variabili devono essere impostate per impostazione predefinita nella tua applicazione e quali devono essere i loro valori predefiniti. In questo modo, la tua 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 la seguente:
| Nome parametro | Descrizione | Tipo | Valore predefinito |
|---|---|---|---|
model_name |
Nome dell'API del modello | Stringa | gemini-2.0-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"], "temperature": 0.7,
"maxOutputTokens": 512, "topP": 0.1, "topK": 20} |
Passaggio 3: configura l'applicazione server
Dopo aver determinato i parametri che vuoi utilizzare con Remote Config, configura l'applicazione per impostare i valori predefiniti, recuperare il modello Remote Config specifico del server e valutarne i valori.
Accedi e carica il modello di server Remote Config.
Node.js
Inizializza il modello del server utilizzando
initServerTemplate()e chiamaload()per recuperare il modello 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 in Cloud Functions for Firebase, puoi utilizzare la funzione asincrona
getServerTemplate()per inizializzare e caricare il modello in un unico passaggio:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = await rc.getServerTemplate();Python
Inizializza il modello del server utilizzando
init_server_template()e chiamaload()per recuperare il modello 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 modello 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 modello in un unico passaggio:ServerTemplate template = rc.getServerTemplate();Vai
Inizializza il modello del server utilizzando
InitServerTemplate()e chiamaLoad()per recuperare il modello 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 di server richiesto. Puoi convertire questo modello in un formato JSON che può essere archiviato localmente e inizializzarlo successivamente utilizzando la funzioneInitServerTemplate.Per assicurarti che l'applicazione venga eseguita correttamente anche se la connessione al server backend Remote Config viene interrotta, aggiungi valori predefiniti per ogni parametro nell'app.
Node.js
Aggiungi un oggetto
defaultConfigall'interno della funzione di modelloinitServerTemplateogetServerTemplate:const template = rc.initServerTemplate({ defaultConfig: { model_name: "gemini-pro", generation_config: '{"stopSequences": [], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}', 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 di modelloinit_server_templateoget_server_template:template = remote_config.init_server_template({ 'default_config': { 'model_name': "gemini-pro", 'generation_config': '{"stopSequences": [], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}', '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 di server richiesto. Puoi convertire questo modello in formato JSON utilizzando la funzionetemplate.to_json. Questo modello JSON può essere archiviato localmente e puoi inizializzarlo successivamente 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 di modelloInitServerTemplateoGetServerTemplate:// Initialize server-side Remote Config defaultConfig := make(map[string]any) defaultConfig["model_name"] = "gemini-2.0-flash" // Assume the type generationConfig has been defined defaultConfig["generation_config"] = &generationConfig{ StopSequences: []string{"I hope this helps"}, Temperature: 0.7, MaxOutputTokens: 512, TopP: 0.9, TopK: 30, } 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 il caricamento del modello, valutalo per importare parametri e 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) }(Facoltativo) Se imposti condizioni nel modello Remote Config, definisci e fornisci i valori di contesto che preferisci:
- Se utilizzi
condizioni percentuali,
aggiungi l'ID randomizzazione (
randomizationId,randomization_idorandomizationID) che vuoi utilizzare per valutare le condizioni all'interno della funzione di valutazione del modello. - Se utilizzi indicatori personalizzati, definisci gli attributi e i relativi valori. Gli indicatori personalizzati sono disponibili con l'SDK Firebase Admin Node.js 12.5.0+, l'SDK Python 6.7.0+, l'SDK Java 9.7.0+ e l'SDK Go 4.17.0+.
Ad esempio, puoi impostare un ID installazione Firebase o un ID utente come ID randomizzazione per assicurarti che ogni utente che contatta il tuo server venga aggiunto al gruppo randomizzato corretto,
versioncome segnale personalizzato per scegliere come target versioni specifiche del client eplatformcome segnale personalizzato per scegliere come target piattaforme client.Per saperne di più sulle condizioni, vedi Tipi di regole di condizione.
Node.js
Passa un oggetto contesto di valutazione contenente
randomizationIde qualsiasi indicatore personalizzato 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
Trasmetti 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
KeysAndValuescontenenterandomizationIde tutti gli 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
Trasmetti una mappa del contesto di valutazione contenente
randomizationIDe qualsiasi segnale personalizzato 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 percentuali,
aggiungi l'ID randomizzazione (
Successivamente, estrai i valori dei parametri che ti servono dall'oggetto di configurazione valutato. Utilizza i metodi getter per convertire i valori da Remote Config nel formato previsto.
Ad esempio, se stai implementando Agent Platform sul tuo server e vuoi modificare il modello e i parametri del modello, puoi configurare i parametri per
model_nameegeneration_config. Di seguito sono riportati i metodi getter supportati e un esempio di come accedere ai valori di 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 - Doppia:
getDouble - Lungo:
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 è in esecuzione da molto tempo, anziché in un ambiente serverless, ricarica periodicamente il modello (ad esempio utilizzando
setIntervalin Node.js ojava.util.Timerin Java) per verificare di recuperare il modello più aggiornato dal server Remote Config.
Passaggio 4: imposta i valori dei parametri specifici del server in Remote Config
Successivamente, crea un modello Remote Config del server e configura i parametri e i valori da utilizzare nell'app.
Ecco come creare un modello Remote Config specifico per il server:
Nella console Firebase, vai alla pagina DevOps & Engagement > Remote Config > Parametri.
Nel 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 ignorano la configurazione predefinita (
defaultConfigodefault_config) impostata in Configura l'applicazione server quando recuperi e valuti il modello e assegni questi valori alle tue variabili.(Facoltativo) Imposta le condizioni per applicare in modo permanente i valori a un campione casuale di istanze o ai segnali personalizzati che definisci. Per saperne di più sulle condizioni, consulta Tipi di regole di condizione.
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 AI generativa (ad esempio Google AI o Agent Platform). In questo caso, potresti ospitare la logica di servizio del tuo LLM in una funzione che la tua app chiama on demand.
Per una soluzione che utilizza Cloud Functions for Firebase di 2ª gen. con Remote Config lato server, consulta Utilizzare 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 Guida introduttiva: scrivi, testa ed esegui il deployment delle tue prime funzioni.
Prova una funzione chiamabile di esempio con Remote Config e App Check lato server all'indirizzo 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 dell'app server con Cloud Run, segui la guida rapida per la tua lingua:
- Guida rapida: distribuisci un servizio Node.js su Cloud Run
- Guida rapida: esegui il deployment di un servizio Python su Cloud Run
- Guida rapida: esegui il deployment di un servizio Java su Cloud Run
- Guida rapida: distribuisci un servizio Go su Cloud Run
Per saperne di più sui casi d'uso migliori per Cloud Run e Cloud Functions for Firebase, consulta Cloud Functions for Firebase e Cloud Run: quando utilizzare uno o l'altro.
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.