Potere attivare o disattivare una funzionalità, modificare il testo di un paywall o testare diverse variazioni di interfaccia grafica senza dover sottoporre un nuovo aggiornamento ad Apple App Store è un enorme vantaggio competitivo. **Firebase Remote Config** consente di fare esattamente questo.
1. Inizializzare Remote Config con Valori di Default
È sempre consigliato definire un dizionario di valori di default locali per garantire che l'app funzioni istantaneamente anche in assenza di rete al primo avvio:
import SwiftUI
import FirebaseRemoteConfig
class ConfigManager: ObservableObject {
static let shared = ConfigManager()
@Published var isNewPaywallEnabled: Bool = false
@Published var promoBannerText: String = ""
private var remoteConfig = RemoteConfig.remoteConfig()
private init() {
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 3600 // 1 ora in produzione
remoteConfig.configSettings = settings
// Impostazione valori predefiniti
let defaults: [String: NSObject] = [
"is_new_paywall_enabled": false as NSObject,
"promo_banner_text": "Benvenuto nella nostra app!" as NSObject
]
remoteConfig.setDefaults(defaults)
listenForUpdates()
}
func fetchAndActivateConfig() {
remoteConfig.fetchAndActivate { [weak self] status, error in
if status == .successFetchedFromRemote || status == .successUsingPreFetchedData {
self?.applyConfigValues()
}
}
}
// Listener per aggiornamenti in tempo reale (Firebase Remote Config Realtime)
private func listenForUpdates() {
remoteConfig.addOnConfigUpdateListener { [weak self] configUpdate, error in
guard error == nil else { return }
self?.remoteConfig.activate { _, _ in
self?.applyConfigValues()
}
}
}
private func applyConfigValues() {
DispatchQueue.main.async {
self.isNewPaywallEnabled = self.remoteConfig["is_new_paywall_enabled"].boolValue
self.promoBannerText = self.remoteConfig["promo_banner_text"].stringValue ?? ""
}
}
}
2. Integrazione nelle Viste SwiftUI
In una vista SwiftUI possiamo reagire dinamicamente al valore dei feature flags osservando l'oggetto ConfigManager:
struct MainView: View {
@StateObject private var config = ConfigManager.shared
var body: some View {
VStack(spacing: 20) {
Text(config.promoBannerText)
.font(.headline)
.padding()
.background(Color.blue.opacity(0.1))
.cornerRadius(10)
if config.isNewPaywallEnabled {
NewPaywallButton()
} else {
ClassicPaywallButton()
}
}
.onAppear {
config.fetchAndActivateConfig()
}
}
}
Conclusione
Remote Config trasforma la gestione del prodotto mobile consentendo esperimenti guidati dai dati e kill-switch istantanei in caso di bachi. Per implementare feature flags nella tua app iOS, contatta diallooyunus@gmail.com.