Firebase Remote Config obsługuje konfigurację po stronie serwera za pomocą pakietów Firebase Admin SDK 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, i usługi w kontenerach na platformie Cloud Run.
W przeciwieństwie do pakietów SDK klienta Firebase, które pobierają konfigurację pochodną klienta z Remote Config szablonu, pakiet SDK po stronie serwera Remote Config pobiera z Firebase pełny szablon Remote Config. Serwer może następnie oceniać szablon w przypadku każdego przychodzącego żądania i używać własnej logiki, aby wyświetlać spersonalizowane odpowiedzi z bardzo małym 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:
- Określ parametry konfiguracji aplikacji działających na serwerze lub dostępnych za jego pośrednictwem, co umożliwia korzystanie z przypadków użycia, takich jak zdalne konfigurowanie parametrów i promptów modelu AI oraz innych integracji, aby 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ć na bieżąco niestandardowe konfiguracje dla klientów, którzy uzyskują dostęp do Twojego serwera;
- Rejestrowanie klientów, którzy otrzymali wartość parametru, i używanie tych informacji w Cloud Functions for Firebase w ramach systemu weryfikacji uprawnień.
Tagowanie po stronie serwera możesz wdrożyć w środowiskach serwerowych Remote Config na platformach Cloud Run,Cloud Functions for Firebase lub na serwerach hostowanych samodzielnie.
Zanim zaczniesz
Aby utworzyć projekt w Firebase, skonfigurować konto usługi i dodać pakiet Firebase Admin SDK do serwera, postępuj zgodnie z instrukcjami w artykule Dodawanie pakietu 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: Firebase Admin Java SDK 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 interfejsu API
Gdy zainicjujesz pakiet Admin SDK bez parametrów, użyje on domyślnego uwierzytelniania aplikacji Google i odczyta 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 (wraz z asyncio i json na potrzeby asynchronicznego wczytywania szablonów i parsowania JSON), a następnie zainicjuj aplikację:
import firebase_admin
import asyncio
import json
firebase_admin.initialize_app()
Java
Zainicjuj pakiet Firebase Admin SDK za pomocą 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ę RemoteConfigklienta:
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 aplikacji serwera
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 będzie działać prawidłowo nawet wtedy, gdy połączenie z serwerem backendu Remote Config zostanie przerwane.
Jeśli na przykład piszesz aplikację serwera, która zarządza funkcją AI, możesz ustawić domyślną nazwę modelu, wprowadzenie do promptu i konfigurację generatywnej AI, np. taką:
| Nazwa parametru | Opis | Typ | Wartość domyślna |
|---|---|---|---|
model_name |
Nazwa interfejsu API modelu | Ciąg znaków | gemini-2.0-flash |
preamble_prompt |
Prompt do dodania 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"], "temperature": 0.7,
"maxOutputTokens": 512, "topP": 0.1, "topK": 20} |
Krok 3. Skonfiguruj aplikację serwera
Po określeniu parametrów, których chcesz używać z Remote Config, skonfiguruj aplikację, aby ustawiała wartości domyślne, pobierała szablon Remote Configspecyficzny dla serwera i oceniała jego wartości.
Otwórz i wczytaj szablon serwera Remote Config.
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 użyć asynchronicznej funkcji
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ą tego kodu:
FirebaseRemoteConfig.getInstance()// Initialize server-side Remote Config client FirebaseRemoteConfig rc = FirebaseRemoteConfig.getInstance();Jeśli używasz Javy z Cloud Functions for Firebase, możesz zainicjować i wczytać szablon w jednym kroku za pomocą
getServerTemplate():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 inicjowania szablonu jest użycie funkcji
GetServerTemplatedo pobrania wymaganego szablonu serwera. Ten szablon możesz przekonwertować na format JSON, który można przechowywać lokalnie, a następnie zainicjować go za pomocą funkcjiInitServerTemplate.Aby mieć pewność, że aplikacja będzie działać prawidłowo nawet w przypadku przerwania połączenia z serwerem backendu Remote Config, dodaj do niej wartości domyślne każdego parametru.
Node.js
Dodaj obiekt
defaultConfigwewnątrz funkcji szablonuinitServerTemplatelubgetServerTemplate: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
Dodaj słownik
default_configw funkcji szablonuinit_server_templatelubget_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())Innym sposobem inicjowania szablonu jest użycie funkcji
get_server_templatedo pobrania wymaganego szablonu serwera. Ten szablon możesz przekonwertować na format JSON za pomocą funkcjitemplate.to_json. Ten szablon JSON można przechowywać lokalnie, a następnie zainicjować go za pomocą funkcjiinit_server_template.Java
Dodaj obiekt
defaultConfigza pomocą funkcjiKeysAndValuesw 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. Można go używać 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ę
defaultConfigw funkcji szablonuInitServerTemplatelubGetServerTemplate:// 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) }Po wczytaniu szablonu sprawdź go, aby zaimportować parametry i wartości z szablonu:
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 funkcji
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 wartości kontekstu, które chcesz:
- 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 pakietach Firebase Admin SDK na Node.js w wersji 12.5.0 lub nowszej, na Pythona w wersji 6.7.0 lub nowszej, na Javę w wersji 9.7.0 lub nowszej oraz na Go w wersji 4.17.0 lub nowszej.
Możesz na przykład ustawić Firebaseidentyfikator instalacji lub identyfikator użytkownika jako identyfikator randomizacji, aby mieć pewność, że każdy użytkownik, który kontaktuje się z Twoim serwerem, jest dodawany do odpowiedniej grupy losowej,
versionjako sygnał niestandardowy do kierowania reklam na określone wersje klienta iplatformjako sygnał niestandardowy do kierowania reklam na platformy klienta.Więcej informacji o warunkach znajdziesz w artykule Typy reguł warunków.
Node.js
Przekaż do funkcji
template.evaluate()obiekt kontekstu oceny zawierający parametrrandomizationIdi wszystkie sygnały niestandardowe:// 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 wszystkie 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 wszystkie sygnały niestandardowe, a następnie przekaż go do funkcjitemplate.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ż mapę kontekstu oceny zawierającą
randomizationIDi wszystkie niestandardowe sygnały dotemplate.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) }- Jeśli używasz warunków procentowych, dodaj identyfikator randomizacji (
Następnie wyodrębnij z ocenionego obiektu konfiguracji potrzebne wartości parametrów. Użyj metod pobierających, aby przekształcić wartości z Remote Config do oczekiwanego formatu.
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 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 - Liczba zmiennoprzecinkowa:
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 - Podwójny:
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 - Liczba zmiennoprzecinkowa:
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 długo, w przeciwieństwie do środowiska bezserwerowego, okresowo przeładowuj szablon (np. za pomocą funkcji
setIntervalw Node.js lubjava.util.Timerw Javie), aby mieć pewność, że pobierasz najnowszy szablon z serwera Remote Config.
Krok 4. Ustaw wartości parametrów specyficzne dla serwera w Remote Config
Następnie utwórz szablon serwera Remote Config i skonfiguruj parametry oraz wartości, które będą używane w aplikacji.
Aby utworzyć szablon Remote Configspecyficzny dla 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 Remote Config parametry 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 serwera podczas pobierania i oceniania szablonu oraz przypisywania tych wartości do zmiennych.Opcjonalnie możesz ustawić warunki, aby trwale stosować wartości do losowej próbki instancji lub zdefiniowanych przez Ciebie sygnałów niestandardowych. Więcej informacji o warunkach znajdziesz w sekcji Typy reguł warunków.
Po dodaniu parametrów kliknij Opublikuj zmiany.
Sprawdź zmiany i ponownie kliknij Opublikuj zmiany.
Krok 5. Wdróż za pomocą Cloud Functions for Firebase lub Cloud Run
Jeśli aplikacja serwera 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 oparte na interfejsie API generatywnej AI (np. Google AI lub Agent Platform). W takim przypadku możesz umieścić logikę obsługi LLM w funkcji, którą aplikacja wywołuje na żądanie.
Aby zapoznać się z rozwiązaniem, które korzysta z 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ę wywoływaną z Remote Config i App Check po stronie serwera.Wywołaj funkcję Agent Platform Gemini API (formerly Vertex AI) za pomocą Remote Config i App Check.
Jeśli tworzysz aplikację internetową renderowaną na serwerze, App Hosting obsługuje popularne platformy internetowe.
W przeciwnym razie możesz rozważyć Cloud Run. Aby wdrożyć aplikację serwera za pomocą Cloud Run, postępuj zgodnie z krótkim przewodnikiem w wybranym języku:
- Krótkie wprowadzenie: wdrażanie usługi Node.js w Cloud Run
- Krótkie wprowadzenie: wdrażanie usługi Python w Cloud Run
- Krótkie wprowadzenie: wdrażanie usługi Java w Cloud Run
- Krótkie wprowadzenie: wdrażanie usługi Go w Cloud Run
Więcej informacji o najlepszych przypadkach użycia funkcji Cloud Run i Cloud Functions for Firebase znajdziesz w artykule Cloud Functions for Firebase a Cloud Run: kiedy używać jednej z nich.
Dalsze kroki
- Więcej informacji o parametrach i warunkach po stronie serwera znajdziesz w artykule Parametry i warunki (po stronie serwera).
- Zastosuj pełne rozwiązanie:używaj Remote Config po stronie serwera z Cloud Functions for Firebase i Agent Platform.
- Dowiedz się, jak zarządzać wersjami szablonu Remote Config.