您可以使用 Firebase Remote Config 来定义应用中的参数并在云端更新它们的值。这样,您无需更新应用即可修改应用的外观和行为。
本指南逐步介绍了入门步骤并提供了一些示例代码,所有这些代码都可以从 firebase/quickstart-ios GitHub 代码库中克隆或下载。
将远程配置添加到您的应用
创建单例 Remote Config 对象,如以下示例所示:
Swift
remoteConfig = RemoteConfig.remoteConfig() let settings = RemoteConfigSettings() settings.minimumFetchInterval = 0 remoteConfig.configSettings = settings
Objective-C
self.remoteConfig = [FIRRemoteConfig remoteConfig]; FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init]; remoteConfigSettings.minimumFetchInterval = 0; self.remoteConfig.configSettings = remoteConfigSettings;
此对象用于存储应用内默认参数值,从 Remote Config 后端提取更新后的参数值,以及控制提取的值何时可供应用使用。
在开发期间,建议设置相对较短的最小提取间隔。如需了解详情,请参阅限制。
设置应用内默认参数值
您可以在 Remote Config 对象中设置应用内默认参数值,以便应用在连接到 Remote Config 后端之前能够按预期运行,并且保证在后端中未设置任何值时可以使用默认值。
- 使用 NSDictionary 对象或 plist 文件定义一组参数名称和默认参数值。
- 使用 setDefaults: 将这些值添加到 Remote Config 对象。以下示例通过
plist
文件设置应用内默认值:
Swift
remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults")
Objective-C
[self.remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];
获取要在应用中使用的参数值
现在,您可以从 Remote Config 对象中获取参数值。如果您提取并激活之后的步骤在 Remote Config 后端中设置的值,这些值便可以供您的应用使用。否则,您将获得使用 setDefaults() 方法配置的应用内参数值。要获取这些值,请调用 configValueForKey: 方法,并提供 Remote Config 后端中的参数键作为该方法的参数。
设置参数值
使用 Firebase 控制台或 Remote Config 后端 API,您可以创建新的后端默认值,以根据所需的条件逻辑或用户定位替换应用内值。本部分逐步介绍了在 Firebase 控制台中创建上述值的步骤。
- 在 Firebase 控制台中,打开您的项目。
- 从菜单中选择 Remote Config 以查看 Remote Config 信息中心。
- 使用您在应用中指定的参数名称指定参数。对于每个参数,您可以设置默认值(最终将替换应用内默认值),也可以设置条件值。如需了解详情,请参阅 Remote Config 参数和条件。
提取并激活值
如需从 Remote Config 中提取参数值,请调用 fetchWithCompletionHandler: 或 fetchWithExpirationDuration:completionHandler: 方法。系统将提取您在后端中设置的所有值,并缓存在 Remote Config 对象中。
如果要在一次调用中提取并激活值,请使用 fetchAndActivateWithCompletionHandler:
。
以下示例从 Remote Config 后端(而非缓存的值)中提取值,并调用 activateWithCompletionHandler:
以使其可供应用使用:
Swift
remoteConfig.fetch() { (status, error) -> Void in if status == .success { print("Config fetched!") self.remoteConfig.activate() { (changed, error) in // ... } } else { print("Config not fetched") print("Error: \(error?.localizedDescription ?? "No error available.")") } self.displayWelcome() }
Objective-C
[self.remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) { if (status == FIRRemoteConfigFetchStatusSuccess) { NSLog(@"Config fetched!"); [self.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) { // ... }]; } else { NSLog(@"Config not fetched"); NSLog(@"Error %@", error.localizedDescription); } [self displayWelcome]; }];
由于这些更新后的参数值会影响应用的行为和外观,因此您应该谨慎选择激活已提取的值的时机,以确保为用户提供流畅的体验,例如在用户下次打开您的应用时激活。如需了解更多信息和示例,请参阅 Remote Config 加载策略。
限制
如果应用在短时间内提取次数太多,则提取调用会受到限制,并且 SDK 会返回 FIRRemoteConfigFetchStatusThrottled
。在 SDK 6.3.0 版本之前,应用在 60 分钟的时间段内最多可以发送 5 次提取请求(在较新版本中,这些限制则较为宽松)。
在应用开发期间,您不妨非常频繁地(每小时多次)刷新缓存,这样可以在开发和测试应用的同时快速迭代。为了让具有众多开发者的项目快速迭代,您可以在应用中临时添加一个具有较短的最小提取间隔 (MinimumFetchInterval
) 的 FIRRemoteConfigSettings
属性。
Remote Config 默认和建议的生产提取间隔为 12 小时,这表示在 12 小时的时间段内,无论实际进行了多少次提取调用,最多只会从后端提取一次配置。具体而言,系统按以下顺序确定最小提取间隔:
fetch(long)
中的参数FIRRemoteConfigSettings.MinimumFetchInterval
中的参数- 默认值 12 小时
后续步骤
浏览 Remote Config 用例并查看一些关键的概念和高级策略文档(如果您尚未这样做),包括: