تعديل تطبيق "الذكاء الاصطناعي" و"المنطق" في Firebase ديناميكيًا باستخدام ميزة "الإعداد عن بُعد في Firebase"

عند طلب Gemini API من تطبيقك باستخدام حزمة تطوير برامج (SDK) لـ Firebase AI Logic، يحتوي طلبك على عدد من المَعلمات التي تتحكّم في ردود الذكاء الاصطناعي التوليدي. وتشمل عادةً اسم النموذج وإعدادات جيل النموذج (مثل الحد الأقصى لعدد الرموز المميزة للناتج) وإعدادات الأمان وتعليمات النظام وبيانات الطلب.

في معظم الحالات، ستحتاج إلى تغيير هذه الإعدادات عند الطلب أو حسب الحاجة لعدد من السيناريوهات:

  • يمكنك تحديث نموذج الذكاء الاصطناعي التوليدي بدون إصدار تطبيق جديد. يمكنك الترقية إلى إصدارات أحدث ومستقرة من النموذج قبل إيقاف الإصدارات السابقة، أو الانتقال إلى نماذج أقل تكلفة أو أعلى أداءً بناءً على احتياجات المستخدمين وسماتهم، أو نشر أحدث النماذج وأفضلها بشكل مشروط لشرائح مستخدمين محددة (مثل مختبري الإصدارات التجريبية).
  • اضبط الموقع الجغرافي الذي تصل منه إلى النموذج ليكون أقرب إلى المستخدمين.
  • يمكنك إجراء اختبار A/B لتعليمات النظام والطلبات المختلفة، ثم طرح قيم التجربة الفائزة للمستخدمين تدريجيًا.
  • استخدِم مفاتيح التبديل لإظهار ميزات الذكاء الاصطناعي التوليدي أو إخفائها بسرعة في تطبيقك.

تتيح لك خدمة Firebase Remote Config إجراء كل ذلك وأكثر، إذ يمكنك تعديل قيم المَعلمات حسب الحاجة وبشكل مشروط لنسخ التطبيق التي تتطابق مع الخصائص التي تحدّدها في وحدة تحكّم Firebase، وذلك بدون طرح إصدار جديد من تطبيقك.

يقدّم دليل الحلول هذا حالات استخدام محدّدة يُنصح بها ويشرح كيفية إضافة Remote Config إلى تطبيق الذكاء الاصطناعي التوليدي.

الانتقال إلى تنفيذ الرمز

لماذا يجب استخدام Firebase Remote Config مع تطبيقك؟

تتيح لك ميزة "Firebase Remote Config" تعديل سلوك تطبيقك ديناميكيًا بدون الحاجة إلى تحديث التطبيق. ويكون ذلك مفيدًا بشكل خاص للتطبيقات التي تستخدم الذكاء الاصطناعي التوليدي، حيث يكون من الضروري إجراء عمليات تكرار سريع وضبط دقيق.

حالات الاستخدام الأساسية لـ "Remote Config" مع تطبيقات الذكاء الاصطناعي التوليدي

ننصح باستخدام Remote Config مع Firebase AI Logic لحالات الاستخدام الأساسية التالية:

  • الترقية إلى أحدث إصدار من النموذج بدون تحديث التطبيق: استخدِم مَعلمات Remote Config لتغيير اسم النموذج حسب الحاجة، ما يتيح لك الترقية إلى أحدث إصدار من نموذج Gemini المفضّل لديك فور توفّره.

  • تعديل تعليمات النظام وإعدادات الأمان بدون تحديث التطبيق: يمكنك تخزين تعليمات النظام وإعدادات الأمان داخل مَعلمات Remote Config لضمان إمكانية تغييرها عند الطلب في حال اكتشاف مشاكل بعد النشر.

  • الحدّ من المخاطر وفرض إجراءات الأمان في الذكاء الاصطناعي: استخدِم عمليات طرح Remote Config لإصدار التغييرات المستندة إلى الذكاء الاصطناعي التوليدي بشكل آمن وتدريجي لمستخدمي iOS وAndroid.

