| Platform seçin: | iOS+ Android Web Flutter Unity C++ |
Uygulamanızdaki parametreleri tanımlamak ve değerlerini bulutta güncellemek için Firebase Remote Config kullanabilirsiniz. Bu sayede, uygulama güncellemesi dağıtmadan uygulamanızın görünümünü ve davranışını değiştirebilirsiniz. Bu kılavuzda, başlangıç adımları açıklanmakta ve bazı örnek kodlar verilmektedir. Bu kodların tümü, firebase/quickstart-ios GitHub deposundan klonlanabilir veya indirilebilir.
1. adım: Uygulamanıza Remote Config ekleyin
Henüz yapmadıysanız Firebase'i Apple projenize ekleyin.
Remote Config için, Google Analytics, uygulama örneklerinin kullanıcı özelliklerine ve kitlelere koşullu olarak hedeflenmesi için gereklidir. Projenizde Google Analytics seçeneğini etkinleştirdiğinizden emin olun.
Aşağıdaki örnekte gösterildiği gibi tekil Remote Config nesnesini oluşturun:
Swift
let remoteConfig = RemoteConfig.remoteConfig() let settings = RemoteConfigSettings() settings.minimumFetchInterval = 0 RemoteConfig.remoteConfig().configSettings = settings
Objective-C
FIRRemoteConfig *remoteConfig = [FIRRemoteConfig remoteConfig]; FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init]; remoteConfigSettings.minimumFetchInterval = 0; remoteConfig.configSettings = remoteConfigSettings;
Bu nesne, uygulama içi varsayılan parametre değerlerini depolamak, güncellenen parametre değerlerini Remote Config arka ucundan getirmek ve getirilen değerlerin uygulamanızda ne zaman kullanıma sunulacağını kontrol etmek için kullanılır.
Geliştirme sırasında, nispeten düşük bir minimum getirme aralığı ayarlamanız önerilir. Daha fazla bilgi için Sınırlama başlıklı makaleyi inceleyin.
2. adım: Uygulama içi varsayılan parametre değerlerini ayarlayın
Uygulamanız Remote Config arka ucuna bağlanmadan önce beklendiği gibi davranması ve arka uçta ayarlanmamışsa varsayılan değerlerin kullanılabilmesi için Remote Config nesnesinde uygulama içi varsayılan parametre değerleri ayarlayabilirsiniz.
NSDictionarynesnesi veya plist dosyası kullanarak bir dizi parametre adı ve varsayılan parametre değeri tanımlayın.Remote Config arka uç parametre değerlerini zaten yapılandırdıysanız tüm varsayılan değerleri içeren oluşturulmuş bir
plistdosyasını indirebilir ve Xcode projenize kaydedebilirsiniz.REST
curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=PLIST -o RemoteConfigDefaults.plist
Google Cloud CLI veya Cloud Shell'i kullanarak aşağıdaki komutu çalıştırarak taşıyıcı jeton oluşturabilirsiniz:
gcloud auth print-access-tokenBu jetonun geçerlilik süresi kısadır. Bu nedenle, kimlik doğrulama hatası alırsanız jetonu yeniden oluşturmanız gerekebilir.
Firebase konsol
Firebase konsolunda DevOps & Engagement (DevOps ve Etkileşim) > Remote Config > Parameters (Parametreler) sayfasına gidin.
Menü 'yü açın ve Varsayılan değerleri indir'i seçin.İstendiğinde iOS için.plist'i etkinleştirin ve Dosyayı indir'i tıklayın.
setDefaults:kullanarak bu değerleri Remote Config nesnesine ekleyin. Aşağıdaki örnekte, bir plist dosyasından uygulama içi varsayılan değerler ayarlanmaktadır:Swift
RemoteConfig.remoteConfig().setDefaults(fromPlist: "RemoteConfigDefaults")
Objective-C
[remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];
3. adım: Uygulamanızda kullanmak için parametre değerleri edinin
Artık parametre değerlerini Remote Config nesnesinden alabilirsiniz. Daha sonra Remote Config arka ucunda değerler ayarlarsanız, bu değerleri getirip etkinleştirdiğinizde uygulamanızda kullanılabilir. Aksi takdirde, setDefaults: kullanılarak yapılandırılan uygulama içi parametre değerlerini alırsınız.
Bu değerleri almak için parametre anahtarını bağımsız değişken olarak sağlayarak configValueForKey: yöntemini çağırın.
let remoteConfig = RemoteConfig.remoteConfig()
// Retrieve a parameter value using configValueForKey
let welcomeMessageValue = remoteConfig.configValue(forKey: "welcome_message")
let welcomeMessage = welcomeMessageValue.stringValue
let featureFlagValue = remoteConfig.configValue(forKey: "new_feature_flag")
let isFeatureEnabled = featureFlagValue.boolValue
Bu değerlere Swift'te erişmenin daha okunabilir ve kolay bir yolu, Swift'in alt simge gösterimini kullanmaktır:
let remoteConfig = RemoteConfig.remoteConfig()
// Retrieve a string parameter value
let welcomeMessage = remoteConfig["welcome_message"].stringValue
// Retrieve a boolean parameter value
let isFeatureEnabled = remoteConfig["new_feature_flag"].boolValue
// Retrieve a number parameter value
let maxItemCount = remoteConfig["max_items"].numberValue.intValue
Tür güvenli yapılandırma için Codable'ı kullanma
Daha karmaşık yapılandırmalar için Swift'in Codable protokolünü kullanarak Remote Config'den gelen yapılandırılmış verileri kodunu çözebilirsiniz. Bu sayede, tür güvenli yapılandırma yönetimi sağlanır ve karmaşık nesnelerle çalışmak kolaylaşır.
// Define a Codable struct for your configuration
struct AppFeatureConfig: Codable {
let isNewFeatureEnabled: Bool
let maxUploadSize: Int
let themeColors: [String: String]
}
// Fetch and decode the configuration
func configureAppFeatures() {
let remoteConfig = RemoteConfig.remoteConfig()
remoteConfig.fetchAndActivate { status, error in
guard error == nil else { return }
do {
let featureConfig = try remoteConfig["app_feature_config"].decoded(asType: AppFeatureConfig.self)
configureApp(with: featureConfig)
} catch {
// Handle decoding errors
print("Failed to decode configuration: \(error)")
}
}
}
Bu yöntem sayesinde:
- Karmaşık yapılandırma yapılarını tanımlayın.
- JSON yapılandırmalarını otomatik olarak ayrıştırır.
- Remote Config değerlerine erişirken tür güvenliğini sağlayın.
- Yapılandırılmış Remote Config şablonları işlemek için temiz ve okunabilir kod sağlayın.
SwiftUI'da bildirim temelli yapılandırma için özellik sarmalayıcılarını kullanma
Özellik sarmalayıcıları, özellik bildirimlerine özel davranış eklemenize olanak tanıyan güçlü bir Swift özelliğidir. SwiftUI'da, durumları, bağlamaları ve diğer özellik davranışlarını yönetmek için özellik sarmalayıcıları kullanılır. Daha fazla bilgi için Swift Language Guide'a (Swift Dil Kılavuzu) bakın.
struct ContentView: View {
@RemoteConfigProperty(key: "cardColor", fallback: "#f05138")
var cardColor
var body: some View {
VStack {
Text("Dynamic Configuration")
.background(Color(hex: cardColor))
}
.onAppear {
RemoteConfig.remoteConfig().fetchAndActivate()
}
}
}
Varsayılan değerler için yerleşik destek ve basitleştirilmiş yapılandırma yönetimi ile SwiftUI'da Remote Config değerlerine erişmek için bildirim temelli bir yol istediğinizde @RemoteConfigProperty özellik sarmalayıcısını kullanın.
4. adım: Parametre değerlerini ayarlayın
Firebase konsolunu veya Remote Config arka uç API'lerini kullanarak, istediğiniz koşullu mantığa veya kullanıcı hedeflemeye göre uygulama içi değerleri geçersiz kılan yeni arka uç varsayılan değerleri oluşturabilirsiniz. Bu bölümde, bu değerleri oluşturmak için Firebase konsolunda uygulamanız gereken adımlar açıklanmaktadır.
Firebase konsolunda DevOps & Engagement (DevOps ve Etkileşim) > Remote Config > Parameters (Parametreler) sayfasına gidin.
Uygulamanızda tanımladığınız parametrelerle aynı ada sahip parametreler tanımlayın. Her parametre için varsayılan bir değer (bu değer, uygulama içi varsayılan değeri geçersiz kılar) ve koşullu değerler ayarlayabilirsiniz. Daha fazla bilgi edinmek için Remote Config Parametreler ve Koşullar başlıklı makaleyi inceleyin.
Özel sinyal koşulları kullanıyorsanız özellikleri ve değerlerini tanımlayın. Aşağıdaki örneklerde, özel sinyal koşulunun nasıl tanımlanacağı gösterilmektedir.
Swift
Task { let customSignals: [String: CustomSignalValue?] = [ "city": .string("Tokyo"), "preferred_event_category": .string("sports") ] do { try await remoteConfig.setCustomSignals(customSignals) print("Custom signals set successfully!") } catch { print("Error setting custom signals: \(error)") } }
Objective-C
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSDictionary *customSignals = @{ @"city": @"Tokyo", @"preferred_event_category": @"sports" }; [self.remoteConfig setCustomSignals:customSignals withCompletion:^(NSError * _Nullable error) { if (error) { NSLog(@"Error setting custom signals: %@", error); } else { NSLog(@"Custom signals set successfully!"); } }]; });
5. adım: Değerleri getirin ve etkinleştirin
Parametre değerlerini Remote Config kaynağından getirmek için fetchWithCompletionHandler: veya fetchWithExpirationDuration:completionHandler: yöntemini çağırın. Arka uçta ayarladığınız tüm değerler, Remote Config nesnesinde getirilip önbelleğe alınır.
Değerleri tek bir çağrıda getirmek ve etkinleştirmek istediğiniz durumlarda fetchAndActivateWithCompletionHandler: kullanın.
Bu örnek, değerleri Remote Config arka ucundan (önbelleğe alınmamış değerler) getirir ve bunları uygulamada kullanılabilir hale getirmek için activateWithCompletionHandler: işlevini çağırır:
Swift
remoteConfig.fetch { (status, error) -> Void in if status == .success { print("Config fetched!") remoteConfig.activate { changed, error in // ... } } else { print("Config not fetched") print("Error: \(error?.localizedDescription ?? "No error available.")") } }
Objective-C
[remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) { if (status == FIRRemoteConfigFetchStatusSuccess) { NSLog(@"Config fetched!"); [remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) { if (error != nil) { NSLog(@"Activate error: %@", error.localizedDescription); } else { dispatch_async(dispatch_get_main_queue(), ^{ // update UI }); } }]; } else { NSLog(@"Config not fetched"); NSLog(@"Error %@", error.localizedDescription); } }];
Bu güncellenmiş parametre değerleri uygulamanızın davranışını ve görünümünü etkilediğinden, kullanıcınızın sorunsuz bir deneyim yaşamasını sağlayacak bir zamanda (ör. kullanıcı uygulamanızı bir sonraki açtığında) alınan değerleri etkinleştirmeniz gerekir. Daha fazla bilgi ve örnek için Remote Config yükleme stratejileri başlıklı makaleyi inceleyin.
6. adım: Güncellemeleri anlık olarak dinleyin
Parametre değerlerini getirdikten sonra, Remote Config arka ucundan gelen güncellemeleri dinlemek için gerçek zamanlı Remote Config özelliğini kullanabilirsiniz. Güncellemeler kullanıma sunulduğunda bağlı cihazlara Remote Config anlık sinyaller gönderir ve yeni bir Remote Config sürümü yayınladığınızda değişiklikleri otomatik olarak getirir.
Anlık güncellemeler, Apple platformları için Firebase SDK'sının 10.7.0 ve sonraki sürümlerinde desteklenir.
Uygulamanızda, güncellemeleri dinlemeye başlamak ve yeni veya güncellenmiş parametre değerlerini otomatik olarak getirmek için
addOnConfigUpdateListenerişlevini çağırın. Aşağıdaki örnek, güncellemeleri dinler veactivateWithCompletionHandlerçağrıldığında güncellenmiş bir karşılama mesajı göstermek için yeni getirilen değerleri kullanır.Swift
remoteConfig.addOnConfigUpdateListener { configUpdate, error in guard let configUpdate, error == nil else { print("Error listening for config updates: \(error)") } print("Updated keys: \(configUpdate.updatedKeys)") self.remoteConfig.activate { changed, error in guard error == nil else { return self.displayError(error) } DispatchQueue.main.async { self.displayWelcome() } } }
Objective-C
__weak __typeof__(self) weakSelf = self; [self.remoteConfig addOnConfigUpdateListener:^(FIRRemoteConfigUpdate * _Nonnull configUpdate, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error listening for config updates %@", error.localizedDescription); } else { NSLog(@"Updated keys: %@", configUpdate.updatedKeys); __typeof__(self) strongSelf = weakSelf; [strongSelf.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) { if (error != nil) { NSLog(@"Activate error %@", error.localizedDescription); } dispatch_async(dispatch_get_main_queue(), ^{ [strongSelf displayWelcome]; }); }]; } }];
Remote Config uygulamanızın yeni bir sürümünü bir sonraki yayınladığınızda, uygulamanızı çalıştıran ve değişiklikleri dinleyen cihazlar tamamlama işleyicisini çağırır.
Kısıtlama
Bir uygulama kısa süre içinde çok fazla kez getirme işlemi yaparsa getirme çağrıları sınırlandırılır ve SDK FIRRemoteConfigFetchStatusThrottled değerini döndürür.
SDK'nın 6.3.0 sürümünden önce, 60 dakikalık bir süre içinde 5 getirme isteği sınırı vardı
(daha yeni sürümlerde daha izin verici sınırlar vardır).
Uygulama geliştirme sırasında, uygulamanızı geliştirip test ederken hızlı bir şekilde yineleme yapabilmek için önbelleği çok sık (saatte birçok kez) yenilemek üzere daha sık getirme işlemi yapmak isteyebilirsiniz. Anlık Remote Config güncellemeleri, yapılandırma sunucuda güncellendiğinde önbelleği otomatik olarak atlar. Çok sayıda geliştiricinin yer aldığı bir projede hızlı yinelemeyi desteklemek için uygulamanıza düşük minimum getirme aralığına (MinimumFetchInterval) sahip bir FIRRemoteConfigSettings mülkü geçici olarak ekleyebilirsiniz.
Remote Config için varsayılan ve önerilen üretim getirme aralığı 12 saattir. Bu, kaç getirme çağrısı yapıldığına bakılmaksızın yapılandırmaların 12 saatlik bir süre içinde arka uçtan birden fazla kez getirilmeyeceği anlamına gelir. Özellikle minimum getirme aralığı aşağıdaki sırayla belirlenir:
fetch(long)içindeki parametreFIRRemoteConfigSettings.MinimumFetchIntervaliçindeki parametre- Varsayılan değer 12 saattir.