Ответ
Firebase Remote Config — это облачный сервис, позволяющий изменять поведение и внешний вид вашего приложения без публикации обновления в App Store, путем подтягивания ключ-значение пар с сервера.
Типичные сценарии использования:
- Включение/отключение функциональности (флаг фичи).
- Изменение строк, цветов, URL-адресов.
- Управление параметрами A/B-тестов.
- Настройка частоты опросов или таймаутов.
Базовая настройка и получение значений:
import FirebaseRemoteConfig
class ConfigManager {
static let shared = ConfigManager()
private let remoteConfig = RemoteConfig.remoteConfig()
private init() {
// 1. Настройка (дефолтный интервал fetch - 12 часов)
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 3600 // Разрешить fetch не чаще чем раз в час (для разработки)
remoteConfig.configSettings = settings
// 2. Установка значений по умолчанию (на случай, если нет сети или ключ не задан)
remoteConfig.setDefaults([
"welcome_message": "Добро пожаловать!" as NSObject,
"is_feature_enabled": false as NSObject,
"refresh_interval": 300 as NSObject // секунды
])
}
func fetchConfig(completion: @escaping (Bool) -> Void) {
// 3. Запрос конфигурации с сервера и немедленная активация
remoteConfig.fetchAndActivate { [weak self] status, error in
if let error = error {
print("Remote Config fetch error: (error.localizedDescription)")
completion(false)
return
}
// 4. Использование значений после активации
let message = self?.remoteConfig["welcome_message"].stringValue ?? ""
let isFeatureOn = self?.remoteConfig["is_feature_enabled"].boolValue ?? false
let interval = self?.remoteConfig["refresh_interval"].numberValue?.intValue ?? 300
DispatchQueue.main.async {
// Применить значения в UI / логике
completion(status != .error)
}
}
}
}
Продвинутые возможности и нюансы:
- Условия (Conditions): На сервере можно настроить таргетинг значений на основе аудитории (версия ОС, язык, случайная группа пользователя и т.д.).
- Принудительный fetch для разработки: Используйте
remoteConfig.fetch(withExpirationDuration: 0)для игнорирования кеша. - Активация:
fetchAndActivateавтоматически применяет новые значения. Для более тонкого контроля используйте отдельноfetch()и затемactivate(). - Обработка ошибок: Всегда проверяйте
status(.successFetchedFromRemote,.successUsingPreFetchedData,.error) и наличиеerror. - Лимиты: Firebase накладывает лимиты на частоту запросов. Значение
minimumFetchIntervalследует увеличить для продакшена (например, до 43200 секунд = 12 часов).
Важно: Remote Config не предназначен для передачи критичных или чувствительных данных, так как значения могут быть закешированы и их можно подменить.