قالب‌های نسخه با استفاده از پیکربندی از راه دور


وقتی از قالب‌های اعلان سرور استفاده می‌کنید، می‌توانید مقادیر درون یک قالب مشخص را بدون انتشار نسخه جدیدی از برنامه خود به‌روزرسانی کنید. با این حال، از آنجایی که هرگونه تغییر در قالب تقریباً بلافاصله توسط درخواست‌های برنامه شما استفاده می‌شود، باید در مورد ایجاد تغییراتی که می‌تواند برنامه شما را خراب کند یا باعث تغییرات غیرمنتظره در رفتار شود، محتاط باشید.

بنابراین، اگر می‌خواهید تغییرات اساسی‌تری ایجاد کنید یا تغییرات را به تدریج اعمال کنید، نباید الگویی را که در کد تولید استفاده می‌شود تغییر دهید.

در عوض، توصیه می‌کنیم از Firebase Remote Config برای کنترل مقدار شناسه قالب مورد استفاده در درخواست به مدل استفاده کنید.

Firebase Remote Config به شما امکان می‌دهد مقادیر پارامترها را در برنامه خود (مانند شناسه الگو) به صورت پویا و از راه دور از کنسول Firebase ، بدون نیاز به انتشار نسخه جدید برنامه خود، به‌روزرسانی کنید. همچنین دارای قابلیت‌ها و ادغام‌های ساده‌ای برای اعمال تغییرات و همچنین آزمایش A/B است.

این راهنما نحوه پیاده‌سازی Remote Config در برنامه شما، به ویژه برای کنترل شناسه الگوی مورد استفاده در برنامه شما را شرح می‌دهد.

مرحله 1 : مقدار پارامتر را در کنسول Firebase تنظیم کنید

یک الگوی کلاینت Remote Config ایجاد کنید و یک پارامتر template_id و مقدار آن را برای دریافت و استفاده در برنامه پیکربندی کنید.

  1. پروژه Firebase خود را در کنسول Firebase باز کنید. سپس از منوی ناوبری، Run را باز کرده و Remote Config انتخاب کنید.

  2. مطمئن شوید که کلاینت از انتخابگر کلاینت/سرور در بالای صفحه انتخاب شده است.

  3. با کلیک روی «ایجاد پیکربندی» (یا اگر قبلاً از الگوهای مشتری استفاده کرده‌اید، روی «افزودن پارامتر ») یک الگوی مشتری ایجاد کنید.

  4. پارامتر template_id را تعریف کنید:

    نام پارامتر توضیحات نوع مقدار پیش‌فرض
    template_id شناسه الگو. رشته my-first-template-v1-0-0
  5. پس از افزودن این پارامتر، روی «انتشار تغییرات» کلیک کنید. اگر این یک الگوی Remote Config جدید نیست، تغییرات را مرور کنید و دوباره روی «انتشار تغییرات» کلیک کنید.

مرحله 2 : Remote Config در برنامه خود اضافه و مقداردهی اولیه کنید

کتابخانه Remote Config را اضافه کنید و Remote Config در برنامه خود تنظیم کنید.

سویفت

به عنوان بخشی از تنظیمات Firebase AI Logic ، شما قبلاً Firebase SDK را به برنامه خود اضافه کرده‌اید، اما باید Remote Config نیز اضافه کنید.

  1. در Xcode، با باز کردن پروژه، به مسیر File > Add Package Dependencies بروید.

  2. firebase-ios-sdk را انتخاب کنید و سپس روی افزودن بسته کلیک کنید.

  3. از ناوبر پروژه، برنامه خود > اهداف > برنامه خود را انتخاب کنید.

  4. از برگه عمومی (General )، به چارچوب‌ها (Frameworks)، کتابخانه‌ها (Libraries) و محتوای جاسازی‌شده (Embedded Content) بروید.

  5. روی + کلیک کنید و FirebaseRemoteConfig را انتخاب کنید، سپس روی Add کلیک کنید.

  6. فایل ورودی FirebaseRemoteConfig را به کد خود اضافه کنید:

    import FirebaseRemoteConfig
    
  7. درون کلاس مناسب برای برنامه خود، Firebase را مقداردهی اولیه کنید و Remote Config به منطق اصلی برنامه خود اضافه کنید.

    در اینجا، Remote Config و شنونده‌ی بلادرنگ Remote Config را به عنوان ورودی وارد می‌کنید تا برنامه بتواند مقادیر جدید را به صورت بلادرنگ دریافت کند و یک حداقل فاصله‌ی دریافت اضافه کند:

    let remoteConfig = RemoteConfig.remoteConfig()
    let settings = RemoteConfigSettings()
    settings.minimumFetchInterval = 3600
    remoteConfig.configSettings = settings
    

