Ao usar modelos de solicitação do servidor, é possível atualizar valores em um modelo específico sem lançar uma nova versão do app. No entanto, como qualquer mudança no modelo será usada quase imediatamente pelas solicitações do app, é preciso ter cuidado ao fazer alterações que possam quebrar o app ou causar mudanças inesperadas no comportamento.
Portanto, se você quiser fazer mudanças mais significativas ou lançar alterações gradualmente, não mude o modelo usado no código de produção.
Em vez disso, recomendamos usar Firebase Remote Config para controlar o valor do ID do modelo usado na solicitação ao modelo.
Com a Firebase Remote Config, é possível atualizar os valores dos parâmetros no app (como o ID do modelo) de forma dinâmica e remota no console do Firebase, sem precisar lançar uma nova versão. Ela também tem recursos e integrações simplificados para lançar mudanças e fazer testes A/B.
Este guia descreve como implementar o Remote Config no seu app, especificamente para controlar o ID do modelo usado no app.
Etapa 1: definir o valor do parâmetro no console do Firebase
Crie um modelo de cliente Remote Config e configure um parâmetro template_id
e o valor dele para buscar e usar no app.
Abra seu projeto do Firebase no console do Firebase. Em seguida, no menu de navegação, abra Executar e selecione Remote Config.
Verifique se Cliente está selecionado no seletor Cliente/Servidor na parte de cima da página.
Para iniciar um modelo de cliente, clique em Criar configuração ou Adicionar parâmetro se você já usou modelos de cliente.
Defina o parâmetro
template_id:Nome do parâmetro Descrição Tipo Valor padrão template_idID do modelo. String my-first-template-v1-0-0Depois de adicionar esse parâmetro, clique em Publicar alterações. Se esse não for um novo modelo de Remote Config, revise as mudanças e clique em Publicar alterações novamente.
Etapa 2: adicionar e inicializar a Remote Config no app
Adicione a biblioteca Remote Config e configure a Remote Config no app.
Swift
Como parte da configuração da Firebase AI Logic, você já adicionou o SDK do Firebase ao app, mas também precisa adicionar a Remote Config.
No Xcode, com o projeto aberto, navegue até Arquivo > Adicionar dependências do pacote.
Selecione firebase-ios-sdk e clique em Adicionar pacote.
No navegador do projeto, selecione seu app > Segmentos > seu app.
Na guia Geral, role até Frameworks, bibliotecas e conteúdo incorporado.
Clique em +, escolha FirebaseRemoteConfig e clique em Adicionar.
Adicione a importação
FirebaseRemoteConfigao seu código:import FirebaseRemoteConfigDentro da classe apropriada para seu app, inicialize o Firebase e adicione Remote Config à lógica principal do aplicativo.
Aqui você vai incluir a Remote Config e o listener de Remote Config em tempo real como importações para que o app possa buscar novos valores em tempo real e adicionar um intervalo mínimo de busca:
let remoteConfig = RemoteConfig.remoteConfig() let settings = RemoteConfigSettings() settings.minimumFetchInterval = 3600 remoteConfig.configSettings = settings
Kotlin
Adicione a dependência da Remote Config ao arquivo Gradle do seu módulo (nível do app) (geralmente
app/build.gradle.ktsouapp/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 }Adicione a Remote Config à lógica principal do aplicativo. Aqui você vai inicializar a Remote Config e adicionar um intervalo mínimo de busca:
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
Java
Adicione a dependência da Remote Config ao arquivo Gradle do seu módulo (nível do app) (geralmente
app/build.gradle.ktsouapp/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 }Adicione a Remote Config à lógica principal do aplicativo. Aqui você vai inicializar a Remote Config e adicionar um intervalo mínimo de busca:
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setMinimumFetchIntervalInSeconds(3600) .build(); mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
Web
Abra o código em um editor de texto e importe a Remote Config:
import { getRemoteConfig } from 'firebase/remote-config';Na função principal e depois que o app do Firebase for inicializado para o SDK da Firebase AI Logic, inicialize a Remote Config:
// Initialize Remote Config and get a reference to the service const remoteConfig = getRemoteConfig(app);Defina um intervalo de busca mínimo:
remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
Etapa 3: definir o valor do parâmetro no app
Defina valores de parâmetros padrão no app no objeto Remote Config. Isso garante que o app se comporte como esperado, mesmo que não consiga buscar valores do serviço de Remote Config.
Swift
No console do Firebase, abra Remote Config.
Na guia Parâmetros, abra o Menu e selecione Fazer o download dos valores padrão.
Quando solicitado, ative a opção .plist para iOS, e clique em Fazer o download do arquivo.
Salve o arquivo no diretório do aplicativo.
No Xcode, clique com o botão direito do mouse no app e selecione Adicionar arquivos.
Selecione remote_config_defaults.plist e clique em Adicionar.
Atualize o código do app para fazer referência ao arquivo padrão:
// Set default values for Remote Config parameters. remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
Kotlin
No console de Firebase, abra Remote Config.
Na guia Parâmetros, abra o Menu e selecione Fazer o download dos valores padrão.
Quando solicitado, ative a opção .xml para Android e clique em Fazer o download do arquivo.
Salve o arquivo no diretório de recursos XML do app.
Atualize o arquivo de atividade principal para adicionar os padrões depois do
configSettingsadicionado anteriormente:// Set default values for Remote Config parameters. remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
No console do Firebase, abra Remote Config.
Na guia Parâmetros, abra o Menu e selecione Fazer o download dos valores padrão.
Quando solicitado, ative a opção .xml para Android e clique em Fazer o download do arquivo.
Salve o arquivo no diretório de recursos XML do app.
Atualize o arquivo de atividade principal para adicionar os padrões depois do
configSettingsadicionado anteriormente:// Set default values for Remote Config parameters. mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
Web
É possível definir o valor padrão para o nome do modelo diretamente no código:
// Set default values for Remote Config parameters.
remoteConfig.defaultConfig = {
template_id: 'my-first-template-v1-0-0',
};
Etapa 4: buscar e ativar o valor
Depois de definir o valor padrão para o nome do modelo, adicione o seguinte para buscar e ativar valores.
Swift
// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate { status, error in
if let error = error {
print("Error fetching Remote Config: \(error.localizedDescription)")
}
}
Isso vai atualizar o objeto de Remote Config sempre que um novo modelo de Remote Config for publicado.
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
Adicione
getValueefetchAndActivateàs importações:import { getValue, fetchAndActivate } from 'firebase/remote-config';Localize o código em que você especifica o valor padrão para o nome do modelo. Imediatamente após esse bloco de código, adicione o seguinte código para buscar e ativar a configuração e atribuir o valor buscado à 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();
Etapa 5: adicionar um listener de Remote Config em tempo real
Adicione um listener da Remote Config em tempo real ao app para garantir que as mudanças feitas no modelo da Remote Config sejam propagadas para o cliente assim que forem atualizadas.
O código a seguir atualiza o objeto Remote Config sempre que um valor de parâmetro muda.
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
Também é possível configurar uma ação dentro da
ativação 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
Também é possível configurar uma ação dentro da
ativação 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
Os listeners da Remote Config em tempo real não têm suporte para apps da Web.
Etapa 6: atualizar as solicitações da Gemini API para usar o valor da Remote Config
|
Clique no seu provedor de Gemini API para conferir o conteúdo e o código específicos do provedor nesta página. |
Agora que a Remote Config está totalmente configurada, atualize o código para substituir valores codificados por valores provenientes da 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,
}
);
// ...
Etapa 7: executar o app
Crie e execute o app e verifique se ele funciona. Faça mudanças na configuração na página de Remote Config do console do Firebase, publique as mudanças e verifique o resultado.
Próximas etapas
Saiba mais sobre como implementar outros casos de uso para Remote Config e Firebase AI Logic.
Para apps e jogos para dispositivos móveis:
Teste as mudanças de modelo com Remote Config e A/B Testing.
Libere gradualmente as mudanças usando os lançamentos da Remote Config (somente iOS+ e Android).
Use a personalização da Remote Config para usar o aprendizado de máquina e determinar as melhores configurações para usuários individuais (somente iOS+, Android e Unity).