حالات الاستخدام المتقدّمة والمقترَحة لـ Remote Config مع تطبيقات الذكاء الاصطناعي التوليدي

بعد إعداد تطبيقك باستخدام Remote Config وGoogle Analytics، يمكنك استكشاف حالات الاستخدام المتقدّمة التالية:

  • ضبط الموقع الجغرافي استنادًا إلى الموقع الجغرافي للعميل: يمكنك استخدام شروط Remote Config من أجل ضبط الموقع الجغرافي الذي تصل منه إلى النموذج استنادًا إلى الموقع الجغرافي الذي تم رصده للعميل.

  • تجربة نماذج مختلفة: يمكنك اختبار نماذج مختلفة من الذكاء الاصطناعي التوليدي والتبديل بينها بسرعة، أو حتى الوصول إلى نماذج مختلفة لشرائح المستخدمين المختلفة، وذلك للعثور على النموذج الأنسب لحالة الاستخدام المحدّدة.

  • تحسين أداء النموذج: يمكنك ضبط مَعلمات النموذج، مثل طلب النظام والحد الأقصى لعدد الرموز المميّزة الناتجة ودرجة العشوائية والإعدادات الأخرى.

  • استخدام تعليمات نظام وطلبات وإعدادات نماذج مختلفة استنادًا إلى سمات العملاء: عند استخدام Remote Config مع Google Analytics، يمكنك إنشاء شروط استنادًا إلى سمات العملاء أو شرائح الجمهور المخصّصة وضبط مَعلمات مختلفة استنادًا إلى هذه السمات.

    على سبيل المثال، إذا كنت تستخدم الذكاء الاصطناعي التوليدي لتقديم الدعم الفني في تطبيقك، يمكنك ضبط تعليمات النظام الخاصة بمنصة التطبيق لضمان تقديم تعليمات دقيقة لمستخدمي منصات Android وiOS والويب.

  • تخصيص التجارب لكل مستخدم: استخدِم ميزة التخصيص في Remote Config مع تطبيقاتك وألعابك المتوافقة مع الأجهزة الجوّالة لتحديد الإعدادات المثلى للذكاء الاصطناعي التوليدي لكل مستخدم تلقائيًا.

  • التحكّم في التكاليف: يمكنك تعديل النماذج التي يتم استدعاؤها عن بُعد من نماذج الذكاء الاصطناعي التوليدي، ومعدّل استخدامها، وضبط الحد الأقصى لقيم الرموز المميزة للناتج بشكل ديناميكي استنادًا إلى شرائح الجمهور من المستخدمين، وذلك للحد من التكاليف غير الضرورية.

  • تحسين تجربة التطبيق والنتائج: استخدِم A/B Testing مع Remote Config في تطبيقاتك وألعابك على الأجهزة الجوّالة لاختبار التغييرات في مَعلمات الذكاء الاصطناعي التوليدي على مستوى شرائح المستخدمين المختلفة لمعرفة مدى تأثيرها في المقاييس الرئيسية، مثل الحفاظ على المستخدمين والإيرادات.

من خلال تزويد تطبيق الذكاء الاصطناعي التوليدي بـ Firebase Remote Config، يمكنك إنشاء تطبيقات مرنة وآمنة وفعّالة من حيث التكلفة مستندة إلى الذكاء الاصطناعي، مع توفير تجارب ممتعة للمستخدمين.

إضافة Firebase Remote Config إلى تطبيقك

في دليل الحلّ هذا، ستستخدم Firebase Remote Config لتعديل المَعلمات ديناميكيًا في تطبيقك الذي يستخدم حزمة تطوير البرامج (SDK) الخاصة بـ Firebase AI Logic. ستتعرّف على كيفية:

  • استرجاع المَعلمات وتفعيلها، مثل أسماء النماذج وتعليمات النظام من Firebase Remote Config
  • عدِّل طلبات Gemini API لاستخدام المَعلمات التي يتم استردادها ديناميكيًا، ما يتيح لك التبديل بين النماذج المختلفة أو تعديل تعليمات النظام بدون تحديث التطبيق.
  • التحكّم في المَعلمات عن بُعد، وتعديل سلوك النموذج وإمكاناته حسب الحاجة

