Sunucu istemi şablonlarını kullandığınızda, uygulamanızın yeni bir sürümünü yayınlamadan belirli bir şablon içindeki değerleri güncelleyebilirsiniz. Ancak şablonda yapılan değişiklikler uygulamanızdan gelen istekler tarafından neredeyse anında kullanılacağından, uygulamanızın bozulmasına veya davranışta beklenmedik değişikliklere neden olabilecek değişiklikler yapma konusunda dikkatli olmanız gerekir.
Bu nedenle, daha önemli değişiklikler yapmak veya değişiklikleri kademeli olarak kullanıma sunmak istiyorsanız üretim kodunda kullanılan şablonu değiştirmemeniz gerekir.
Bunun yerine, modele yapılan istekte kullanılan şablon kimliğinin değerini kontrol etmek için Firebase Remote Config kullanmanızı öneririz.
Firebase Remote Config, uygulamanızın yeni bir sürümünü yayınlamanıza gerek kalmadan Firebase konsolundan uygulamanızdaki parametre değerlerini (ör. şablon kimliği) dinamik olarak ve uzaktan güncellemenize olanak tanır. Ayrıca, değişiklikleri kullanıma sunmanın yanı sıra A/B testi için de kolaylaştırılmış özellikler ve entegrasyonlar sunar.
Bu kılavuzda, Remote Config öğesini uygulamanıza nasıl uygulayacağınız, özellikle de uygulamanızda kullanılan şablon kimliğini kontrol etme konusu açıklanmaktadır.
1. adım: Parametre değerini Firebase konsolunda ayarlayın
Remote Config istemci şablonu oluşturun ve uygulamada getirilip kullanılacak bir template_id
parametre ile değerini yapılandırın.
Firebase konsolunda Firebase projenizi açın. Ardından, gezinme menüsünde Çalıştır'ı genişletip Remote Config'ı seçin.
Sayfanın üst kısmındaki İstemci/Sunucu seçicisinden İstemci'nin seçildiğinden emin olun.
Yapılandırma Oluştur'u (veya daha önce istemci şablonları kullandıysanız Parametre ekle'yi) tıklayarak bir istemci şablonu başlatın.
template_idparametresini tanımlayın:Parametre adı Açıklama Tür Varsayılan değer template_idŞablon kimliği. Dize my-first-template-v1-0-0Bu parametreyi ekledikten sonra Değişiklikleri yayınla'yı tıklayın. Bu yeni bir Remote Config şablonu değilse değişiklikleri inceleyin ve Değişiklikleri yayınla'yı tekrar tıklayın.
2. adım: Uygulamanıza Remote Config ekleyin ve başlatın
Remote ConfigKitaplığı ekleyin ve uygulamanızda Remote Config ayarlarını yapın.
Swift
Firebase AI LogicKurulum işleminin bir parçası olarak Firebase SDK'sını uygulamanıza eklediniz ancak Remote Config da eklemeniz gerekir.
Xcode'da, proje açıkken File > Add Package Dependencies'a (Dosya > Paket Bağımlılıkları Ekle) gidin.
firebase-ios-sdk'yı seçin ve Paket ekle'yi tıklayın.
Proje Gezgini'nde uygulamanız > Targets (Hedefler) > uygulamanızı seçin.
Genel sekmesinde Framework'ler, Kitaplıklar ve Yerleştirilmiş İçerik bölümüne gidin.
+ simgesini tıklayın, FirebaseRemoteConfig'i seçin ve Ekle'yi tıklayın.
Kodunuza
FirebaseRemoteConfigiçe aktarma ifadesini ekleyin:import FirebaseRemoteConfigUygulamanız için uygun sınıfın içinde Firebase'i başlatın ve ana uygulama mantığınıza Remote Config ekleyin.
Burada, uygulamanın yeni değerleri gerçek zamanlı olarak getirebilmesi için Remote Config ve Remote Config gerçek zamanlı dinleyiciyi içe aktarma olarak ekleyip minimum getirme aralığı ekleyeceksiniz:
let remoteConfig = RemoteConfig.remoteConfig() let settings = RemoteConfigSettings() settings.minimumFetchInterval = 3600 remoteConfig.configSettings = settings
Kotlin
Remote Config bağımlılığını modülünüzün (uygulama düzeyinde) Gradle dosyasına (genellikle
app/build.gradle.ktsveyaapp/build.gradle) ekleyin: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 }Ana uygulama mantığınıza Remote Config ekleyin. Burada Remote Config öğesini başlatacak ve minimum getirme aralığı ekleyeceksiniz:
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
Java
Remote Config bağımlılığını modülünüzün (uygulama düzeyinde) Gradle dosyasına (genellikle
app/build.gradle.ktsveyaapp/build.gradle) ekleyin: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 }Ana uygulama mantığınıza Remote Config ekleyin. Burada Remote Config öğesini başlatacak ve minimum getirme aralığı ekleyeceksiniz:
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setMinimumFetchIntervalInSeconds(3600) .build(); mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
Web
Kodunuzu bir metin düzenleyicide açın ve Remote Config öğesini içe aktarın:
import { getRemoteConfig } from 'firebase/remote-config';Birincil işlevinizin içinde ve Firebase uygulaması Firebase AI Logic SDK'sı için başlatıldıktan sonra Remote Config SDK'sını başlatın:
// Initialize Remote Config and get a reference to the service const remoteConfig = getRemoteConfig(app);Minimum getirme aralığı ayarlayın:
remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
3. adım: Uygulama içi parametre değerini ayarlayın
Uygulama içi varsayılan parametre değerlerini Remote Config nesnesinde ayarlamanız gerekir. Bu, uygulamanızın Remote Config hizmetinden değer alamasa bile beklendiği gibi davranmasını sağlar.
Swift
Firebase konsolunda Remote Config öğesini açın.
Parametreler sekmesinde Menü'yü açın ve Varsayılan değerleri indir'i seçin.
İstendiğinde .plist for iOS'i etkinleştirin, ardından Dosyayı indir'i tıklayın.
Dosyayı uygulama dizininize kaydedin.
Xcode'da uygulamanızı sağ tıklayın ve Add Files'ı (Dosya Ekle) seçin.
remote_config_defaults.plist'i seçin ve Ekle'yi tıklayın.
Uygulama kodunuzu, defaults dosyasına referans verecek şekilde güncelleyin:
// Set default values for Remote Config parameters. remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
Kotlin
Firebase konsolundan Remote Config hizmetini açın.
Parametreler sekmesinde Menü'yü açın ve Varsayılan değerleri indir'i seçin.
İstendiğinde Android için.xml'i etkinleştirin ve Dosyayı indir'i tıklayın.
Dosyayı uygulamanızın XML kaynakları dizinine kaydedin.
Daha önce eklediğiniz
configSettingssonrasına varsayılanları eklemek için ana etkinlik dosyanızı güncelleyin:// Set default values for Remote Config parameters. remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
Firebase konsolunda Remote Config öğesini açın.
Parametreler sekmesinde Menü'yü açın ve Varsayılan değerleri indir'i seçin.
İstendiğinde Android için.xml'i etkinleştirin ve Dosyayı indir'i tıklayın.
Dosyayı uygulamanızın XML kaynakları dizinine kaydedin.
Daha önce eklediğiniz
configSettingssonrasına varsayılanları eklemek için ana etkinlik dosyanızı güncelleyin:// Set default values for Remote Config parameters. mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
Web
Model adının varsayılan değerini doğrudan kodunuzda ayarlayabilirsiniz:
// Set default values for Remote Config parameters.
remoteConfig.defaultConfig = {
template_id: 'my-first-template-v1-0-0',
};
4. adım: Değeri getirin ve etkinleştirin
Model adı için varsayılan değeri ayarladıktan sonra değerleri getirmek ve etkinleştirmek için aşağıdakileri ekleyin.
Swift
// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate { status, error in
if let error = error {
print("Error fetching Remote Config: \(error.localizedDescription)")
}
}
Bu, yeni bir Remote Config şablonu yayınlandığında Remote Config nesnesini güncellemelidir.
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
İçe aktarma işlemlerinize
getValuevefetchAndActivateekleyin:import { getValue, fetchAndActivate } from 'firebase/remote-config';Model adı için varsayılan değeri belirttiğiniz kodu bulun. Bu kod bloğunun hemen ardından, yapılandırmayı getirip etkinleştirmek ve getirilen değeri
templateIDsabitine atamak için aşağıdaki kodu ekleyin.// 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. adım: Anlık Remote Config dinleyici ekleyin
Remote Config şablonunda yaptığınız değişikliklerin güncellenir güncellenmez istemciye aktarılmasını sağlamak için uygulamanıza gerçek zamanlı Remote Config dinleyici ekleyin.
Aşağıdaki kod, bir parametre değeri her değiştiğinde Remote Config nesnesini günceller.
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
İsteğe bağlı olarak, addOnCompleteListener etkinleştirme içinde bir işlem de yapılandırabilirsiniz:
// 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
İsteğe bağlı olarak, addOnCompleteListener etkinleştirme içinde bir işlem de yapılandırabilirsiniz:
// 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
Web uygulamalarında anlık Remote Config dinleyici özelliği desteklenmez.
6. adım: Gemini API isteklerini Remote Config değerini kullanacak şekilde güncelleyin
|
Bu sayfada sağlayıcıya özel içerikleri ve kodu görüntülemek için Gemini API sağlayıcınızı tıklayın. |
Remote Config tamamen yapılandırıldığına göre, kodunuzu güncelleyerek sabit kodlanmış değerleri Remote Config kaynağından alınan değerlerle değiştirin.
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,
}
);
// ...
7. adım: Uygulamayı çalıştırın
Uygulamayı derleyip çalıştırın ve çalıştığını doğrulayın. Firebase konsolundaki Remote Config sayfasından yapılandırmanızda değişiklikler yapın, değişiklikleri yayınlayın ve sonucu doğrulayın.
Sonraki adımlar
Diğer Remote Config ve Firebase AI Logic kullanım alanlarını uygulama hakkında daha fazla bilgi edinin.
Mobil uygulamalar ve oyunlar için:
Şablon değişikliklerinizi Remote Config ve A/B Testing ile test edin.
Remote Config Kullanıma sunma (yalnızca iOS+ ve Android) özelliğini kullanarak değişiklikleri kademeli olarak yayınlayın.
Remote Config Kişiselleştirme özelliğini kullanarak makine öğreniminden yararlanın ve her bir kullanıcı için en iyi ayarları belirleyin (yalnızca iOS+, Android ve Unity).