Dostępność modeli generatywnej AI często się zmienia – pojawiają się nowe, lepsze modele, a starsze, mniej zaawansowane modele są wycofywane.
Gdy uzyskujesz dostęp do modeli generatywnej AI bezpośrednio z aplikacji mobilnej lub internetowej za pomocą interfejsu APIFirebase AI Logic, musisz skonfigurować aplikację tak, aby uwzględniała te częste zmiany modeli. Nie wszyscy użytkownicy zaktualizują aplikację do najnowszej wersji, aby zacząć korzystać z modelu, którego potrzebujesz.
Firebase Remote Config umożliwia dynamiczne i zdalne aktualizowanie wartości parametrów w aplikacji (np. nazwy modelu) z poziomu konsoli Firebase bez konieczności publikowania nowej wersji aplikacji.
, nawet podczas jej tworzenia. Dzięki temu będziesz mieć możliwość zdalnej aktualizacji nazwy modelu w każdej wersji aplikacji.Pamiętaj, że zmiana nazwy modelu to krytyczny przypadek użycia funkcji Remote Config z parametrem Firebase AI Logic, ale możesz też używać Remote Config do dynamicznego, a nawet warunkowego kontrolowania parametrów w aplikacji, takich jak konfiguracja generowania modelu (maksymalna liczba tokenów, temperatura itp.), ustawienia bezpieczeństwa, instrukcje systemowe i dane promptu.
Z tego przewodnika dowiesz się, jak wdrożyć Remote Config w aplikacji, a w szczególności jak kontrolować nazwę modelu używaną w aplikacji.
Krok 1. Ustaw wartość parametru w konsoli Firebase.
Utwórz Remote Configszablon klientamodel_name i skonfiguruj model_nameparametr oraz jego wartość, aby pobrać je i użyć w aplikacji.
Otwórz projekt Firebase w Firebasekonsoli. Następnie w menu nawigacyjnym rozwiń Uruchom i wybierz Remote Config.
Sprawdź, czy w selektorze Klient/Serwer u góry strony wybrano Klient.
Aby rozpocząć tworzenie szablonu klienta, kliknij Utwórz konfigurację (lub Dodaj parametr, jeśli szablonów klientów używasz już wcześniej).
Zdefiniuj parametr
model_name:Nazwa parametru Opis Typ Wartość domyślna model_nameNazwa modelu. Zobacz dostępne nazwy modeli. Ciąg znaków gemini-2.5-flashPo dodaniu tego parametru kliknij Opublikuj zmiany. Jeśli to nie jest nowy szablon Remote Config, sprawdź zmiany i ponownie kliknij Opublikuj zmiany.
Krok 2. Dodaj i zainicjuj Remote Config w aplikacji
Dodaj bibliotekę Remote Config i skonfiguruj Remote Config w aplikacji.
Swift
W ramach Firebase AI Logickonfiguracji pakiet SDK Firebase został już dodany do aplikacji, ale musisz też dodać Remote Config.
Po otwarciu projektu w Xcode kliknij File > Add Package Dependencies (Plik > Dodaj zależności pakietu).
Wybierz firebase-ios-sdk, a następnie kliknij Add package (Dodaj pakiet).
W nawigatorze projektu wybierz aplikację > Cele > aplikację.
Na karcie Ogólne przewiń do sekcji Frameworki, biblioteki i treści osadzone.
Kliknij + i wybierz FirebaseRemoteConfig, a potem kliknij Dodaj.
Dodaj do kodu import
FirebaseRemoteConfig:import FirebaseRemoteConfigW odpowiedniej klasie aplikacji zainicjuj Firebase i dodajRemote Config do głównej logiki aplikacji.
W tym miejscu dodaj Remote Config i Remote Config odbiornik w czasie rzeczywistym jako importy, aby aplikacja mogła pobierać nowe wartości w czasie rzeczywistym, oraz dodaj minimalny interwał pobierania:
let remoteConfig = RemoteConfig.remoteConfig() let settings = RemoteConfigSettings() settings.minimumFetchInterval = 3600 remoteConfig.configSettings = settings
Kotlin
Dodaj zależność Remote Config do pliku Gradle modułu (na poziomie aplikacji) (zwykle
app/build.gradle.ktslubapp/build.gradle):dependencies { implementation(platform("com.google.firebase:firebase-bom:34.7.0")) implementation("com.google.firebase:firebase-ai") implementation("com.google.firebase:firebase-config") // ... other dependencies }Dodaj Remote Config do głównej logiki aplikacji. Tutaj zainicjujesz Remote Config i dodasz minimalny interwał pobierania:
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
Java
Dodaj zależność Remote Config do pliku Gradle modułu (na poziomie aplikacji) (zwykle
app/build.gradle.ktslubapp/build.gradle):dependencies { implementation(platform("com.google.firebase:firebase-bom:34.7.0")) implementation("com.google.firebase:firebase-ai") implementation("com.google.firebase:firebase-config") // ... other dependencies }Dodaj Remote Config do głównej logiki aplikacji. Tutaj zainicjujesz Remote Config i dodasz minimalny interwał pobierania:
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setMinimumFetchIntervalInSeconds(3600) .build(); mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
Web
Otwórz kod w edytorze tekstu i zaimportuj Remote Config:
import { getRemoteConfig } from 'firebase/remote-config';W funkcji głównej i po zainicjowaniu aplikacji Firebase na potrzeby pakietu SDK Firebase AI Logic zainicjuj Remote Config:
// Initialize Remote Config and get a reference to the service const remoteConfig = getRemoteConfig(app);Ustaw minimalny odstęp czasu pobierania:
remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
Dart
W katalogu projektu Flutter zainstaluj i dodaj Remote Configza pomocą tego polecenia:
flutter pub add firebase_remote_configOtwórz plik
./lib/main.darti dodaj instrukcję importu po innych instrukcjach importu dodanych w celu obsługi Firebase AI Logic:import 'package:firebase_vertexai/firebase_ai.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_remote_config/firebase_remote_config.dart';Dodaj do aplikacji zmienną
_modelName, aby móc jej później używać:late final String _modelName; late final String _systemInstructions; late final String _prompt;Pobierz instancję obiektu Remote Config i ustaw minimalny interwał pobierania, aby umożliwić częste odświeżanie. Pamiętaj, aby dodać ten kod po zainicjowaniu Firebase.
final remoteConfig = FirebaseRemoteConfig.instance; await remoteConfig.setConfigSettings(RemoteConfigSettings( fetchTimeout: const Duration(seconds: 3600), minimumFetchInterval: const Duration(seconds: 3600), ));
Unity
Dodaj Remote Config do projektu Unity, postępując zgodnie z tymi instrukcjami.
Pobierz instancję obiektu Remote Config i ustaw minimalny interwał pobierania, aby umożliwić częste odświeżanie. Pamiętaj, aby dodać ten kod po zainicjowaniu Firebase.
var remoteConfig = FirebaseRemoteConfig.DefaultInstance; const int MillisecondsPerSecond = 1000; await remoteConfig.SetConfigSettingsAsync(new ConfigSettings() { FetchTimeoutInMilliseconds = 3600 * MillisecondsPerSecond, MinimumFetchIntervalInMilliseconds = 3600 * MillisecondsPerSecond });
Krok 3. Ustaw wartość parametru w aplikacji
Wartości domyślne parametrów w aplikacji należy ustawić w obiekcie Remote Config. Dzięki temu aplikacja będzie działać zgodnie z oczekiwaniami nawet wtedy, gdy nie będzie mogła pobrać wartości z usługi Remote Config.
Swift
W konsoli Firebase otwórz Remote Config.
Na karcie Parametry otwórz Menu i kliknij Pobierz wartości domyślne.
Gdy pojawi się odpowiedni komunikat, włącz .plist dla iOS, a potem kliknij Pobierz plik.
Zapisz plik w katalogu aplikacji.
W Xcode kliknij prawym przyciskiem myszy aplikację i wybierz Add Files (Dodaj pliki).
Wybierz remote_config_defaults.plist, a potem kliknij Dodaj.
Zaktualizuj kod aplikacji, aby odwoływał się do pliku domyślnego:
// Set default values for Remote Config parameters. remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
Kotlin
Na konsoli Firebase otwórz Remote Config.
Na karcie Parametry otwórz Menu i kliknij Pobierz wartości domyślne.
Gdy pojawi się odpowiedni komunikat, włącz opcję .xml na Androida, a potem kliknij Pobierz plik.
Zapisz plik w katalogu zasobów XML aplikacji.
Zaktualizuj główny plik aktywności, aby dodać wartości domyślne po dodanym wcześniej kodzie
configSettings:// Set default values for Remote Config parameters. remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
W konsoli Firebase otwórz Remote Config.
Na karcie Parametry otwórz Menu i kliknij Pobierz wartości domyślne.
Gdy pojawi się odpowiedni komunikat, włącz opcję .xml na Androida, a potem kliknij Pobierz plik.
Zapisz plik w katalogu zasobów XML aplikacji.
Zaktualizuj główny plik aktywności, aby dodać wartości domyślne po dodanym wcześniej kodzie
configSettings:// Set default values for Remote Config parameters. mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
Web
Wartość domyślną nazwy modelu możesz ustawić bezpośrednio w kodzie:
// Set default values for Remote Config parameters.
remoteConfig.defaultConfig = {
model_name: 'gemini-2.5-flash',
};
Dart
Wartość domyślną nazwy modelu możesz ustawić bezpośrednio w kodzie:
// Set default values for Remote Config parameters.
remoteConfig.setDefaults(const {
"model_name": "gemini-2.5-flash"
});
Unity
Wartość domyślną nazwy modelu możesz ustawić bezpośrednio w kodzie:
// Set default values for Remote Config parameters.
await remoteConfig.SetDefaultsAsync(
new System.Collections.Generic.Dictionary<string, object>() {
{ "model_name", "gemini-2.5-flash" }
}
);
Krok 4. Pobierz i aktywuj wartość
Po ustawieniu domyślnej wartości nazwy modelu dodaj poniższy kod, aby pobrać i aktywować wartości.
Swift
// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate { status, error in
if let error = error {
print("Error fetching Remote Config: \(error.localizedDescription)")
}
}
Powinno to aktualizować obiekt Remote Config za każdym razem, gdy zostanie opublikowany nowy szablon 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
Dodaj do importów
getValueifetchAndActivate:import { getValue, fetchAndActivate } from 'firebase/remote-config';Znajdź kod, w którym określasz wartość domyślną nazwy modelu. Bezpośrednio po tym bloku kodu dodaj ten kod, aby pobrać i aktywować konfigurację oraz przypisać pobraną wartość do stałej
modelName.// 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();
Dart
// Fetch and activate Remote Config.
remoteConfig.fetchAndActivate();
// Assign Remote Config values.
String? _modelName = remoteConfig.getString("model_name");
Unity
// Fetch and activate Remote Config values.
await remoteConfig.FetchAndActivateAsync();
Krok 5. Dodaj słuchacza Remote Config w czasie rzeczywistym
Dodaj do aplikacji odbiornik Remote Config czasu rzeczywistego, aby mieć pewność, że zmiany wprowadzone w Remote Config szablonie są przekazywane do klienta natychmiast po aktualizacji.
Poniższy kod aktualizuje obiekt Remote Config za każdym razem, gdy zmienia się wartość parametru.
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
Opcjonalnie możesz też skonfigurować działanie w ramach aktywacji: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
Opcjonalnie możesz też skonfigurować działanie w ramach aktywacji: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();
};
Krok 6. Zaktualizuj żądania Gemini API, aby używać wartości Remote Config.
|
Kliknij Gemini API dostawcę, aby wyświetlić na tej stronie treści i kod specyficzne dla tego dostawcy. |
Po pełnym skonfigurowaniu Remote Config zaktualizuj kod, aby zastąpić zakodowane na stałe wartości wartościami pochodzącymi z Remote Config.
Swift
import FirebaseAI
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
let modelName = remoteConfig.configValue(forKey: "model_name").stringValue
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
modelName: modelName
)
// ...
Kotlin
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = remoteConfig.getString("model_name")
)
// ...
Java
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
/* modelName */ remoteConfig.getString("model_name"),
/* generationConfig (optional) */ null,
/* safetySettings (optional) */ null,
/* requestOptions (optional) */ new RequestOptions(),
/* tools (optional) */ null,
/* toolsConfig (optional) */ null,
/* systemInstruction (optional) */ null,
);
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
// ...
Web
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
const model = getGenerativeModel(ai, {
model: modelName
});
// ...
Dart
// ...
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
final model = FirebaseAI.googleAI().generativeModel(
model: _modelName,
);
// ...
Unity
// ...
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
var modelName = remoteConfig.GetValue("model_name").StringValue;
var model = ai.GetGenerativeModel(
modelName: modelName
);
// ...
Krok 7. Uruchom aplikację.
Skompiluj i uruchom aplikację oraz sprawdź, czy działa. Wprowadź zmiany w konfiguracji na stronie Remote Config w konsoli Firebase, opublikuj je i sprawdź wynik.
Dalsze kroki
Dowiedz się więcej o wdrażaniu innych przypadków użycia Remote Config i Firebase AI Logic.
W przypadku aplikacji i gier mobilnych:
Testuj różne ustawienia modelu za pomocą symboli Remote Config i A/B Testing.
Stopniowo wprowadzaj zmiany parametrów modelu za pomocą Remote Configwdrażania (tylko iOS+ i Android).
Użyj Remote Configpersonalizacji, aby wykorzystać systemy uczące się do określania najlepszych ustawień dla poszczególnych użytkowników (tylko iOS+, Android i Unity).