المتطلبات الأساسية

يفترض هذا الدليل أنّك على دراية بتطوير التطبيقات لمنصتك.

قبل البدء، تأكَّد من تنفيذ ما يلي:

  • أكمِل Firebase AI Logic دليل البدء الذي يوضّح كيفية إعداد مشروع Firebase وربط تطبيقك بـ Firebase وإضافة حزمة تطوير البرامج (SDK) وإعداد خدمة الخلفية لمقدّم خدمة "Gemini API" الذي اخترته وإنشاء نسخة من النموذج.

  • فعِّل Google Analytics في مشروع Firebase الخاص بك وأضِف حزمة تطوير البرامج (SDK) الخاصة به إلى تطبيقك (مطلوب للاستهداف المشروط، مثل ضبط الموقع الجغرافي الذي تصل منه إلى النموذج استنادًا إلى الموقع الجغرافي لجهاز العميل).

الخطوة 1: ضبط قيم المَعلمات في وحدة تحكّم Firebase

أنشئ نموذج عميل Remote Config واضبط المَعلمات والقيم التي تريد جلبها واستخدامها في التطبيق.

  1. في وحدة تحكّم Firebase، انتقِل إلى عمليات تطوير البرامج وإشراك المستخدمين > Remote Config.

  2. من أداة اختيار العميل/الخادم في أعلى الصفحة، اختَر العميل.

  3. ابدأ نموذج عميل بالنقر على إنشاء إعداد (أو إضافة مَعلمة إذا سبق لك استخدام نماذج العملاء).

  4. حدِّد المَعلمات التي تريد التحكّم فيها باستخدام Remote Config. على سبيل المثال:

    اسم المَعلمة الوصف النوع القيمة التلقائية
    model_name اسم النموذج اطّلِع على أسماء الطُرز المتاحة. سلسلة gemini-3.8-flash
    system_instructions تعليمات النظام هي مثل "مقدّمة" تتم إضافتها قبل أن يتلقّى النموذج أي تعليمات أخرى من المستخدم النهائي للتأثير في سلوك النموذج. سلسلة You are a helpful assistant who knows everything there is to know about Firebase!
    prompt الطلب التلقائي الذي سيتم استخدامه مع ميزة الذكاء الاصطناعي التوليدي سلسلة I am a developer who wants to know more about Firebase!
    agent_platform_location ينطبق ذلك فقط في حال استخدام Agent Platform Gemini API (formerly Vertex AI).
    التحكّم في الموقع الجغرافي للوصول إلى النموذج يمكنك ضبط الشروط لضبط هذا الخيار استنادًا إلى الموقع الجغرافي للعميل الذي تم رصده بواسطة Google Analytics.
    سلسلة global
  5. عند الانتهاء من إضافة المَعلمات، انقر على نشر التغييرات. إذا لم يكن هذا نموذجًا جديدًا من "Remote Config"، راجِع التغييرات وانقر على نشر التغييرات مرة أخرى.

الخطوة 2: إضافة Remote Config وإعداده في تطبيقك

أضِف مكتبة Remote Config وأعِدّ Remote Config في تطبيقك.

Swift

