Firebase Remote Config, Node.js (v12.1.0+), Python (v6.7.0+), Java (v9.7.0+) ve Go (v4.17.0+) için Firebase Admin SDK'ları kullanılarak sunucu tarafında yapılandırmayı destekler.
Bu özellik, Remote Config kullanarak sunucu tarafı uygulamalarının davranışını ve yapılandırmasını dinamik olarak yönetmenize olanak tanır. Cloud Functions for Firebase gibi sunucusuz uygulamalar ve Cloud Run üzerindeki kapsayıcılı hizmetler buna dahildir.
Firebase istemci SDK'larının Remote Config şablonundan türetilen istemciye özel bir yapılandırma getirmesinin aksine, sunucu tarafı Remote Config SDK'sı Firebase'den tam bir Remote Config şablonu indirir veya getirir. Sunucunuz daha sonra şablonu her gelen istekle birlikte değerlendirebilir ve çok düşük gecikme süresiyle özelleştirilmiş bir yanıt sunmak için kendi mantığını kullanabilir. Koşulları kullanarak yanıtları rastgele yüzdelere ve özel sinyallerde tanımlanan müşteri özelliklerine göre kontrol edip özelleştirebilirsiniz.
Sunucu tarafı Remote Config ile şunları yapabilirsiniz:
- Sunucunuzda çalışan veya sunucunuz üzerinden erişilen uygulamalar için yapılandırma parametrelerini tanımlayarak API anahtarlarınızın güvenliğini sağlamak amacıyla uzaktan yapay zeka modeli parametrelerini ve istemlerini yapılandırma gibi kullanım alanlarına ve diğer entegrasyonlara olanak tanıyın.
- Ortamınızdaki değişikliklere veya diğer uygulama değişikliklerine (ör. LLM parametrelerini ve model uç noktalarını güncelleme) yanıt olarak parametreleri dinamik bir şekilde ayarlayın.
- Sunucunuzun çağırdığı API'leri uzaktan güncelleyerek maliyetleri kontrol edin.
- Sunucunuza erişen istemciler için anında özel yapılandırmalar oluşturun.
- Hangi istemcilerin parametre değeri aldığını kaydedin ve bunu Cloud Functions for Firebase içinde hak doğrulama sisteminin bir parçası olarak kullanın.
Sunucu tarafı Remote Config'yı Cloud Run, Cloud Functions for Firebase veya kendi kendine barındırılan sunucu ortamlarında dağıtabilirsiniz.
Başlamadan önce
Firebase projesi oluşturmak, hizmet hesabı ayarlamak ve Firebase Admin SDK'sını sunucunuza eklemek için Firebase Admin SDK'sını sunucunuza ekleme bölümündeki talimatları uygulayın. Platformunuz için Yönetici SDK'sının desteklenen bir sürümünü kullandığınızdan emin olun:
- Node.js: Firebase Admin Node.js SDK'sı v12.1.0+
- Python: Firebase Admin Python SDK v6.7.0 veya sonraki sürümler
- Java: Firebase Admin Java SDK'sı v9.7.0 veya sonraki sürümler
- Go: Firebase Admin Go SDK v4.17.0+
1. adım: Firebase Admin SDK'sını başlatın ve API isteklerini yetkilendirin
Admin SDK'yı parametre olmadan başlattığınızda SDK, Google Uygulama Varsayılan Kimlik Bilgileri'ı kullanır ve GOOGLE_APPLICATION_CREDENTIALS ortam değişkeninden seçenekleri okur. SDK'yı başlatın ve Remote Config platformunuz için yapılandırın:
Node.js
initializeApp ve getRemoteConfig öğelerini içe aktarın, ardından Firebase uygulama örneğinizi başlatın:
import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";
// Initialize Firebase
const firebaseApp = initializeApp();
Python
firebase_admin (eşzamansız şablon yükleme ve JSON ayrıştırma için asyncio ve json ile birlikte) öğesini içe aktarın, ardından uygulamayı başlatın:
import firebase_admin
import asyncio
import json
firebase_admin.initialize_app()
Java
Firebase Admin SDK'sını FirebaseOptions ve hizmet hesabı kimlik bilgilerinizi kullanarak başlatın:
// Initialize the Firebase Admin SDK
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.build();
FirebaseApp.initializeApp(options);
Go
Firebase uygulamasını başlatın ve RemoteConfigistemci
örneği oluşturun:
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)
}
2. adım: Sunucu uygulamanız için varsayılan parametre değerlerini belirleyin
Uygulamanızda Remote Config ile dinamik olarak güncellemek istediğiniz değişkenleri belirleyin. Ardından, uygulamanızda hangi değişkenlerin varsayılan olarak ayarlanması gerektiğini ve varsayılan değerlerinin ne olması gerektiğini düşünün. Bu, uygulamanızın Remote Config arka uç sunucuyla bağlantısı kesilse bile başarılı bir şekilde çalışmasını sağlar.
Örneğin, üretken yapay zeka işlevini yöneten bir sunucu uygulaması yazıyorsanız varsayılan model adı, istem önbilgisi ve üretken yapay zeka yapılandırması ayarlayabilirsiniz.
| Parametre adı | Açıklama | Tür | Varsayılan değer |
|---|---|---|---|
model_name |
Model API adı | Dize | gemini-2.0-flash |
preamble_prompt |
Kullanıcının sorgusuna eklenecek istem | Dize | 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 |
Modele gönderilecek parametreler | JSON | {"stopSequences": ["I hope this helps"], "temperature": 0.7,
"maxOutputTokens": 512, "topP": 0.1, "topK": 20} |
3. adım: Sunucu uygulamanızı yapılandırın
Remote Config ile kullanmak istediğiniz parametreleri belirledikten sonra, uygulamanızı varsayılan değerleri ayarlayacak, sunucuya özel Remote Config şablonunu getirecek ve değerlerini değerlendirecek şekilde yapılandırın.
Remote Config sunucu şablonuna erişip bu şablonu yükleyin.
Node.js
initServerTemplate()kullanarak sunucu şablonunu başlatın ve şablonu arka uçtan getirmek içinload()işlevini çağırın:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = rc.initServerTemplate(); // Load Remote Config await template.load();Cloud Functions for Firebase içinde Node.js kullanıyorsanız şablonu tek bir adımda başlatmak ve yüklemek için eşzamansız
getServerTemplate()işlevini kullanabilirsiniz:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = await rc.getServerTemplate();Python
init_server_template()kullanarak sunucu şablonunu başlatın ve şablonu arka uçtan getirmek içinload()işlevini çağırın: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())Alternatif olarak, Python'ı Cloud Functions for Firebase ile kullanıyorsanız şablonu tek bir adımda başlatmak ve yüklemek için eşzamansız
get_server_template()işlevini kullanabilirsiniz:# Initialize server-side Remote Config template = await remote_config.get_server_template()Java
Sunucu tarafı Remote Config istemcisini
FirebaseRemoteConfig.getInstance()kullanarak başlatın:// Initialize server-side Remote Config client FirebaseRemoteConfig rc = FirebaseRemoteConfig.getInstance();Alternatif olarak, Java'yı Cloud Functions for Firebase ile kullanıyorsanız şablonu tek bir adımda başlatmak ve yüklemek için
getServerTemplate()kullanabilirsiniz:ServerTemplate template = rc.getServerTemplate();Go
InitServerTemplate()kullanarak sunucu şablonunu başlatın ve şablonu arka uçtan getirmek içinLoad()işlevini çağırın:// 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) }Şablonu başlatmanın bir diğer yolu da gerekli sunucu şablonunu almak için
GetServerTemplateişlevini kullanmaktır. Bu şablonu yerel olarak depolanabilen bir JSON biçimine dönüştürebilir ve ardındanInitServerTemplateişlevini kullanarak bu JSON şablonunu başlatabilirsiniz.Uygulamanızın Remote Config arka uç sunucusuna bağlantısı kesilse bile sorunsuz çalışmasını sağlamak için uygulamanızdaki her parametreye varsayılan değerler ekleyin.
Node.js
defaultConfignesnesi ekleyin.initServerTemplateveyagetServerTemplateşablon işleviniz: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
default_configsözlüğüinit_server_templateveyaget_server_templateşablon işlevinize ekleyin: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())Şablonu başlatmanın bir diğer yolu da gerekli sunucu şablonunu almak için
get_server_templateişlevini kullanmaktır. Bu şablonutemplate.to_jsonişlevini kullanarak JSON biçimine dönüştürebilirsiniz. Bu JSON şablonu yerel olarak depolanabilir ve daha sonrainit_server_templateişlevini kullanarak bu JSON şablonunu başlatabilirsiniz.Java
getServerTemplateişlevinizdeKeysAndValueskullanarakdefaultConfignesnesi ekleyin:// 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);Alternatif olarak, Remote Config başlatılırken varsayılan bir önbelleğe alınmış şablon da iletebilirsiniz. Bu şablon, Remote Config sunucusuna bağlantı kesildiğinde bile kullanılabilir:
String templateDataJSON = "{}"; // add your default template as JSON ServerTemplate template = rc.serverTemplateBuilder() .defaultConfig(defaultConfig) .cachedTemplate(templateDataJSON) .build();Go
defaultConfigveyaInitServerTemplateşablon işlevinizeGetServerTemplateharita ekleyin:// 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) }Şablon yüklendikten sonra, şablondaki parametreleri ve değerleri içe aktarmak için şablonu değerlendirin:
Node.js
template.evaluate()kullanma:// Add template parameters to config const config = template.evaluate();Python
template.evaluate()kullanma:# Add template parameters to config config = template.evaluate()Java
template.evaluate()kullanma:// Add template parameters to config ServerConfig config = template.evaluate();Go
Koşul uygulanmadığında boş bir değerlendirme bağlamıyla
template.Evaluate()kullanın:// 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) }İsteğe bağlı olarak, Remote Config şablonunuzda koşullar ayarlarsanız istediğiniz bağlam değerlerini tanımlayıp sağlayın:
- Yüzde koşulları kullanıyorsanız koşullarınızı değerlendirmek için kullanmak istediğiniz rastgeleleştirme kimliğini (
randomizationId,randomization_idveyarandomizationID) şablon değerlendirme işlevine ekleyin. - Özel sinyaller kullanıyorsanız özellikleri ve değerlerini tanımlayın. Özel sinyaller, Firebase Admin Node.js SDK v12.5.0+, Python SDK v6.7.0+, Java SDK v9.7.0+ ve Go SDK v4.17.0+ sürümlerinde kullanılabilir.
Örneğin, sunucunuza ulaşan her kullanıcının uygun rastgele gruba eklenmesini sağlamak için rastgeleleştirme kimliği olarak bir Firebase yükleme kimliği veya kullanıcı kimliği ayarlayabilirsiniz. Ayrıca, belirli istemci sürümlerini hedeflemek için özel bir sinyal olarak
versionve istemci platformlarını hedeflemek için özel bir sinyal olarakplatformkullanabilirsiniz.Koşullar hakkında daha fazla bilgi için Koşul kuralı türleri başlıklı makaleyi inceleyin.
Node.js
randomizationIdve özel sinyaller içeren bir değerlendirme bağlamı nesnesinitemplate.evaluate()'ye iletin:// 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
randomization_idve özel sinyaller içeren bir sözlüğütemplate.evaluate()'ye iletin:# 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
randomizationIdve özel sinyaller içeren birKeysAndValuesbağlamı oluşturun ve bunutemplate.evaluate()'ye iletin:// 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
randomizationIDve özel sinyaller içeren bir değerlendirme bağlamı haritasınıtemplate.Evaluate()'ye iletin:// 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) }- Yüzde koşulları kullanıyorsanız koşullarınızı değerlendirmek için kullanmak istediğiniz rastgeleleştirme kimliğini (
Ardından, değerlendirilen yapılandırma nesnesinden ihtiyacınız olan parametre değerlerini ayıklayın. Remote Config değerlerini beklenen biçime dönüştürmek için alıcı yöntemleri kullanın.
Örneğin, sunucunuzda Agent Platform uyguluyorsanız ve modeli ve model parametrelerini değiştirmek istiyorsanız
model_namevegeneration_configiçin parametreleri yapılandırabilirsiniz. Desteklenen getter yöntemleri ve her platform için Remote Config değerlerine nasıl erişileceğine dair bir örnek aşağıda verilmiştir:Node.js
Desteklenen getter yöntemleri:
- Boole:
getBoolean - Nesne:
getValue - Numara:
getNumber - Dize:
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
Desteklenen getter yöntemleri:
- Boole:
get_bool - Tamsayı:
get_int - Yanal dönüş:
get_float - Dize:
get_string - Değer kaynağı:
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
Desteklenen getter yöntemleri:
- Boole:
getBoolean - Dize:
getString - Çift:
getDouble - Uzun:
getLong - Değer kaynağı:
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");getValueSourceyöntemi, parametrenin değer kaynağınınSTATIC,REMOTEveyaDEFAULTolup olmadığını belirten birValueSourcedöndürür.Go
Desteklenen getter yöntemleri:
- Boole:
GetBoolean - Tamsayı:
GetInt - Yanal dönüş:
GetFloat - Dize:
GetString - Değer kaynağı:
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)- Boole:
Sunucusuz bir ortamın aksine, sunucunuz uzun süredir çalışıyorsa Remote Config sunucusundan en güncel şablonu getirdiğinizi doğrulamak için şablonu düzenli olarak yeniden yükleyin (örneğin, Node.js'de
setIntervalveya Java'dajava.util.Timerkullanarak).
4. adım: Remote Config içinde sunucuya özel parametre değerlerini ayarlayın
Ardından, bir sunucu Remote Config şablonu oluşturun ve uygulamanızda kullanılacak parametreleri ve değerleri yapılandırın.
Sunucuya özel Remote Config şablonu oluşturmak için:
Firebase konsolunda DevOps & Engagement (DevOps ve Etkileşim) > Remote Config > Parameters (Parametreler) sayfasına gidin.
Sayfanın üst kısmındaki İstemci/Sunucu seçicisinden Sunucu'yu seçin.
Uygulamanızda tanımladığınız parametrelerle aynı adlara ve veri türlerine sahip Remote Config parametreler tanımlayın ve değerler sağlayın. Bu değerler, şablonu getirip değerlendirdiğinizde ve bu değerleri değişkenlerinize atadığınızda Sunucu uygulamanızı yapılandırın bölümünde ayarladığınız varsayılan yapılandırmayı (
defaultConfigveyadefault_config) geçersiz kılar.İsteğe bağlı olarak, değerleri rastgele bir örnekleme veya tanımladığınız özel sinyallere kalıcı olarak uygulamak için koşullar belirleyin. Koşullar hakkında daha fazla bilgi için Koşul kuralı türleri başlıklı makaleyi inceleyin.
Parametre eklemeyi tamamladığınızda Değişiklikleri yayınla'yı tıklayın.
Değişiklikleri inceleyin ve tekrar Değişiklikleri yayınla'yı tıklayın.
5. adım: Cloud Functions for Firebase veya Cloud Run ile dağıtın
Sunucu uygulamanız hafif ve etkinliğe dayalıysa kodunuzu Cloud Functions for Firebase kullanarak dağıtmayı düşünebilirsiniz. Örneğin, üretken yapay zeka API'si (ör. Google AI veya Agent Platform) tarafından desteklenen karakter diyalogları içeren bir uygulamanız olduğunu varsayalım. Bu durumda, uygulamanızın isteğe bağlı olarak çağırdığı bir işlevde LLM hizmeti sunma mantığınızı barındırabilirsiniz.
Sunucu tarafı Remote Config ile 2. nesil Cloud Functions for Firebase kullanan bir çözüm üzerinde çalışmak için Cloud Functions for Firebase ve Agent Platform ile sunucu tarafı Remote Config'ı kullanma başlıklı makaleyi inceleyin.
Uygulamanızı Cloud Functions for Firebase ile dağıtma hakkında daha fazla bilgi edinmek için Başlangıç: İlk işlevlerinizi yazma, test etme ve dağıtma başlıklı makaleyi inceleyin.
Remote Config ve App Check ile Agent Platform Gemini API (formerly Vertex AI)'ü çağırma bölümünde sunucu tarafı Remote Config ve App Check ile örnek bir çağrılabilir işlevi deneyin.
Sunucu tarafında oluşturulan bir web uygulaması geliştiriyorsanız App Hosting popüler web çerçevelerini destekler.
Aksi takdirde, Cloud Run. Sunucu uygulamanızı Cloud Run ile dağıtmak için dilinizdeki hızlı başlangıç kılavuzunu inceleyin:
- Hızlı başlangıç: Cloud Run'e Node.js hizmeti dağıtma
- Hızlı başlangıç: Cloud Run'e Python hizmeti dağıtma
- Hızlı başlangıç: Cloud Run'a Java hizmeti dağıtma
- Hızlı başlangıç: Cloud Run'a Go hizmeti dağıtma
Cloud Run ve Cloud Functions for Firebase için en iyi kullanım alanları hakkında daha fazla bilgi edinmek istiyorsanız Cloud Functions for Firebase ve Cloud Run: Hangisi ne zaman kullanılmalı? başlıklı makaleyi inceleyin.
Sonraki adımlar
- Parametreler ve koşullar (sunucu tarafı) bölümünde sunucu tarafı parametrelerini ve koşullarını inceleyin.
- Tam bir çözümü inceleyin: Cloud Functions for Firebase ve Agent Platform ile Remote Config sunucu tarafı doğrulama kullanın.
- Remote Config şablon sürümlerini nasıl yöneteceğinizi öğrenin.