Kotlin

  1. وابستگی Remote Config را به فایل Gradle ماژول (سطح برنامه) خود (معمولاً app/build.gradle.kts یا app/build.gradle ) اضافه کنید:

    dependencies {
        implementation(platform("com.google.firebase:firebase-bom:34.5.0"))
        implementation("com.google.firebase:firebase-ai")
        implementation("com.google.firebase:firebase-config")
        // ... other dependencies
    }
    
  2. Remote Config به منطق برنامه اصلی خود اضافه کنید. در اینجا، Remote Config مقداردهی اولیه کرده و حداقل فاصله زمانی واکشی را اضافه خواهید کرد:

    val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig
    val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 3600
    }
    remoteConfig.setConfigSettingsAsync(configSettings)
    

Java

  1. وابستگی Remote Config را به فایل Gradle ماژول (سطح برنامه) خود (معمولاً app/build.gradle.kts یا app/build.gradle ) اضافه کنید:

    dependencies {
        implementation(platform("com.google.firebase:firebase-bom:34.5.0"))
        implementation("com.google.firebase:firebase-ai")
        implementation("com.google.firebase:firebase-config")
        // ... other dependencies
    }
    
  2. Remote Config به منطق برنامه اصلی خود اضافه کنید. در اینجا، Remote Config مقداردهی اولیه کرده و حداقل فاصله زمانی واکشی را اضافه خواهید کرد:

    FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
    mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
    

Web

  1. کد خود را در یک ویرایشگر متن باز کنید و Remote Config وارد کنید:

    import { getRemoteConfig } from 'firebase/remote-config';
    
  2. درون تابع اصلی خود و پس از اینکه برنامه Firebase برای Firebase AI Logic SDK مقداردهی اولیه شد، Remote Config را مقداردهی اولیه کنید:

      // Initialize Remote Config and get a reference to the service
      const remoteConfig = getRemoteConfig(app);
    
  3. حداقل فاصله زمانی دریافت را تنظیم کنید:

    remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
    

مرحله ۳ : مقدار پارامتر درون برنامه‌ای را تنظیم کنید

شما باید مقادیر پارامترهای پیش‌فرض درون برنامه را در شیء Remote Config تنظیم کنید. این کار تضمین می‌کند که برنامه شما حتی اگر نتواند مقادیر را از سرویس Remote Config دریافت کند، طبق انتظار رفتار کند.

سویفت

  1. در کنسول Firebase ، Remote Config باز کنید.

  2. در برگه پارامترها ، منو را باز کنید و دانلود مقادیر پیش‌فرض را انتخاب کنید.

  3. وقتی از شما خواسته شد، فایل ‎.plist را برای iOS فعال کنید، سپس روی دانلود فایل کلیک کنید.

  4. فایل را در پوشه برنامه خود ذخیره کنید.

  5. در Xcode، روی برنامه خود کلیک راست کرده و گزینه Add Files را انتخاب کنید.

  6. remote_config_defaults.plist را انتخاب کنید، سپس روی افزودن کلیک کنید.

  7. کد برنامه خود را برای ارجاع به فایل پیش‌فرض به‌روزرسانی کنید:

    // Set default values for Remote Config parameters.
    remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
    

Kotlin

  1. از کنسول Firebase ، Remote Config را باز کنید.

  2. در برگه پارامترها ، منو را باز کنید و دانلود مقادیر پیش‌فرض را انتخاب کنید.

  3. وقتی از شما خواسته شد، فایل ‎.xml را برای اندروید فعال کنید، سپس روی دانلود فایل کلیک کنید.

  4. فایل را در پوشه منابع XML برنامه خود ذخیره کنید.

  5. فایل فعالیت اصلی خود را به‌روزرسانی کنید تا پیش‌فرض‌ها را بعد از configSettings که قبلاً اضافه کرده‌اید، اضافه کنید:

    // Set default values for Remote Config parameters.
    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
    

