| Выберите платформу: | iOS+ Android Web Flutter Unity C++ |
Вы можете использовать Firebase Remote Config для определения параметров в вашем приложении и обновления их значений в облаке, что позволяет изменять внешний вид и поведение приложения без необходимости распространения обновления. Это руководство подробно описывает шаги для начала работы и предоставляет примеры кода, которые можно клонировать или скачать из репозитория firebase/quickstart-ios на GitHub.
Шаг 1: Добавьте Remote Config в свое приложение
Если вы еще этого не сделали, добавьте Firebase в свой проект Apple .
Для Remote Config требуется Google Analytics для условного таргетинга экземпляров приложения на свойства и аудитории пользователя. Убедитесь, что вы включили Google Analytics в своем проекте.
Создайте единичный объект Remote Config , как показано в следующем примере:
Быстрый
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;
Этот объект используется для хранения значений параметров приложения по умолчанию, извлечения обновленных значений параметров из бэкэнда Remote Config и управления тем, когда извлеченные значения становятся доступны вашему приложению.
Во время разработки рекомендуется установить относительно небольшой минимальный интервал выборки. Подробнее см. в разделе «Регулирование» .
Шаг 2: Установите значения параметров приложения по умолчанию
Вы можете задать значения параметров приложения по умолчанию в объекте Remote Config , чтобы приложение вело себя так, как задумано, до того, как оно подключится к бэкэнду Remote Config , и чтобы значения по умолчанию были доступны, если в бэкэнде ничего не задано.
Определите набор имен параметров и значений параметров по умолчанию, используя объект
NSDictionaryили файл plist .Если вы уже настроили значения параметров бэкэнда Remote Config , вы можете загрузить сгенерированный файл
plist, включающий все значения по умолчанию, и сохранить его в своем проекте Xcode.ОТДЫХ
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 или Cloud Shell :
gcloud auth print-access-tokenЭтот токен имеет короткий срок действия, поэтому вам может потребоваться сгенерировать его заново, если вы получите ошибку аутентификации.
Консоль Firebase
На вкладке «Параметры» откройте меню и выберите «Загрузить значения по умолчанию» .
При появлении запроса включите .plist для iOS , затем нажмите Загрузить файл .
Добавьте эти значения в объект Remote Config с помощью
setDefaults:В следующем примере задаются значения по умолчанию в приложении из файла plist:Быстрый
RemoteConfig.remoteConfig().setDefaults(fromPlist: "RemoteConfigDefaults")
Objective-C
[remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];
Шаг 3: Получите значения параметров для использования в вашем приложении.
Теперь вы можете получать значения параметров из объекта Remote Config . Если вы позже зададите значения в бэкенде Remote Config , извлечете их и активируете, эти значения будут доступны вашему приложению. В противном случае вы получите значения параметров приложения, настроенные с помощью setDefaults: . Чтобы получить эти значения, вызовите метод configValueForKey: передав ключ параметра в качестве аргумента.
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
Более читабельный и удобный способ доступа к этим значениям в Swift — использовать индексную нотацию Swift:
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
Используйте Codable для типобезопасной конфигурации
Для более сложных конфигураций можно использовать протокол Codable в Swift для декодирования структурированных данных из Remote Config . Это обеспечивает типобезопасное управление конфигурацией и упрощает работу со сложными объектами.
// 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)")
}
}
}
Этот метод позволяет:
- Определите сложные конфигурационные структуры.
- Автоматически анализировать конфигурации JSON.
- Обеспечьте безопасность типов при доступе к значениям Remote Config .
- Предоставляйте чистый, читаемый код для обработки структурированных шаблонов Remote Config .
Используйте Property Wrappers для декларативной конфигурации в SwiftUI
Обёртки свойств — это мощная функция Swift, позволяющая добавлять пользовательское поведение к объявлениям свойств. В SwiftUI обёртки свойств используются для управления состоянием, привязками и другими характеристиками свойств. Подробнее см. в руководстве по языку Swift .
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()
}
}
}
Используйте оболочку свойств @RemoteConfigProperty если вам нужен декларативный способ доступа к значениям Remote Config в SwiftUI со встроенной поддержкой значений по умолчанию и упрощенным управлением конфигурацией.
Шаг 4: Установите значения параметров
Используя консоль Firebase или API-интерфейсы Remote Config , вы можете создавать новые значения по умолчанию, которые переопределяют значения в приложении в соответствии с желаемой условной логикой или таргетингом пользователей. В этом разделе описываются шаги по созданию этих значений в консоли Firebase .
- В консоли Firebase откройте свой проект.
- Выберите Remote Config в меню, чтобы просмотреть панель управления Remote Config .
- Определите параметры с теми же именами, что и параметры, заданные в вашем приложении. Для каждого параметра можно задать значение по умолчанию (которое в конечном итоге переопределит значение по умолчанию в приложении), а также задать условные значения. Подробнее см. в разделе Параметры и условия Remote Config .
При использовании пользовательских условий сигнала определите атрибуты и их значения. В следующих примерах показано, как определить пользовательское условие сигнала.
Быстрый
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: Извлечение и активация значений
Чтобы получить значения параметров из Remote Config , вызовите метод fetchWithCompletionHandler: или fetchWithExpirationDuration:completionHandler: :. Все значения, заданные на бэкенде, извлекаются и кэшируются в объекте Remote Config .
В случаях, когда вы хотите извлечь и активировать значения за один вызов, используйте fetchAndActivateWithCompletionHandler: :.
В этом примере извлекаются значения из бэкэнда Remote Config (не кэшированные значения) и вызывается activateWithCompletionHandler: чтобы сделать их доступными для приложения:
Быстрый
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); } }];
Поскольку эти обновлённые значения параметров влияют на поведение и внешний вид вашего приложения, вам следует активировать полученные значения в момент, обеспечивающий бесперебойную работу пользователя, например, при следующем открытии приложения. Дополнительную информацию и примеры см. в разделе «Стратегии загрузки Remote Config» .
Шаг 6: Следите за обновлениями в режиме реального времени
После получения значений параметров вы можете использовать Remote Config в режиме реального времени для прослушивания обновлений из бэкенда Remote Config . Remote Config в режиме реального времени уведомляет подключенные устройства о наличии обновлений и автоматически извлекает изменения после публикации новой версии Remote Config .
Обновления в режиме реального времени поддерживаются Firebase SDK для платформ Apple v10.7.0+ и выше.
В вашем приложении вызовите
addOnConfigUpdateListener, чтобы начать прослушивание обновлений и автоматически получать все новые или обновлённые значения параметров. В следующем примере прослушиваются обновления, и при вызовеactivateWithCompletionHandlerиспользуются новые полученные значения для отображения обновлённого приветственного сообщения.Быстрый
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 , устройства, на которых запущено ваше приложение и которые прослушивают изменения, вызовут обработчик завершения.
Регулирование
Если приложение выполняет слишком много запросов на выборку за короткий промежуток времени, запросы на выборку блокируются, и SDK возвращает FIRRemoteConfigFetchStatusThrottled . До версии SDK 6.3.0 ограничение составляло 5 запросов на выборку за 60 минут (в более новых версиях ограничения шире).
Во время разработки приложения может потребоваться более частая выборка для обновления кэша (несколько раз в час), что позволит быстро выполнять итерации в процессе разработки и тестирования приложения. Обновления удалённой конфигурации в режиме реального времени автоматически обходят кэш при обновлении конфигурации на сервере. Чтобы обеспечить быструю итерацию в проекте с большим количеством разработчиков, вы можете временно добавить в приложение свойство FIRRemoteConfigSettings с низким минимальным интервалом выборки ( MinimumFetchInterval ).
Рекомендуемый интервал выборки по умолчанию для Remote Config составляет 12 часов. Это означает, что конфигурации не будут извлекаться из бэкенда чаще одного раза в течение 12-часового окна, независимо от фактического количества вызовов выборки. В частности, минимальный интервал выборки определяется в следующем порядке:
- Параметр в
fetch(long) - Параметр в
FIRRemoteConfigSettings.MinimumFetchInterval - Значение по умолчанию 12 часов