في إطار عملية إعداد Firebase AI Logic، سبق لك إضافة حزمة تطوير البرامج (SDK) لمنصة Firebase إلى تطبيقك، ولكن عليك أيضًا إضافة Remote Config.

  1. في Xcode، افتح المشروع وانتقِل إلى ملف > إضافة موارد الاعتمادية للحزمة (File > Add Package Dependencies).

  2. اختَر firebase-ios-sdk، ثم انقر على إضافة حزمة.

  3. من "مستكشف المشروع" (Project navigator)، اختَر تطبيقك > الأهداف (Targets) > تطبيقك.

  4. من علامة التبويب عام، انتقِل إلى الأطر والمكتبات والمحتوى المضمّن.

  5. انقر على + واختَر FirebaseRemoteConfig، ثم انقر على إضافة.

  6. أضِف عملية استيراد FirebaseRemoteConfig إلى الرمز:

    import FirebaseRemoteConfig
    
  7. داخل الفئة المناسبة لتطبيقك، عليك إعداد Firebase وإضافة Remote Config إلى منطق التطبيق الرئيسي.

    هنا، ستُدرج Remote Config وRemote Config real-time listener كعمليات استيراد ليتمكّن التطبيق من جلب القيم الجديدة في الوقت الفعلي، وإضافة حد أدنى للفاصل الزمني للجلب:

    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:35.0.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:35.0.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 لحزمة تطوير البرامج (SDK) Firebase AI Logic، نفِّذ عملية التهيئة Remote Config:

      // Initialize Remote Config and get a reference to the service
      const remoteConfig = getRemoteConfig(app);
    
  3. اضبط الحدّ الأدنى للفاصل الزمني للجلب:

    remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
    

Dart

  1. من دليل مشروع Flutter، ثبِّت Remote Config وأضِف باستخدام الأمر التالي:

    flutter pub add firebase_remote_config
    
  2. افتح ./lib/main.dart وأضِف عملية الاستيراد بعد عمليات الاستيراد الأخرى التي أضفتها لدعم Firebase AI Logic:

    import 'package:firebase_ai/firebase_ai.dart';
    import 'package:firebase_core/firebase_core.dart';
    import 'package:firebase_remote_config/firebase_remote_config.dart';
    
  3. أضِف المتغيّرات _modelName و_systemInstructions و_prompt إلى تطبيقك لتتمكّن من استخدامها لاحقًا:

    late final String _modelName;
    late final String _systemInstructions;
    late final String _prompt;
    
  4. احصل على النسخة الافتراضية للعنصر Remote Config وحدِّد أقل فترة زمنية للاسترجاع من أجل السماح بإعادة التحميل بشكل متكرّر. يُرجى التأكّد من إضافة هذا الرمز بعد إعداد Firebase.

      final remoteConfig = FirebaseRemoteConfig.instance;
      await remoteConfig.setConfigSettings(RemoteConfigSettings(
        fetchTimeout: const Duration(seconds: 3600),
        minimumFetchInterval: const Duration(seconds: 3600),
      ));
    

Unity

  1. أضِف Remote Config إلى مشروعك على Unity باتّباع هذه التعليمات.

  2. احصل على النسخة الافتراضية للعنصر Remote Config وحدِّد أقل فترة زمنية للاسترجاع من أجل السماح بإعادة التحميل بشكل متكرّر. يُرجى التأكّد من إضافة هذا الرمز بعد إعداد Firebase.

    var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
    const int MillisecondsPerSecond = 1000;
    await remoteConfig.SetConfigSettingsAsync(new ConfigSettings() {
      FetchTimeoutInMilliseconds = 3600 * MillisecondsPerSecond,
      MinimumFetchIntervalInMilliseconds = 3600 * MillisecondsPerSecond
    });
    

الخطوة 3: ضبط قيم المَعلمات داخل التطبيق

عليك ضبط قيم المَعلمات التلقائية داخل التطبيق في عنصر Remote Config. يضمن ذلك أن يتصرف تطبيقك على النحو المتوقّع حتى إذا لم يتمكّن من جلب القيم من خدمة Remote Config.

Swift

  1. في وحدة تحكّم Firebase، انتقِل إلى صفحة DevOps & Engagement > الإعداد عن بُعد > المَعلمات.

  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، انتقِل إلى صفحة DevOps & Engagement > الإعداد عن بُعد > المَعلمات.

  2. افتح القائمة، واختَر تنزيل القيم التلقائية.

  3. عندما يُطلب منك ذلك، فعِّل ملف ‎.xml لنظام التشغيل Android، ثم انقر على تنزيل الملف.

  4. احفظ الملف في دليل موارد XML الخاص بتطبيقك.

  5. عدِّل ملف النشاط الرئيسي لإضافة القيم التلقائية بعد configSettings التي أضفتها سابقًا:

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

Java

  1. في وحدة تحكّم Firebase، انتقِل إلى صفحة DevOps & Engagement > الإعداد عن بُعد > المَعلمات.

  2. افتح القائمة، واختَر تنزيل القيم التلقائية.

  3. عندما يُطلب منك ذلك، فعِّل ملف ‎.xml لنظام التشغيل Android، ثم انقر على تنزيل الملف.

  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 = {
  model_name: 'gemini-3.8-flash',
  system_instructions:
    'You are a helpful assistant who knows everything there is to know about Firebase!',
  prompt: 'I am a developer who wants to know more about Firebase!',
  agent_platform_location: 'global',
};

Dart

يمكنك ضبط القيم التلقائية مباشرةً في الرمز:

// Set default values for Remote Config parameters.
remoteConfig.setDefaults(const {
  "model_name": "gemini-3.8-flash",
  "system_instructions": "You are a helpful assistant who knows everything there is to know about Firebase!",
  "prompt": "I am a developer who wants to know more about Firebase!",
  "agent_platform_location": "global"
});

Unity

يمكنك ضبط القيم التلقائية مباشرةً في الرمز:

// Set default values for Remote Config parameters.
await remoteConfig.SetDefaultsAsync(
  new System.Collections.Generic.Dictionary<string, object>() {
    { "model_name", "gemini-3.8-flash" },
    { "system_instructions", "You are a helpful assistant who knows everything there is to know about Firebase!" },
    { "prompt", "I am a developer who wants to know more about Firebase!" },
    { "agent_platform_location", "global" }
  }
);

الخطوة 4: استرجاع القيم وتنشيطها

بعد ضبط القيم التلقائية، أضِف ما يلي لجلب القيم وتفعيلها.

Swift

// 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. ابحث عن الرمز الذي تحدّد فيه قيم Remote Config التلقائية. بعد مجموعة الرموز هذه مباشرةً، أضِف الرمز التالي لجلب الإعدادات وتفعيلها وتعيين قيم للثوابت modelName وsystemInstructions وprompt وagentPlatformLocation.

    // 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 modelName = getValue(remoteConfig, 'model_name').asString();
    const systemInstructions = getValue(remoteConfig, 'system_instructions').asString();
    const prompt = getValue(remoteConfig, 'prompt').asString();
    const agentPlatformLocation = getValue(remoteConfig, 'agent_platform_location').asString();
    

Dart

// Fetch and activate Remote Config.
remoteConfig.fetchAndActivate();

// Assign Remote Config values.
String? _modelName = remoteConfig.getString("model_name");
String? _systemInstructions = remoteConfig.getString("system_instructions");
String? _prompt = remoteConfig.getString("prompt");
String? _agentPlatformLocation = remoteConfig.getString("agent_platform_location");

Unity

// Fetch and activate Remote Config values.
await remoteConfig.FetchAndActivateAsync();

الخطوة 5: إضافة مستمع في الوقت الفعلي إلى Remote Config

أضِف مستمعًا في الوقت الفعلي Remote Config إلى تطبيقك لضمان نشر التغييرات التي تجريها على نموذج Remote Config إلى العميل فور تعديلها.

يعدّل الرمز التالي عنصر Remote Config كلما تغيّرت قيمة مَعلمة.

Swift

// 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

 // Add a real-time Remote Config listener
 onConfigUpdate(remoteConfig, {
   next: (configUpdate) => {
      console.log("Updated keys:", configUpdate.getUpdatedKeys());
      if (configUpdate.getUpdatedKeys().has("welcome_message")) {
         activate(remoteConfig).then(() => {
         showWelcomeMessage();
         });
      }
   },
   error: (error) => {
      console.log("Config update error:", error);
   },
   complete: () => {
      console.log("Listening stopped.");
   }
});

Dart

// Add a real-time Remote Config listener
remoteConfig.onConfigUpdated.listen((event) async {
  await remoteConfig.activate();
});

Unity