Java

  1. در کنسول Firebase ، Remote Config باز کنید.

  2. در برگه پارامترها ، منو را باز کنید و دانلود مقادیر پیش‌فرض را انتخاب کنید.

  3. وقتی از شما خواسته شد، فایل ‎.xml را برای اندروید فعال کنید، سپس روی دانلود فایل کلیک کنید.

  4. فایل را در پوشه منابع XML برنامه خود ذخیره کنید.

  5. فایل فعالیت اصلی خود را به‌روزرسانی کنید تا پیش‌فرض‌ها را بعد از configSettings که قبلاً اضافه کرده‌اید، اضافه کنید:

    // Set default values for Remote Config parameters.
    mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
    

Web

می‌توانید مقدار پیش‌فرض برای نام مدل را مستقیماً در کد خود تنظیم کنید:

// Set default values for Remote Config parameters.
remoteConfig.defaultConfig = {
  template_id: 'my-first-template-v1-0-0',
};

مرحله ۴ : دریافت و فعال‌سازی مقدار

پس از تنظیم مقدار پیش‌فرض برای نام مدل، موارد زیر را برای دریافت و فعال‌سازی مقادیر اضافه کنید.

سویفت

// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate { status, error in
  if let error = error {
    print("Error fetching Remote Config: \(error.localizedDescription)")
  }
}

این باید شیء Remote Config را هر زمان که یک الگوی Remote Config جدید منتشر می‌شود، به‌روزرسانی کند.

Kotlin

// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate()
      .addOnCompleteListener(this) { task ->
          if (task.isSuccessful) {
              val updated = task.result
              Log.d(TAG, "Remote Config values fetched and activated: $updated")
          } else {
              Log.e(TAG, "Error fetching Remote Config", task.exception)
          }
      }

Java

  // Fetch and activate Remote Config values
  mFirebaseRemoteConfig.fetchAndActivate()
    .addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
        @Override
        public void onComplete(@NonNull Task<Boolean> task) {
            if (task.isSuccessful()) {
                boolean updated = task.getResult();
                Log.d(TAG, "Config params updated: " + updated);
            } else {
                Log.e(TAG, "Error fetching Remote Config", task.exception)
            }
          }
    });

Web

  1. getValue و fetchAndActivate به ایمپورت‌های خود اضافه کنید:

    import { getValue, fetchAndActivate } from 'firebase/remote-config';
    
  2. کدی را که مقدار پیش‌فرض برای نام مدل را در آن مشخص کرده‌اید، پیدا کنید. مستقیماً پس از آن بلوک کد، کد زیر را برای واکشی و فعال‌سازی پیکربندی اضافه کنید و مقدار واکشی شده را به ثابت templateID اختصاص دهید.

    // Fetch and activate Remote Config.
    try {
      await fetchAndActivate(remoteConfig);
    } catch(err) {
      console.error('Remote Config fetch failed', err);
    }
    
    console.log('Remote Config fetched.');
    
    // Assign Remote Config values.
    const templateID = getValue(remoteConfig, 'template_id').asString();
    

مرحله ۵ : یک شنونده Remote Config بلادرنگ اضافه کنید

یک شنونده‌ی Remote Config به صورت بلادرنگ به برنامه‌ی خود اضافه کنید تا مطمئن شوید تغییراتی که در الگوی Remote Config ایجاد می‌کنید، به محض به‌روزرسانی، به کلاینت نیز اعمال می‌شوند.

کد زیر هر زمان که مقدار پارامتر تغییر کند، شیء Remote Config را به‌روزرسانی می‌کند.

سویفت

// Add real-time Remote Config
remoteConfig.addOnConfigUpdateListener { configUpdate, error in
  guard let configUpdate = configUpdate, error == nil else {
    print("Error listening for config updates: \(error?.localizedDescription ?? "No error available")")
    return
  }

  print("Updated keys: \(configUpdate.updatedKeys)")
  remoteConfig.activate { changed, error in
    guard error == nil else {
      print("Error activating config: \(error?.localizedDescription ?? "No error available")")
      return
    }
    print("Activated config successfully")
  }
}

Kotlin

