您可以使用 Firebase Remote Config 在您的应用程序中定义参数并在云端更新它们的值,从而允许您修改应用程序的外观和行为而无需分发应用程序更新。
Remote Config 库用于存储应用内默认参数值、从 Remote Config 后端获取更新的参数值,以及控制获取的值何时可用于您的应用。要了解更多信息,请参阅远程配置加载策略。
本指南将引导您完成入门步骤并提供一些示例代码,所有这些代码都可以从firebase/quickstart-unity GitHub 存储库中克隆或下载。
第 1 步:将远程配置添加到您的应用
在使用Remote Config之前,您需要:
注册您的 Unity 项目并将其配置为使用 Firebase。
如果您的 Unity 项目已经使用 Firebase,那么它已经针对 Firebase 进行了注册和配置。
如果您没有 Unity 项目,可以下载示例应用程序。
将Firebase Unity SDK (特别是
FirebaseRemoteConfig.unitypackage
)添加到您的 Unity 项目。
请注意,将 Firebase 添加到您的 Unity 项目涉及Firebase 控制台和您打开的 Unity 项目中的任务(例如,您从控制台下载 Firebase 配置文件,然后将它们移动到您的 Unity 项目中)。
第 2 步:设置应用内默认参数值
您可以在 Remote Config 对象中设置应用内默认参数值,以便您的应用在连接到 Remote Config 后端之前按预期运行,并且如果没有在后端设置默认值,则默认值可用。
为此,创建一个字符串字典,并用代表您要添加的默认值的键/值对填充它。如果您已经配置了 Remote Config 后端参数值,您可以下载包含这些键/值对的文件并使用它来构建您的字符串字典。有关详细信息,请参阅下载远程配置模板默认值。
(调用SetDefaultsAsync()
时,非字符串属性将转换为属性的类型)。
System.Collections.Generic.Dictionary<string, object> defaults = new System.Collections.Generic.Dictionary<string, object>(); // These are the values that are used if we haven't fetched data from the // server // yet, or if we ask for values that the server doesn't have: defaults.Add("config_test_string", "default local string"); defaults.Add("config_test_int", 1); defaults.Add("config_test_float", 1.0); defaults.Add("config_test_bool", false); Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.SetDefaultsAsync(defaults) .ContinueWithOnMainThread(task => {
第 3 步:获取要在您的应用中使用的参数值
现在您可以从 Remote Config 对象中获取参数值。如果您在 Remote Config 后端设置值,获取它们,然后激活它们,则这些值可用于您的应用程序。否则,您将获得使用SetDefaultsAsync()
配置的应用内参数值。
要获取这些值,请使用GetValue()
并提供参数键作为参数。这将返回一个ConfigValue
,它具有将值转换为各种基本类型的属性。
第 4 步:在 Firebase 控制台中连接您的应用
在Firebase 控制台中,将您的应用程序添加到您的 Firebase 项目。
第 5 步:设置参数值
- 在Firebase 控制台中,打开您的项目。
- 从菜单中选择远程配置以查看远程配置仪表板。
- 使用与您在应用程序中定义的参数相同的名称定义参数。对于每个参数,您可以设置默认值(最终将覆盖应用内默认值)和条件值。要了解更多信息,请参阅远程配置参数和条件。
第 6 步:获取并激活值(根据需要)
要从远程配置后端获取参数值,请调用FetchAsync()
方法。您在后端设置的任何值都将被提取并缓存在远程配置对象中。
// Start a fetch request. // FetchAsync only fetches new data if the current data is older than the provided // timespan. Otherwise it assumes the data is "recent enough", and does nothing. // By default the timespan is 12 hours, and for production apps, this is a good // number. For this example though, it's set to a timespan of zero, so that // changes in the console will always show up immediately. public Task FetchDataAsync() { DebugLog("Fetching data..."); System.Threading.Tasks.Task fetchTask = Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.FetchAsync( TimeSpan.Zero); return fetchTask.ContinueWithOnMainThread(FetchComplete); }
在上面的代码中, FetchComplete
是一种方法,其签名与ContinueWithOnMainThread()
的重载之一的参数相匹配。
在下面的示例代码中, FetchComplete
方法传递了上一个任务 ( fetchTask
),这允许FetchComplete
确定它是否完成。该代码随后使用Info.LastFetchStatus
确定完成是否也成功。如果是这样,则使用activateAsync()
激活远程配置参数值。
private void FetchComplete(Task fetchTask) {
if (!fetchTask.IsCompleted) {
Debug.LogError("Retrieval hasn't finished.");
return;
}
var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
var info = remoteConfig.Info;
if(info.LastFetchStatus != LastFetchStatus.Success) {
Debug.LogError($"{nameof(FetchComplete)} was unsuccessful\n{nameof(info.LastFetchStatus)}: {info.LastFetchStatus}");
return;
}
// Fetch successful. Parameter values must be activated to use.
remoteConfig.ActivateAsync()
.ContinueWithOnMainThread(
task => {
Debug.Log($"Remote data loaded and ready for use. Last fetch time {info.FetchTime}.");
});
}
通过FetchAsync()
获取的值在获取完成时缓存在本地,但在调用ActivateAsync()
之前不可用。这使您能够确保新值不会在计算中应用,或者在其他可能导致问题或奇怪行为的时候应用。
第 7 步:(可选)启用开发者模式
要启用可用于在开发期间禁用节流的开发人员模式,您可以使用FirebaseRemoteConfig.Setting
属性,设置新的ConfigSettings
并将IsDeveloperMode
设置为 true。
下一步
If you haven't already, explore the Remote Config use cases , and take a look at some of the key concepts and advanced strategies documentation, including: