Используя шаблоны серверных запросов, вы можете обновлять значения в заданном шаблоне без выпуска новой версии приложения. Однако, поскольку любые изменения в шаблоне будут практически сразу же использоваться запросами из вашего приложения, следует проявлять осторожность, не внося изменений, которые могут нарушить работу приложения или вызвать неожиданные изменения в его поведении.
Поэтому, если вы хотите внести более существенные изменения или внедрять изменения постепенно, вам не нужно менять шаблон, используемый в производственном коде.
Вместо этого мы рекомендуем использовать Firebase Remote Config для управления значением идентификатора шаблона, используемого в запросе к модели.
Firebase Remote Config позволяет динамически и удалённо обновлять значения параметров в вашем приложении (например, идентификатор шаблона) из консоли Firebase , без необходимости выпуска новой версии приложения. Сервис также предлагает оптимизированные возможности и интеграции для внедрения изменений и проведения A/B-тестирования.
В этом руководстве описывается, как реализовать Remote Config в вашем приложении, в частности, для управления идентификатором шаблона, используемым в вашем приложении .
Шаг 1 : Задайте значение параметра в консоли Firebase
Создайте шаблон клиента Remote Config и настройте параметр template_id и его значение для извлечения и использования в приложении.
Откройте проект Firebase в консоли Firebase . Затем в меню навигации разверните пункт «Запуск» и выберите Remote Config .
Убедитесь, что в селекторе Клиент/Сервер в верхней части страницы выбрано значение Клиент .
Запустите клиентский шаблон, нажав «Создать конфигурацию» (или «Добавить параметр», если вы ранее использовали клиентские шаблоны).
Определите параметр
template_id:Имя параметра Описание Тип Значение по умолчанию template_idИдентификатор шаблона. Нить my-first-template-v1-0-0После добавления этого параметра нажмите «Опубликовать изменения» . Если это не новый шаблон Remote Config , проверьте изменения и снова нажмите «Опубликовать изменения» .
Шаг 2 : Добавьте и инициализируйте Remote Config в своем приложении.
Добавьте библиотеку Remote Config и настройте Remote Config в своем приложении.
Быстрый
В рамках настройки Firebase AI Logic вы уже добавили Firebase SDK в свое приложение, но вам также потребуется добавить Remote Config .
В Xcode откройте проект, перейдите в Файл > Добавить зависимости пакета .
Выберите firebase-ios-sdk и нажмите Добавить пакет .
В навигаторе проектов выберите свое приложение > Цели > ваше приложение.
На вкладке Общие прокрутите до раздела Фреймворки, Библиотеки и Встроенное содержимое .
Нажмите + и выберите FirebaseRemoteConfig , затем нажмите Добавить .
Добавьте импорт
FirebaseRemoteConfigв свой код:import FirebaseRemoteConfigВнутри соответствующего класса вашего приложения инициализируйте Firebase и добавьте Remote Config в основную логику приложения.
Здесь вы включите Remote Config и прослушиватель Remote Config в реальном времени в качестве импортов, чтобы приложение могло извлекать новые значения в реальном времени, а также добавите минимальный интервал выборки:
let remoteConfig = RemoteConfig.remoteConfig() let settings = RemoteConfigSettings() settings.minimumFetchInterval = 3600 remoteConfig.configSettings = settings
Kotlin
Добавьте зависимость 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 }Добавьте Remote Config в основную логику приложения. Здесь вы инициализируете Remote Config и добавите минимальный интервал выборки:
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
Java
Добавьте зависимость 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 }Добавьте Remote Config в основную логику приложения. Здесь вы инициализируете Remote Config и добавите минимальный интервал выборки:
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setMinimumFetchIntervalInSeconds(3600) .build(); mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
Web
Откройте свой код в текстовом редакторе и импортируйте Remote Config :
import { getRemoteConfig } from 'firebase/remote-config';Внутри вашей основной функции и после инициализации приложения Firebase для Firebase AI Logic SDK инициализируйте Remote Config :
// Initialize Remote Config and get a reference to the service const remoteConfig = getRemoteConfig(app);Установите минимальный интервал выборки:
remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
Шаг 3 : Задайте значение параметра в приложении
Вам следует задать значения параметров приложения по умолчанию в объекте Remote Config . Это гарантирует, что ваше приложение будет вести себя ожидаемым образом, даже если оно не сможет получить значения из службы Remote Config .
Быстрый
В консоли Firebase откройте Remote Config .
На вкладке «Параметры» откройте « Меню» и выберите «Загрузить значения по умолчанию» .
При появлении запроса включите .plist для iOS , затем нажмите Загрузить файл .
Сохраните файл в каталоге вашего приложения.
В Xcode щелкните правой кнопкой мыши по приложению и выберите «Добавить файлы».
Выберите remote_config_defaults.plist , затем нажмите Добавить .
Обновите код приложения, указав ссылку на файл по умолчанию:
// Set default values for Remote Config parameters. remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
Kotlin
В консоли Firebase откройте Remote Config .
На вкладке «Параметры» откройте « Меню» и выберите «Загрузить значения по умолчанию» .
При появлении запроса включите .xml для Android , затем нажмите Загрузить файл .
Сохраните файл в каталоге XML-ресурсов вашего приложения.
Обновите ваш основной файл активности, чтобы добавить значения по умолчанию после
configSettingsкоторый вы добавили ранее:// Set default values for Remote Config parameters. remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
В консоли Firebase откройте Remote Config .
На вкладке «Параметры» откройте « Меню» и выберите «Загрузить значения по умолчанию» .
При появлении запроса включите .xml для Android , затем нажмите Загрузить файл .
Сохраните файл в каталоге XML-ресурсов вашего приложения.
Обновите ваш основной файл активности, чтобы добавить значения по умолчанию после
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',
};
Шаг 4 : Получите и активируйте значение
После установки значения по умолчанию для имени модели добавьте следующее для извлечения и активации значений.
Быстрый
// 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
Добавьте
getValueиfetchAndActivateк вашим импортам:import { getValue, fetchAndActivate } from 'firebase/remote-config';Найдите код, в котором указывается значение по умолчанию для имени модели. Сразу после этого блока кода добавьте следующий код для извлечения и активации конфигурации, а также присвоения полученного значения константе
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();
Шаг 5 : Добавьте прослушиватель 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 полностью настроен, обновите свой код, заменив жестко заданные значения значениями, полученными из 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,
}
);
// ...
Шаг 7 : Запустите приложение.
Соберите и запустите приложение, чтобы убедиться в его работоспособности. Внесите изменения в конфигурацию на странице Remote Config в консоли Firebase , опубликуйте изменения и проверьте результат.
Следующие шаги
Узнайте больше о реализации других вариантов использования Remote Config и Firebase AI Logic .
Для мобильных приложений и игр:
Протестируйте изменения в шаблоне с помощью Remote Config и A/B Testing .
Постепенно выпускайте изменения с помощью развертываний Remote Config (только для iOS+ и Android).
Используйте персонализацию Remote Config , чтобы использовать машинное обучение для определения оптимальных настроек для отдельных пользователей (только iOS+, Android и Unity).