Firebase 遠端配置入門


您可以使用 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:設定參數值

  1. Firebase 控制台中,開啟您的專案。
  2. 從選單中選擇遠端配置以查看遠端配置儀表板。
  3. 定義與您在應用程式中定義的參數同名的參數。對於每個參數,您可以設定預設值(最終將覆蓋應用程式內預設值)和條件值。要了解更多信息,請參閱遠端配置參數和條件

第 5 步:取得並啟動值(根據需要)

若要從遠端配置後端取得參數值,請呼叫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()之前才可用。這可以讓您確保新值不會在計算過程中應用,或在其他可能導致問題或奇怪行為的時間應用。

第 6 步:監聽即時更新

取得參數值後,您可以使用即時遠端配置來偵聽來自遠端配置後端的更新。當有更新可用時,即時遠端設定會向連接的裝置發出訊號,並在您發布新的遠端設定版本後自動取得變更。

適用於 Android 和 Apple 平台的 Firebase Unity SDK v11.0.0+ 及更高版本支援即時更新。

  1. 在您的應用程式中,新增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;
}

下次您發布新版本的遠端配置時,執行您的應用程式並偵聽更改的裝置將呼叫完成處理程序。

下一步

如果您還沒有,請探索遠端配置用例,並查看一些關鍵概念和高級策略文檔,包括: