Firebase Remote Config پیکربندی سمت سرور با استفاده از SDK های مدیریت فایربیس برای Node.js (نسخه ۱۲.۱.۰+)، پایتون (نسخه ۶.۷.۰+)، جاوا (نسخه ۹.۷.۰+) و Go (نسخه ۴.۱۷.۰+) پشتیبانی میکند.
این قابلیت به شما امکان میدهد تا به صورت پویا رفتار و پیکربندی برنامههای سمت سرور را با استفاده از Remote Config مدیریت کنید. این شامل پیادهسازیهای بدون سرور مانند Cloud Functions for Firebase و سرویسهای کانتینری در Cloud Run .
برخلاف SDK های کلاینت فایربیس که پیکربندی خاص کلاینت را از الگوی Remote Config دریافت میکنند، SDK سمت سرور Remote Config یک الگوی کامل Remote Config را از فایربیس دانلود یا دریافت میکند. سپس سرور شما میتواند الگو را با هر درخواست ورودی ارزیابی کند و از منطق خود برای ارائه یک پاسخ سفارشی با تأخیر بسیار کم استفاده کند. میتوانید از شرطها برای کنترل و سفارشیسازی پاسخها بر اساس درصدهای تصادفی و ویژگیهای کلاینت تعریف شده در سیگنالهای سفارشی استفاده کنید.
با Remote Config سمت سرور، میتوانید:
- پارامترهای پیکربندی را برای برنامههایی که روی سرور شما اجرا میشوند یا از طریق آن قابل دسترسی هستند، تعریف کنید و مواردی مانند پیکربندی از راه دور پارامترها و اعلانهای مدل هوش مصنوعی و سایر ادغامها را برای اطمینان از ایمن ماندن کلیدهای API خود، امکانپذیر سازید.
- پارامترها را به صورت پویا در پاسخ به تغییرات در محیط یا سایر تغییرات برنامه، مانند بهروزرسانی پارامترهای LLM و نقاط پایانی مدل، تنظیم کنید.
- با بهروزرسانی از راه دور APIهایی که سرور شما فراخوانی میکند، هزینهها را کنترل کنید.
- پیکربندیهای سفارشی را در لحظه برای کلاینتهایی که به سرور شما دسترسی دارند، ایجاد کنید.
- ثبت کنید که کدام کلاینتها مقدار پارامتر را دریافت کردهاند و از آن در Cloud Functions for Firebase به عنوان بخشی از یک سیستم تأیید حق استفاده کنید.
شما میتوانید Remote Config سمت سرور را روی Cloud Run ، Cloud Functions for Firebase یا محیطهای سرور خود-میزبان مستقر کنید.
قبل از اینکه شروع کنی
برای ایجاد یک پروژه Firebase، تنظیم یک حساب کاربری سرویس و افزودن Firebase Admin SDK به سرور خود، دستورالعملهای موجود در بخش «افزودن Firebase Admin SDK به سرور» را دنبال کنید. مطمئن شوید که از نسخه پشتیبانیشدهی Admin SDK برای پلتفرم خود استفاده میکنید:
- Node.js : فایربیس ادمین Node.js SDK نسخه ۱۲.۱.۰+
- Python : Firebase Admin Python SDK v6.7.0+
- جاوا : فایربیس ادمین جاوا SDK نسخه ۹.۷.۰+
- برو : فایربیس مدیریت برو SDK نسخه ۴.۱۷.۰+
مرحله 1: مقداردهی اولیه Firebase Admin SDK و تأیید درخواستهای API
وقتی Admin SDK را بدون هیچ پارامتری مقداردهی اولیه میکنید، SDK از اعتبارنامههای پیشفرض برنامه گوگل استفاده میکند و گزینهها را از متغیر محیطی GOOGLE_APPLICATION_CREDENTIALS میخواند. SDK را مقداردهی اولیه کنید و Remote Config را برای پلتفرم خود پیکربندی کنید:
نود جی اس
initializeApp و getRemoteConfig را وارد کنید، سپس نمونه برنامه Firebase خود را مقداردهی اولیه کنید:
import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";
// Initialize Firebase
const firebaseApp = initializeApp();
پایتون
firebase_admin را وارد کنید (به همراه asyncio و json برای بارگذاری ناهمزمان قالب و تجزیه JSON)، سپس برنامه را مقداردهی اولیه کنید:
import firebase_admin
import asyncio
import json
firebase_admin.initialize_app()
جاوا
SDK مربوط به محیط مدیریت فایربیس را با استفاده FirebaseOptions و اطلاعات حساب کاربری سرویس خود، مقداردهی اولیه کنید:
// Initialize the Firebase Admin SDK
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.build();
FirebaseApp.initializeApp(options);
برو
برنامه Firebase را مقداردهی اولیه کنید و یک نمونه کلاینت 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)
}
مرحله ۲: مقادیر پیشفرض پارامترها را برای برنامه سرور خود شناسایی کنید
متغیرهایی را در برنامه خود که میخواهید به صورت پویا با Remote Config بهروزرسانی شوند، شناسایی کنید. سپس، در نظر بگیرید که کدام متغیرها باید به طور پیشفرض در برنامه شما تنظیم شوند و مقادیر پیشفرض آنها باید چه باشند. این تضمین میکند که برنامه شما حتی اگر اتصال آن به سرور Remote Config backend قطع شود، با موفقیت اجرا میشود.
برای مثال، اگر در حال نوشتن یک برنامهی سرور هستید که یک تابع هوش مصنوعی مولد را مدیریت میکند، میتوانید یک نام مدل پیشفرض، مقدمهی اعلان و یک پیکربندی هوش مصنوعی مولد مانند موارد زیر تنظیم کنید:
| نام پارامتر | توضیحات | نوع | مقدار پیشفرض |
|---|---|---|---|
model_name | نام API مدل | رشته | gemini-2.0-flash |
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! |
generation_config | پارامترهایی که باید به مدل ارسال شوند | جیسون | {"stopSequences": ["I hope this helps"], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20} |
مرحله 3: برنامه سرور خود را پیکربندی کنید
پس از اینکه پارامترهایی را که میخواهید با Remote Config استفاده کنید تعیین کردید، برنامه خود را طوری پیکربندی کنید که مقادیر پیشفرض را تنظیم کند، الگوی Remote Config مخصوص سرور را دریافت کند و مقادیر آن را ارزیابی کند.
به الگوی سرور Remote Config دسترسی پیدا کرده و آن را بارگذاری کنید.
نود جی اس
قالب سرور را با استفاده از
initServerTemplate()مقداردهی اولیه کنید وload()را برای دریافت قالب از backend فراخوانی کنید:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = rc.initServerTemplate(); // Load Remote Config await template.load();اگر از Node.js در Cloud Functions for Firebase استفاده میکنید، میتوانید از تابع
getServerTemplate()ناهمزمان برای مقداردهی اولیه و بارگذاری الگو در یک مرحله استفاده کنید:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = await rc.getServerTemplate();پایتون
قالب سرور را با استفاده از
init_server_template()مقداردهی اولیه کنید وload()را برای دریافت قالب از 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())از طرف دیگر، اگر از پایتون با Cloud Functions for Firebase استفاده میکنید، میتوانید از تابع
get_server_template()ناهمزمان برای مقداردهی اولیه و بارگذاری الگو در یک مرحله استفاده کنید:# Initialize server-side Remote Config template = await remote_config.get_server_template()جاوا
کلاینت Remote Config سمت سرور را با استفاده از
FirebaseRemoteConfig.getInstance()مقداردهی اولیه کنید:// Initialize server-side Remote Config client FirebaseRemoteConfig rc = FirebaseRemoteConfig.getInstance();از طرف دیگر، اگر از جاوا با Cloud Functions for Firebase استفاده میکنید، میتوانید
getServerTemplate()برای مقداردهی اولیه و بارگذاری الگو در یک مرحله استفاده کنید:ServerTemplate template = rc.getServerTemplate();برو
قالب سرور را با استفاده از
InitServerTemplate()مقداردهی اولیه کنید وLoad()را برای دریافت قالب از 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) }روش دیگری که میتوانید قالب را مقداردهی اولیه کنید، استفاده از تابع
GetServerTemplateبرای بازیابی قالب سرور مورد نیاز است. میتوانید این قالب را به فرمت JSON تبدیل کنید که بتوان آن را به صورت محلی ذخیره کرد و متعاقباً این قالب JSON را با استفاده از تابعInitServerTemplateمقداردهی اولیه کنید.برای اطمینان از اینکه برنامه شما حتی در صورت قطع اتصال به سرور Remote Config backend با موفقیت اجرا میشود، برای هر پارامتر در برنامه خود مقادیر پیشفرض اضافه کنید.
نود جی اس
یک شیء
defaultConfigرا درون تابع الگویinitServerTemplateیاgetServerTemplateخود اضافه کنید: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();پایتون
یک دیکشنری
default_configدرون تابع الگویinit_server_templateیاget_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())روش دیگری که میتوانید یک الگو را مقداردهی اولیه کنید، استفاده از تابع
get_server_templateبرای بازیابی الگوی سرور مورد نیاز است. میتوانید این الگو را با استفاده از تابعtemplate.to_jsonبه فرمت JSON تبدیل کنید. این الگوی JSON میتواند به صورت محلی ذخیره شود و متعاقباً میتوانید این الگوی JSON را با استفاده از تابعinit_server_templateمقداردهی اولیه کنید.جاوا
یک شیء
defaultConfigبا استفاده ازKeysAndValuesدرون تابعgetServerTemplateخود اضافه کنید:// 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);از طرف دیگر، میتوانید هنگام مقداردهی اولیه Remote Config ، یک الگوی ذخیره شده پیشفرض را ارسال کنید که حتی در صورت قطع اتصال به سرور Remote Config نیز قابل استفاده است:
String templateDataJSON = "{}"; // add your default template as JSON ServerTemplate template = rc.serverTemplateBuilder() .defaultConfig(defaultConfig) .cachedTemplate(templateDataJSON) .build();برو
یک نقشه
defaultConfigرا درون تابع الگویInitServerTemplateیاGetServerTemplateخود اضافه کنید:// 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) }پس از بارگذاری قالب، قالب را برای وارد کردن پارامترها و مقادیر از قالب ارزیابی کنید:
نود جی اس
از
template.evaluate()استفاده کنید:// Add template parameters to config const config = template.evaluate();پایتون
از
template.evaluate()استفاده کنید:# Add template parameters to config config = template.evaluate()جاوا
از
template.evaluate()استفاده کنید:// Add template parameters to config ServerConfig config = template.evaluate();برو
استفاده از
template.Evaluate()با یک زمینه ارزیابی خالی، زمانی که هیچ شرطی اعمال نشده است:// 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) }در صورت تمایل، اگر در الگوی Remote Config خود شرطهایی تعیین کردهاید، مقادیر context مورد نظر خود را تعریف و ارائه دهید:
- اگر از شرایط درصدی استفاده میکنید، شناسه تصادفیسازی (
randomizationId،randomization_idیاrandomizationID) را که میخواهید برای ارزیابی شرایط خود در تابع ارزیابی الگو استفاده کنید، اضافه کنید. - اگر از سیگنالهای سفارشی استفاده میکنید، ویژگیها و مقادیر آنها را تعریف کنید. سیگنالهای سفارشی با Firebase Admin Node.js SDK v12.5.0+، Python SDK v6.7.0+، Java SDK v9.7.0+ و Go SDK v4.17.0+ در دسترس هستند.
برای مثال، میتوانید یک شناسه نصب Firebase یا شناسه کاربری را به عنوان شناسه تصادفیسازی تنظیم کنید تا مطمئن شوید هر کاربری که با سرور شما تماس میگیرد به گروه تصادفی مناسب،
versionبه عنوان یک سیگنال سفارشی برای هدف قرار دادن نسخههای خاص کلاینت وplatformبه عنوان یک سیگنال سفارشی برای هدف قرار دادن پلتفرمهای کلاینت اضافه میشود.برای اطلاعات بیشتر در مورد شرطها، به انواع قانون شرط مراجعه کنید.
نود جی اس
یک شیء زمینه ارزیابی شامل
randomizationIdو هرگونه سیگنال سفارشی را بهtemplate.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" });پایتون
یک دیکشنری شامل
randomization_idو هرگونه سیگنال سفارشی بهtemplate.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" })جاوا
یک زمینه
KeysAndValuesشاملrandomizationIdو هرگونه سیگنال سفارشی ایجاد کنید و آن را بهtemplate.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);برو
یک نقشه زمینه ارزیابی شامل
randomizationIDو هرگونه سیگنال سفارشی را بهtemplate.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) }- اگر از شرایط درصدی استفاده میکنید، شناسه تصادفیسازی (
در مرحله بعد، مقادیر پارامترهای مورد نیاز خود را از شیء پیکربندی ارزیابیشده استخراج کنید. از متدهای getter برای تبدیل مقادیر از Remote Config به فرمت مورد انتظار استفاده کنید.
برای مثال، اگر شما در حال پیادهسازی پلتفرم Agent روی سرور خود هستید و میخواهید مدل و پارامترهای مدل را تغییر دهید، میتوانید پارامترهایی را برای
model_nameوgeneration_configپیکربندی کنید. در اینجا متدهای getter پشتیبانیشده و مثالی از نحوه دسترسی به مقادیر Remote Config برای هر پلتفرم آمده است:نود جی اس
متدهای دریافتکننده پشتیبانیشده:
- بولی:
getBoolean - شیء:
getValue - شماره:
getNumber - رشته:
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}`;پایتون
متدهای دریافتکننده پشتیبانیشده:
- بولی:
get_bool - عدد صحیح:
get_int - شناور:
get_float - رشته:
get_string - منبع مقدار:
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')}"جاوا
متدهای دریافتکننده پشتیبانیشده:
- بولی:
getBoolean - رشته:
getString - دابل:
getDouble - طولانی:
getLong - منبع مقدار:
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");متد
getValueSourceیکValueSourceبرمیگرداند که نشان میدهد منبع مقدار پارامترSTATIC،REMOTEیاDEFAULTاست.برو
متدهای دریافتکننده پشتیبانیشده:
- بولی:
GetBoolean - عدد صحیح:
GetInt - شناور:
GetFloat - رشته:
GetString - منبع مقدار:
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)- بولی:
اگر سرور شما برخلاف یک محیط بدون سرور، مدت زیادی در حال اجرا است، به صورت دورهای قالب را مجدداً بارگذاری کنید (برای مثال، با استفاده
setIntervalدر Node.js یاjava.util.Timerدر جاوا) تا تأیید کنید که جدیدترین قالب را از سرور Remote Config دریافت میکنید.
مرحله ۴: تنظیم مقادیر پارامترهای مختص سرور در Remote Config
در مرحله بعد، یک الگوی Remote Config سرور ایجاد کنید و پارامترها و مقادیر را برای استفاده در برنامه خود پیکربندی کنید.
در اینجا نحوه ایجاد یک الگوی Remote Config مخصوص سرور آورده شده است:
در کنسول Firebase ، به صفحه DevOps & Engagement > Remote Config > Parameters بروید.
از انتخابگر کلاینت/سرور در بالای صفحه، سرور را انتخاب کنید.
پارامترهای Remote Config را با همان نامها و انواع دادهای که در برنامه خود تعریف کردهاید، تعریف کنید و مقادیر را ارائه دهید. این مقادیر، پیکربندی پیشفرض (
defaultConfigیاdefault_config) که در پیکربندی برنامه سرور خود تنظیم کردهاید را هنگام واکشی و ارزیابی الگو و اختصاص این مقادیر به متغیرهای خود، لغو میکنند.به صورت اختیاری، میتوانید شرایطی را تنظیم کنید تا مقادیر به طور مداوم بر روی یک نمونه تصادفی از نمونهها یا سیگنالهای سفارشی که تعریف میکنید اعمال شوند. برای اطلاعات بیشتر در مورد شرایط، به انواع قوانین شرایط مراجعه کنید.
وقتی افزودن پارامترها تمام شد، روی انتشار تغییرات کلیک کنید.
تغییرات را مرور کنید و دوباره روی انتشار تغییرات کلیک کنید.
مرحله 5: با استفاده از Cloud Functions for Firebase یا Cloud Run مستقر شوید
اگر برنامه سرور شما سبک و رویدادمحور است، باید استقرار کد خود را با استفاده Cloud Functions for Firebase در نظر بگیرید. به عنوان مثال، فرض کنید برنامهای دارید که شامل دیالوگهای کاراکتری است که توسط یک API هوش مصنوعی مولد (مثلاً Google AI یا Agent Platform ) پشتیبانی میشود. در این حالت، میتوانید منطق سرویس LLM خود را در تابعی که برنامه شما در صورت تقاضا فراخوانی میکند، میزبانی کنید.
برای کار با راهکاری که Cloud Functions for Firebase به همراه Remote Config سمت سرور استفاده میکند، به بخش «استفاده Remote Config سمت سرور با Cloud Functions for Firebase و پلتفرم عامل» مراجعه کنید.
برای کسب اطلاعات بیشتر در مورد استقرار برنامه خود با Cloud Functions for Firebase ، به شروع کار: نوشتن، آزمایش و استقرار اولین توابع خود مراجعه کنید.
یک تابع نمونه قابل فراخوانی با Remote Config و App Check سمت سرور را درپلتفرم Call the Agent ، Gemini API (که قبلاً Vertex AI نام داشت) با Remote Config و App Check امتحان کنید.
اگر در حال ساخت یک برنامه وب رندر شده توسط سرور هستید، App Hosting از فریمورکهای وب محبوب پشتیبانی میکند.
در غیر این صورت، میتوانید Cloud Run در نظر بگیرید. برای استقرار برنامه سرور خود با Cloud Run ، راهنمای شروع سریع مربوط به زبان خود را دنبال کنید:
- شروع سریع: استقرار یک سرویس Node.js در Cloud Run
- شروع سریع: استقرار یک سرویس پایتون در Cloud Run
- شروع سریع: استقرار یک سرویس جاوا در Cloud Run
- شروع سریع: استقرار یک سرویس Go در Cloud Run
برای اطلاعات بیشتر در مورد بهترین موارد استفاده از Cloud Run و Cloud Functions for Firebase ، به Cloud Functions for Firebase در مقابل Cloud Run : چه زمانی از یکی به جای دیگری استفاده کنیم، مراجعه کنید.
مراحل بعدی
- پارامترها و شرایط سمت سرور را در بخش پارامترها و شرایط (سمت سرور) بررسی کنید.
- از طریق یک راهکار کامل کار کنید: Remote Config سمت سرور با Cloud Functions for Firebase و Agent Platform استفاده کنید .
- یاد بگیرید که چگونه نسخههای الگوی Remote Config را مدیریت کنید .