您可以使用 Firebase Remote Config 在應用程式中定義參數並在雲端中更新其值,從而無需分發應用程式更新即可修改應用程式的外觀和行為。
遠端配置庫用於儲存應用程式內預設參數值、從遠端配置後端取得更新的參數值,以及控制何時將取得的值提供給您的應用程式。要了解更多信息,請參閱遠端配置載入策略。
本指南將引導您完成入門步驟並提供一些範例程式碼,所有這些程式碼都可以從firebase/quickstart-unity GitHub 儲存庫複製或下載。
第 1 步:將遠端配置新增至您的應用程式
在使用遠端配置之前,您需要:
註冊您的 Unity 專案並將其配置為使用 Firebase。
如果您的 Unity 專案已使用 Firebase,則它已針對 Firebase 進行註冊和設定。
如果您沒有 Unity 項目,可以下載範例應用程式。
將Firebase Unity SDK (具體來說,
FirebaseRemoteConfig.unitypackage
)加入您的 Unity 專案。
請注意,將 Firebase 新增至 Unity 專案涉及Firebase 控制台和開啟的 Unity 專案中的任務(例如,從控制台下載 Firebase 設定文件,然後將它們移至 Unity 專案中)。
第 2 步:設定應用程式內預設參數值
您可以在遠端配置物件中設定應用程式內預設參數值,以便您的應用程式在連接到遠端配置後端之前按預期運行,並且如果後端未設定預設值,則預設值可用。
為此,請建立一個字串字典,並使用表示要新增的預設值的鍵/值對填入它。如果您已經配置了遠端配置後端參數值,則可以下載包含這些鍵/值對的檔案並使用它來建構字串字典。有關更多信息,請參閱下載遠端配置範本預設值。
(當呼叫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 步:取得要在應用程式中使用的參數值
現在您可以從遠端配置物件取得參數值。如果您在遠端配置後端設定值,取得它們,然後啟動它們,則這些值可供您的應用程式使用。否則,您將取得使用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:即時監聽更新
取得參數值後,您可以使用即時遠端配置來偵聽來自遠端配置後端的更新。當更新可用時,即時遠端設定會向連接的裝置發出訊號,並在您發布新的遠端設定版本後自動取得變更。
適用於 Android 和 Apple 平台的 Firebase Unity SDK v11.0.0+ 及更高版本支援即時更新。
- 在您的應用程式中,新增
OnConfigUpdateListener
以開始偵聽更新並自動取得任何新的或更新的參數值。然後,建立一個ConfigUpdateListenerEventHandler
來處理更新事件。以下範例偵聽更新並使用新取得的值來顯示更新的歡迎訊息。
// Invoke the listener. void Start() { Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener += ConfigUpdateListenerEventHandler; } // Handle real-time Remote Config events. void ConfigUpdateListenerEventHandler( object sender, Firebase.RemoteConfig.ConfigUpdateEventArgs args) { if (args.Error != Firebase.RemoteConfig.RemoteConfigError.None) { Debug.Log(String.Format("Error occurred while listening: {0}", args.Error)); return; } Debug.Log("Updated keys: " + string.Join(", ", args.UpdatedKeys)); // Activate all fetched values and then display a welcome message. remoteConfig.ActivateAsync().ContinueWithOnMainThread( task => { DisplayWelcomeMessage(); }); } // Stop the listener. void OnDestroy() { Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener -= ConfigUpdateListenerEventHandler; }
下次您發布新版本的遠端配置時,執行您的應用程式並偵聽更改的裝置將呼叫完成處理程序。
Next steps
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: