Cuando usas plantillas de instrucciones del servidor, puedes actualizar los valores dentro de una plantilla determinada sin lanzar una nueva versión de tu app. Sin embargo, dado que tu app usará casi de inmediato cualquier cambio en la plantilla, debes tener cuidado de no realizar cambios que puedan dañar tu app o causar cambios inesperados en el comportamiento.
Por lo tanto, si quieres realizar cambios más importantes o implementarlos de forma gradual, no querrás cambiar la plantilla que se usa en el código de producción.
En su lugar, te recomendamos que uses Firebase Remote Config para controlar el valor del ID de plantilla que se usa en la solicitud al modelo.
Firebase Remote Config te permite actualizar los valores de los parámetros en tu app (como el ID de la plantilla) de forma dinámica y remota desde la consola de Firebase, sin necesidad de lanzar una nueva versión de tu app. También cuenta con capacidades e integraciones optimizadas para lanzar cambios y realizar pruebas A/B.
En esta guía, se describe cómo implementar Remote Config en tu app, específicamente para controlar el ID de la plantilla que se usa en tu app.
Paso 1: Configura el valor del parámetro en la consola de Firebase
Crea una plantilla de cliente Remote Config y configura un parámetro template_id y su valor para recuperarlos y usarlos en la app.
Abre tu proyecto de Firebase en la consola de Firebase. Luego, en el menú de navegación, expande Ejecutar y selecciona Remote Config.
Asegúrate de que la opción Cliente esté seleccionada en el selector Cliente/Servidor que se encuentra en la parte superior de la página .
Para iniciar una plantilla de cliente, haz clic en Crear configuración (o Agregar parámetro si ya usaste plantillas de cliente).
Define el parámetro
template_id:Nombre del parámetro Descripción Tipo Valor predeterminado template_idID de la plantilla. String my-first-template-v1-0-0Después de agregar este parámetro, haz clic en Publicar cambios. Si esta no es una plantilla de Remote Config nueva, revisa los cambios y vuelve a hacer clic en Publicar cambios.
Paso 2: Agrega y, luego, inicializa Remote Config en tu app
Agrega la biblioteca de Remote Config y configura Remote Config en tu app.
Swift
Como parte de la configuración de Firebase AI Logic, ya agregaste el SDK de Firebase a tu app, pero también deberás agregar Remote Config.
En Xcode, con el proyecto abierto, navega a Archivo > Agregar dependencias de paquetes.
Selecciona firebase-ios-sdk y, luego, haz clic en Agregar paquete.
En el navegador de proyectos, selecciona tu app > Destinos > tu app.
En la pestaña General, desplázate hasta Frameworks, bibliotecas y contenido incorporado.
Haz clic en + y elige FirebaseRemoteConfig. Luego, haz clic en Agregar.
Agrega la importación
FirebaseRemoteConfiga tu código:import FirebaseRemoteConfigDentro de la clase adecuada para tu app, inicializa Firebase y agrega Remote Config a la lógica principal de la aplicación.
Aquí, incluirás Remote Config y el objeto de escucha en tiempo real de Remote Config como importaciones para que la app pueda recuperar valores nuevos en tiempo real y agregar un intervalo de recuperación mínimo:
let remoteConfig = RemoteConfig.remoteConfig() let settings = RemoteConfigSettings() settings.minimumFetchInterval = 3600 remoteConfig.configSettings = settings
Kotlin
Agrega la dependencia de Remote Config al archivo Gradle del módulo (nivel de app) (generalmente
app/build.gradle.ktsoapp/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 }Agrega Remote Config a la lógica principal de la aplicación. Aquí, inicializarás Remote Config y agregarás un intervalo de recuperación mínimo:
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
Java
Agrega la dependencia de Remote Config al archivo Gradle del módulo (nivel de app) (generalmente
app/build.gradle.ktsoapp/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 }Agrega Remote Config a la lógica principal de la aplicación. Aquí, inicializarás Remote Config y agregarás un intervalo de recuperación mínimo:
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setMinimumFetchIntervalInSeconds(3600) .build(); mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
Web
Abre tu código en un editor de texto y, luego, importa Remote Config:
import { getRemoteConfig } from 'firebase/remote-config';Dentro de tu función principal y después de que se inicialice la app de Firebase para el SDK de Firebase AI Logic, inicializa Remote Config:
// Initialize Remote Config and get a reference to the service const remoteConfig = getRemoteConfig(app);Establece un intervalo de recuperación mínimo:
remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
Paso 3: Configura el valor del parámetro en la app
Debes establecer los valores de los parámetros predeterminados en la app en el objeto de Remote Config. Esto garantiza que tu app se comporte como se espera, incluso si no puede recuperar valores del servicio de Remote Config.
Swift
En la consola de Firebase, abre Remote Config.
En la pestaña Parameters, abre el menú y selecciona Download default values.
Cuando se solicite, habilita .plist para iOS y, luego, haz clic en Descargar archivo.
Guarda el archivo en el directorio de tu aplicación.
En Xcode, haz clic con el botón derecho en tu app y selecciona Agregar archivos.
Selecciona remote_config_defaults.plist y, luego, haz clic en Agregar.
Actualiza el código de tu app para hacer referencia al archivo de valores predeterminados:
// Set default values for Remote Config parameters. remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
Kotlin
En Firebase console, abre Remote Config.
En la pestaña Parameters, abre el menú y selecciona Download default values.
Cuando se solicite, habilita .xml para Android y haz clic en Descargar archivo.
Guarda el archivo en el directorio de recursos XML de tu app.
Actualiza tu archivo de actividad principal para agregar los valores predeterminados después del
configSettingsque agregaste anteriormente:// Set default values for Remote Config parameters. remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
En la consola de Firebase, abre Remote Config.
En la pestaña Parameters, abre el menú y selecciona Download default values.
Cuando se solicite, habilita .xml para Android y haz clic en Descargar archivo.
Guarda el archivo en el directorio de recursos XML de tu app.
Actualiza tu archivo de actividad principal para agregar los valores predeterminados después del
configSettingsque agregaste anteriormente:// Set default values for Remote Config parameters. mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
Web
Puedes establecer el valor predeterminado para el nombre del modelo directamente en tu código:
// Set default values for Remote Config parameters.
remoteConfig.defaultConfig = {
template_id: 'my-first-template-v1-0-0',
};
Paso 4: Recupera y activa el valor
Después de establecer el valor predeterminado para el nombre del modelo, agrega lo siguiente para recuperar y activar valores.
Swift
// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate { status, error in
if let error = error {
print("Error fetching Remote Config: \(error.localizedDescription)")
}
}
Esto debería actualizar el objeto de Remote Config cada vez que se publique una nueva plantilla 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
Agrega
getValueyfetchAndActivatea tus importaciones:import { getValue, fetchAndActivate } from 'firebase/remote-config';Busca el código en el que especificas el valor predeterminado para el nombre del modelo. Inmediatamente después de ese bloque de código, agrega el siguiente código para recuperar y activar la configuración, y asignar el valor recuperado a la constante
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();
Paso 5: Agrega un objeto de escucha de Remote Config en tiempo real
Agrega un objeto de escucha de Remote Config en tiempo real a tu app para garantizar que los cambios que realices en la plantilla de Remote Config se propaguen al cliente en cuanto se actualicen.
El siguiente código actualiza el objeto de Remote Config cada vez que cambia el valor de un parámetro.
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
De manera opcional, también puedes configurar una acción dentro de la activación de 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
De manera opcional, también puedes configurar una acción dentro de la activación de 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
Los objetos de escucha Remote Config en tiempo real no son compatibles con las apps web.
Paso 6: Actualiza las solicitudes de Gemini API para usar el valor de Remote Config
|
Haz clic en tu proveedor de Gemini API para ver el contenido y el código específicos del proveedor en esta página. |
Ahora que Remote Config está completamente configurado, actualiza tu código para reemplazar los valores hard-coded por valores provenientes de Remote Config.
Swift
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,
}
);
// ...
Paso 7: Ejecuta la app
Compila y ejecuta la app, y verifica que funcione. Realiza cambios en la configuración desde la página Remote Config en Firebase console, publica los cambios y verifica el resultado.
Próximos pasos
Obtén más información para implementar otros casos de uso de Remote Config y Firebase AI Logic.
Para aplicaciones y juegos para dispositivos móviles:
Prueba los cambios en la plantilla con Remote Config y A/B Testing.
Lanza los cambios de forma gradual con los lanzamientos de Remote Config (solo para iOS y Android).
Usa la personalización de Remote Config para usar el aprendizaje automático y determinar la mejor configuración para cada usuario (solo para iOS, Android y Unity).