Firebase Remote Config obsługuje konfigurację po stronie serwera za pomocą pakietów SDK Firebase Admin dla Node.js (wersja 12.1.0 lub nowsza), Pythona (wersja 6.7.0 lub nowsza), Javy (wersja 9.7.0 lub nowsza) i Go (wersja 4.17.0 lub nowsza).
Ta funkcja umożliwia dynamiczne zarządzanie działaniem i konfiguracją aplikacji po stronie serwera za pomocą Remote Config. Obejmuje to implementacje bezserwerowe, takie jak Cloud Functions for Firebase, oraz usługi skonteneryzowane w Cloud Run.
W przeciwieństwie do pakietów SDK klienta Firebase, które pobierają konfigurację klienta pochodzącą z szablonu Remote Config, pakiet SDK Remote Config po stronie serwera pobiera z Firebase cały szablon Remote Config. Serwer może następnie oceniać szablon przy każdym przychodzącym żądaniu i używać własnej logiki do wyświetlania dostosowanej odpowiedzi z bardzo niskim opóźnieniem. Możesz używać warunków, aby kontrolować i dostosowywać odpowiedzi na podstawie losowych wartości procentowych i atrybutów klienta zdefiniowanych w sygnałach niestandardowych.
Dzięki Remote Config po stronie serwera możesz:
- Zdefiniuj parametry konfiguracji aplikacji działających na serwerze lub dostępnych za jego pośrednictwem, aby umożliwić takie przypadki użycia jak zdalna konfiguracja parametrów i promptów modelu AI oraz inne integracje, co zapewni bezpieczeństwo kluczy interfejsu API.
- dynamicznie dostosowywać parametry w odpowiedzi na zmiany w środowisku lub inne zmiany w aplikacji, takie jak aktualizowanie parametrów LLM i punktów końcowych modelu;
- Kontroluj koszty, zdalnie aktualizując interfejsy API wywoływane przez serwer.
- generować niestandardowe konfiguracje na bieżąco dla klientów, którzy uzyskują dostęp do Twojego serwera;
- Zapisuj, którzy klienci otrzymali wartość parametru, i używaj tych informacji w Cloud Functions for Firebase w ramach systemu weryfikacji uprawnień.
Możesz wdrożyć Remote Config po stronie serwera w środowiskach serwerowych Cloud Run, Cloud Functions for Firebase lub hostowanych samodzielnie.
Zanim zaczniesz
Postępuj zgodnie z instrukcjami podanymi w artykule Dodawanie pakietu Firebase Admin SDK do serwera, aby utworzyć projekt w Firebase, skonfigurować konto usługi i dodać pakiet Firebase Admin SDK do serwera. Upewnij się, że używasz obsługiwanej wersji pakietu Admin SDK na swojej platformie:
- Node.js: pakiet SDK Firebase Admin Node.js w wersji 12.1.0 lub nowszej.
- Python: Firebase Admin Python SDK w wersji 6.7.0 lub nowszej
- Java: pakiet Admin Java SDK Firebase w wersji 9.7.0 lub nowszej
- Go: pakiet SDK Firebase Admin Go w wersji 4.17.0 lub nowszej
Krok 1. Zainicjuj pakiet Firebase Admin SDK i autoryzuj żądania do interfejsu API
Gdy inicjujesz pakiet Admin SDK bez parametrów, używa on domyślnych danych logowania aplikacji Google i odczytuje opcje ze zmiennej środowiskowej GOOGLE_APPLICATION_CREDENTIALS. Zainicjuj pakiet SDK i skonfiguruj Remote Config na swojej platformie:
Node.js
Zaimportuj initializeApp i getRemoteConfig, a następnie zainicjuj instancję aplikacji Firebase:
import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";
// Initialize Firebase
const firebaseApp = initializeApp();
Python
Zaimportuj firebase_admin (oraz asyncio i json na potrzeby asynchronicznego wczytywania szablonów i analizowania plików JSON), a następnie zainicjuj aplikację:
import firebase_admin
import asyncio
import json
firebase_admin.initialize_app()
Java
Zainicjuj pakiet Firebase Admin SDK, używając FirebaseOptions i danych logowania konta usługi:
// Initialize the Firebase Admin SDK
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.build();
FirebaseApp.initializeApp(options);
Go
Zainicjuj aplikację Firebase i utwórz instancję klienta 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)
}
Krok 2. Określ domyślne wartości parametrów dla aplikacji serwerowej
Określ zmienne w aplikacji, które chcesz dynamicznie aktualizować za pomocą Remote Config. Następnie zastanów się, które zmienne muszą być domyślnie ustawione w aplikacji i jakie powinny być ich wartości domyślne. Dzięki temu aplikacja działa prawidłowo, nawet jeśli połączenie z serwerem backendu Remote Config zostanie przerwane.
Jeśli na przykład piszesz aplikację serwerową, która zarządza funkcją AI, możesz ustawić domyślną nazwę modelu, wprowadzenie do prompta i konfigurację generatywnej AI, na przykład:
| Nazwa parametru | Opis | Typ | Wartość domyślna |
|---|---|---|---|
model_name |
Nazwa interfejsu API modelu | Ciąg znaków | gemini-3.8-flash |
preamble_prompt |
Prompt, który ma zostać dodany na początku zapytania użytkownika | Ciąg znaków | 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 |
Parametry do wysłania do modelu | JSON | {"stopSequences": ["I hope this helps"],
"maxOutputTokens": 512} |
Krok 3. Skonfiguruj aplikację serwera
Po określeniu parametrów, których chcesz używać z usługą Remote Config, skonfiguruj aplikację tak, aby ustawiała wartości domyślne, pobierała szablon Remote Config z serwera i oceniała jego wartości.
Uzyskaj dostęp do szablonu serwera Remote Config i go wczytaj.
Node.js
Zainicjuj szablon serwera za pomocą
initServerTemplate()i wywołajload(), aby pobrać szablon z backendu:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = rc.initServerTemplate(); // Load Remote Config await template.load();Jeśli używasz Node.js w Cloud Functions for Firebase, możesz użyć asynchronicznej funkcji
getServerTemplate(), aby zainicjować i wczytać szablon w jednym kroku:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = await rc.getServerTemplate();Python
Zainicjuj szablon serwera za pomocą
init_server_template()i wywołajload(), aby pobrać szablon z backendu: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())Jeśli używasz Pythona z Cloud Functions for Firebase, możesz też użyć funkcji asynchronicznej
get_server_template(), aby zainicjować i wczytać szablon w jednym kroku:# Initialize server-side Remote Config template = await remote_config.get_server_template()Java
Zainicjuj klienta Remote Config po stronie serwera za pomocą
FirebaseRemoteConfig.getInstance():// Initialize server-side Remote Config client FirebaseRemoteConfig rc = FirebaseRemoteConfig.getInstance();Jeśli używasz Javy z Cloud Functions for Firebase, możesz też użyć
getServerTemplate(), aby zainicjować i wczytać szablon w jednym kroku:ServerTemplate template = rc.getServerTemplate();Go
Zainicjuj szablon serwera za pomocą
InitServerTemplate()i wywołajLoad(), aby pobrać szablon z backendu:// 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) }Innym sposobem zainicjowania szablonu jest użycie funkcji
GetServerTemplatedo pobrania wymaganego szablonu serwera. Możesz przekonwertować ten szablon na format JSON, który można przechowywać lokalnie, a następnie zainicjować ten szablon JSON za pomocą funkcjiInitServerTemplate.Aby mieć pewność, że aplikacja będzie działać prawidłowo nawet wtedy, gdy połączenie z serwerem backendu Remote Config zostanie przerwane, dodaj wartości domyślne dla każdego parametru w aplikacji.
Node.js
Dodaj obiekt
defaultConfigdo funkcji szablonuinitServerTemplatelubgetServerTemplate: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
Dodaj słownik
default_configdo funkcji szablonuinit_server_templatelubget_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())Innym sposobem na zainicjowanie szablonu jest użycie funkcji
get_server_templatedo pobrania wymaganego szablonu serwera. Możesz przekonwertować ten szablon na format JSON za pomocą funkcjitemplate.to_json. Ten szablon JSON można zapisać lokalnie, a następnie zainicjować za pomocą funkcjiinit_server_template.Java
Dodaj obiekt
defaultConfigza pomocąKeysAndValuesw funkcjigetServerTemplate:// 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);Możesz też przekazać domyślny szablon z pamięci podręcznej podczas inicjowania Remote Config, który może być używany nawet wtedy, gdy połączenie z serwerem Remote Config zostanie przerwane:
String templateDataJSON = "{}"; // add your default template as JSON ServerTemplate template = rc.serverTemplateBuilder() .defaultConfig(defaultConfig) .cachedTemplate(templateDataJSON) .build();Go
Dodaj mapę
defaultConfigwewnątrz funkcji szablonuInitServerTemplatelubGetServerTemplate:// 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) }Po wczytaniu szablonu sprawdź go, aby zaimportować z niego parametry i wartości:
Node.js
Użyj
template.evaluate():// Add template parameters to config const config = template.evaluate();Python
Użyj
template.evaluate():# Add template parameters to config config = template.evaluate()Java
Użyj
template.evaluate():// Add template parameters to config ServerConfig config = template.evaluate();Go
Użyj
template.Evaluate()z pustym kontekstem oceny, gdy nie są stosowane żadne warunki:// 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) }Opcjonalnie, jeśli w szablonie Remote Config ustawisz warunki, zdefiniuj i podaj odpowiednie wartości kontekstu:
- Jeśli używasz warunków procentowych, dodaj identyfikator randomizacji (
randomizationId,randomization_idlubrandomizationID), którego chcesz użyć do oceny warunków w funkcji oceny szablonu. - Jeśli używasz sygnałów niestandardowych, zdefiniuj atrybuty i ich wartości. Sygnały niestandardowe są dostępne w pakiecie Firebase Admin Node.js SDK w wersji 12.5.0 lub nowszej, Python SDK w wersji 6.7.0 lub nowszej, Java SDK w wersji 9.7.0 lub nowszej oraz Go SDK w wersji 4.17.0 lub nowszej.
Możesz na przykład ustawić identyfikator instalacji Firebase lub identyfikator użytkownika jako identyfikator randomizacji, aby mieć pewność, że każdy użytkownik, który skontaktuje się z Twoim serwerem, zostanie dodany do odpowiedniej grupy randomizowanej,
versionjako sygnał niestandardowy do kierowania na określone wersje klienta orazplatformjako sygnał niestandardowy do kierowania na platformy klienta.Więcej informacji o warunkach znajdziesz w artykule Typy reguł warunkowych.
Node.js
Przekaż obiekt kontekstu oceny zawierający
randomizationIdi dowolne sygnały niestandardowe dotemplate.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
Przekaż słownik zawierający
randomization_idi dowolne sygnały niestandardowe dotemplate.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
Utwórz kontekst
KeysAndValueszawierającyrandomizationIdi dowolne sygnały niestandardowe, a następnie przekaż go dotemplate.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);Go
Przekaż do
template.Evaluate()mapę kontekstu oceny zawierającąrandomizationIDi dowolne sygnały niestandardowe:// 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) }- Jeśli używasz warunków procentowych, dodaj identyfikator randomizacji (
Następnie wyodrębnij potrzebne wartości parametrów z ocenionego obiektu konfiguracji. Użyj metod pobierających, aby przekonwertować wartości z Remote Config na oczekiwany format.
Jeśli na przykład wdrażasz Agent Platform na serwerze i chcesz zmienić model oraz jego parametry, możesz skonfigurować parametry dla
model_nameigeneration_config. Oto obsługiwane metody pobierania i przykład uzyskiwania dostępu do wartości Remote Config na każdej platformie:Node.js
Obsługiwane metody pobierania:
- Wartość logiczna:
getBoolean - Obiekt:
getValue - Numer:
getNumber - Ciąg znaków:
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
Obsługiwane metody pobierania:
- Wartość logiczna:
get_bool - Liczba całkowita:
get_int - Pływak:
get_float - Ciąg znaków:
get_string - Źródło wartości:
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
Obsługiwane metody pobierania:
- Wartość logiczna:
getBoolean - Ciąg znaków:
getString - Double:
getDouble - Długi:
getLong - Źródło wartości:
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");Metoda
getValueSourcezwraca wartośćValueSource, która wskazuje, czy źródłem wartości parametru jestSTATIC,REMOTEczyDEFAULT.Go
Obsługiwane metody pobierania:
- Wartość logiczna:
GetBoolean - Liczba całkowita:
GetInt - Pływak:
GetFloat - Ciąg znaków:
GetString - Źródło wartości:
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)- Wartość logiczna:
Jeśli Twój serwer działa przez długi czas, w przeciwieństwie do środowiska bezserwerowego, okresowo ponownie wczytuj szablon (np. za pomocą
setIntervalw Node.js lubjava.util.Timerw Java), aby mieć pewność, że pobierasz najbardziej aktualny szablon z serwera Remote Config.
Krok 4. Ustaw wartości parametrów serwera w usłudze Remote Config
Następnie utwórz szablon Remote Config serwera i skonfiguruj parametry oraz wartości do użycia w aplikacji.
Aby utworzyć szablon Remote Config dla konkretnego serwera:
W konsoli Firebase otwórz stronę DevOps i zaangażowanie > Zdalna konfiguracja > Parametry.
W selektorze Klient/Serwer u góry strony wybierz Serwer.
Zdefiniuj parametry Remote Config o takich samych nazwach i typach danych jak parametry zdefiniowane w aplikacji i podaj wartości. Te wartości zastąpią konfigurację domyślną (
defaultConfiglubdefault_config) ustawioną w sekcji Konfigurowanie aplikacji serwerowej, gdy pobierzesz i ocenisz szablon oraz przypiszesz te wartości do zmiennych.Opcjonalnie możesz ustawić warunki, aby stale stosować wartości do losowej próbki instancji lub zdefiniowanych przez Ciebie sygnałów niestandardowych. Więcej informacji o warunkach znajdziesz w artykule Typy reguł warunkowych.
Po dodaniu parametrów kliknij Opublikuj zmiany.
Sprawdź zmiany i ponownie kliknij Opublikuj zmiany.
Krok 5. Przeprowadź wdrożenie za pomocą Cloud Functions for Firebase lub Cloud Run
Jeśli Twoja aplikacja serwerowa jest lekka i oparta na zdarzeniach, rozważ wdrożenie kodu za pomocą Cloud Functions for Firebase. Załóżmy na przykład, że masz aplikację, która zawiera dialogi postaci obsługiwane przez interfejs API generatywnej AI (np. Google AI lub Agent Platform). W takim przypadku możesz hostować logikę obsługującą LLM w funkcji, którą aplikacja wywołuje na żądanie.
Aby zapoznać się z rozwiązaniem, które korzysta z funkcji Cloud Functions for Firebase drugiej generacji z Remote Config po stronie serwera, przeczytaj artykuł Używanie Remote Config po stronie serwera z Cloud Functions for Firebase i Agent Platform.
Więcej informacji o wdrażaniu aplikacji za pomocą Cloud Functions for Firebase znajdziesz w artykule Pierwsze kroki: pisanie, testowanie i wdrażanie pierwszych funkcji.
Wypróbuj przykładową funkcję callable z Remote Config i App Check po stronie serwera na stronie Wywoływanie Agent Platform Gemini API (formerly Vertex AI) za pomocą Remote Config i App Check.
Jeśli tworzysz aplikację internetową renderowaną po stronie serwera, App Hosting obsługuje popularne platformy internetowe.
W przeciwnym razie możesz rozważyć Cloud Run. Aby wdrożyć aplikację serwerową za pomocą Cloud Run, postępuj zgodnie z krótkim przewodnikiem w wybranym języku:
- Szybki start: wdrażanie usługi Node.js w Cloud Run
- Krótki przewodnik: wdrażanie usługi w Pythonie w Cloud Run
- Szybki start: wdrażanie usługi Java w Cloud Run
- Krótkie wprowadzenie: wdrażanie usługi Go w Cloud Run
Dalsze kroki
- Parametry i warunki po stronie serwera znajdziesz w artykule Parametry i warunki (po stronie serwera).
- Przejrzyj kompletne rozwiązanie: używanie Remote Config po stronie serwera z Cloud Functions for Firebase i Agent Platform.
- Dowiedz się, jak zarządzać wersjami szablonów Remote Config.