به صورت اختیاری، می‌توانید یک اکشن را درون فعال‌سازی addOnCompleteListener نیز پیکربندی کنید:

      // Add a real-time Remote Config listener
      remoteConfig.addOnConfigUpdateListener(object : ConfigUpdateListener {
          override fun onUpdate(configUpdate : ConfigUpdate) {
              Log.d(ContentValues.TAG, "Updated keys: " + configUpdate.updatedKeys);
              remoteConfig.activate().addOnCompleteListener {
                  // Optionally, add an action to perform on update here.
              }
          }

          override fun onError(error : FirebaseRemoteConfigException) {
              Log.w(ContentValues.TAG, "Config update error with code: " + error.code, error)
          }
      }

Java

به صورت اختیاری، می‌توانید یک اکشن را درون فعال‌سازی addOnCompleteListener نیز پیکربندی کنید:

  // Add a real-time Remote Config listener
  remoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() {
      @Override
      public void onUpdate(ConfigUpdate configUpdate) {
          Log.d(ContentValues.TAG, "Updated keys: " + configUpdate.getUpdatedKeys());
                remoteConfig.activate().addOnCompleteListener(new OnCompleteListener<Boolean>() {
                  @Override
                  public void onComplete(@NonNull Task<Boolean> task) {
                      // Optionally, add an action to perform on update here.
                  }
              });
          }

      @Override
      public void onError(FirebaseRemoteConfigException error) {
          Log.w(ContentValues.TAG, "Config update error with code: " + error.getCode(), error);
      }
  });

Web

شنونده‌های Remote Config بلادرنگ برای برنامه‌های وب پشتیبانی نمی‌شوند.

مرحله 6 : درخواست‌های API مربوط به Gemini را برای استفاده از مقدار Remote Config به‌روزرسانی کنید.

برای مشاهده محتوا و کد مخصوص ارائه‌دهنده در این صفحه، روی ارائه‌دهنده API Gemini خود کلیک کنید.

اکنون که Remote Config به طور کامل پیکربندی شده است، کد خود را به‌روزرسانی کنید تا مقادیر hard-coded با مقادیری که از Remote Config گرفته شده‌اند، جایگزین شوند.

سویفت

import FirebaseAI

let templateID = remoteConfig.configValue(forKey: "template_id").stringValue
let model = FirebaseAI.firebaseAI(backend: .googleAI()).templateGenerativeModel()
let customerName = "Jane"

// When making the `generateContent` call, source the template ID value from Remote Config
let response = try await model.generateContent(
  templateID: templateID,
  // Provide the values for any input variables required by your template.
  inputs: [
    "customerName": customerName
  ]
)

// ...

Kotlin

// ...

val model = Firebase.ai().templateGenerativeModel()
val customerName = "Jane"

// When making the `generateContent` call, source the template ID value from Remote Config
val response = model.generateContent(
  remoteConfig.getString("template_id"),
  // Provide the values for any input variables required by your template.
  mapOf(
    "customerName" to customerName
  )
)

val text = response.text
println(text)

Java

// ...

TemplateGenerativeModel ai = FirebaseAI.getInstance()
    .templateGenerativeModel(null /* Request Options */);

TemplateGenerativeModelFutures model = TemplateGenerativeModelFutures.from(ai);
String customerName = "Jane";

// When making the `generateContent` call, source the template ID value from Remote Config
Future<GenerateContentResponse> response = model.generateContent(
    remoteConfig.getString("template_id"),
    // Provide the values for any input variables required by your template.
    mapOf("customerName", customerName)

);
addCallback(response,
      new FutureCallback<GenerateContentResponse>() {
          public void onSuccess(GenerateContentResponse result) {
            System.out.println(result.getText());
          }
          public void onFailure(Throwable t) {
            reportError(t);
          }
    }
executor);

// ...

Web

// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

const model = getTemplateGenerativeModel(ai);
const templateID = getValue(remoteConfig, 'template_id').asString();
const customerName = 'Jane';

// When making the `generateContent` call, source the template ID value from Remote Config
const result = await model.generateContent(
  templateID,
  // Provide the values for any input variables required by your template
  {
    customerName: customerName,
  }
);

// ...

مرحله ۷ : اجرای برنامه

برنامه را بسازید و اجرا کنید و تأیید کنید که کار می‌کند. از صفحه Remote Config در کنسول Firebase ، تغییراتی در پیکربندی خود ایجاد کنید، تغییرات را منتشر کنید و نتیجه را تأیید کنید.

مراحل بعدی