// Add a real-time Remote Config listener to automatically update whenever
// a new template is published.
// Note: the parameters can be anonymous as they are unused.

remoteConfig.OnConfigUpdateListener += (_, _) => {
  remoteConfig.ActivateAsync();
};

الخطوة 6: تعديل طلبات Gemini API لاستخدام قيم Remote Config

انقر على مزوّد Gemini API لعرض المحتوى والرمز الخاصين بالمزوّد على هذه الصفحة.

بعد إعداد Remote Config بالكامل، عدِّل الرمز البرمجي لاستبدال القيم المرمّزة بثبات بالقيم المستندة إلى Remote Config.

Swift

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
let modelName = remoteConfig.configValue(forKey: "model_name").stringValue
let systemInstructions = remoteConfig.configValue(forKey: "system_instructions").stringValue

let model = ai.generativeModel(
  modelName: modelName,
  systemInstruction: ModelContent(role: "system", parts: systemInstructions)
)

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
let userPrompt = remoteConfig.configValue(forKey: "prompt").stringValue

// To generate text output, call `generateContent` with the text input
let response = try await model.generateContent(userPrompt)
if let text = response.text {
  print(text)
}

Kotlin

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
val model = ai.generativeModel(
  modelName = remoteConfig.getString("model_name"),
  systemInstruction = content { text(remoteConfig.getString("system_instructions")) }
)

// To generate text output, call `generateContent` with the text input
// The text in the prompt will be sourced from Remote Config
val response = model.generateContent(remoteConfig.getString("prompt"))
print(response.text)

Java

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
FirebaseAI ai = FirebaseAI.getInstance(GenerativeBackend.googleAI());

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
GenerativeModel gm = ai.generativeModel(
        /* modelName */ remoteConfig.getString("model_name"),
        /* generationConfig (optional) */ null,
        /* safetySettings (optional) */ null,
        /* tools (optional) */ null,
        /* toolsConfig (optional) */ null,
        /* systemInstruction (optional) */ new Content.Builder().addText(
                remoteConfig.getString("system_instructions")).build(),
        /* requestOptions (optional) */ new RequestOptions()
);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
Content userPrompt = new Content.Builder()
        .addText(remoteConfig.getString("prompt"))
        .build();

// To generate text output, call `generateContent` with the text input
ListenableFuture<GenerateContentResponse> response = model.generateContent(userPrompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
        System.out.println(resultText);
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Web

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
const model = getGenerativeModel(ai, {
  model: modelName,
  systemInstruction: systemInstruction
});

// Wrap in an async function so you can use await
async function run() {
  // Provide a prompt that contains text
  // The text in the prompt will be sourced from Remote Config
  const userPrompt = prompt;

  // To generate text output, call `generateContent` with the text input
  const result = await model.generateContent(userPrompt);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

Dart

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
final ai = await FirebaseAI.googleAI();

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
final model =
      ai.generativeModel(
        model: _modelName,
        systemInstruction: Content.system(_systemInstructions),
      );

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
final _userPrompt = [Content.text(_prompt)];

// To generate text output, call `generateContent` with the text input
final response = await model.generateContent(_userPrompt);
print(response.text);

Unity

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
var modelName = remoteConfig.GetValue("model_name").StringValue;
var systemInstructions = remoteConfig.GetValue("system_instructions").StringValue;

var model = ai.GetGenerativeModel(
  modelName: modelName,
  systemInstruction: ModelContent.Text(systemInstructions)
);

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
var userPrompt = remoteConfig.GetValue("prompt").StringValue;

// To generate text output, call `GenerateContentAsync` with the text input
var response = await model.GenerateContentAsync(userPrompt);
UnityEngine.Debug.Log(response.Text ?? "No text in response.");

الخطوة 7: تشغيل التطبيق

أنشئ التطبيق وشغِّله وتأكَّد من أنّه يعمل. يمكنك إجراء تغييرات على الإعدادات من صفحة "Remote Config" في وحدة تحكّم "Firebase"، ثم نشر التغييرات والتحقّق من النتيجة.

الخطوات التالية