使用 Firebase 遠端設定檢測您的 Unity 遊戲

一、簡介

您可以使用 Firebase Remote Config 在應用程式中定義鍵值對(也稱為參數)並在雲端中更新其值,從而允許您修改應用程式的外觀和行為,而無需分發應用程式更新。

您將將此新功能新增至範例遊戲MechaHamster: Level Up with Firebase Edition 。此範例遊戲是經典 Firebase 遊戲 MechaHamster 的新版本,刪除了大部分內建 Firebase 功能,讓您有機會在原來的位置實現 Firebase 的新用途。

為了確保您的應用程式按預期運行,您將為範例遊戲程式碼中的值設定預設配置,並且這些值可以被您在 Firebase 控制台 的 Remote Config 中設定的值覆蓋。

你將學到什麼

  • 如何在雲端中設定遠端配置值並檢索它們
  • 如何偵測 Unity C# 程式碼以自動使用擷取的值
  • 如何將複合值/物件儲存、偵測和覆寫為 JSON 值
  • 如何使用遠端配置條件為不同的使用者群組提供不同的值變體

你需要什麼

  • Unity 2019.1.0f1 或更高版本,支援 iOS 和/或 Android 構建
  • 用於建構和運行遊戲的實體Android/iOS設備或模擬器/模擬器

2. 設定您的開發環境

以下部分介紹如何下載Level Up with Firebase程式碼、在 Unity 中開啟它並新增 Firebase 專案。此 Level Up with Firebase 範例遊戲已被其他幾個 Firebase + Unity Codelab 使用,因此您可能已經完成了本部分中的任務。如果是這樣,您可以跳過這些步驟並繼續添加適用於 Unity 的 Firebase SDK 以將遠端設定新增至範例遊戲程式碼。

下載程式碼

從命令列克隆此 Codelab 的GitHub 儲存庫

git clone https://github.com/firebase/level-up-with-firebase

或者,如果您沒有安裝 git,則可以將儲存庫下載為 ZIP 檔案

在 Unity 編輯器中使用 Firebase 開啟 Level Up

  1. 啟動 Unity Hub,然後從「專案」標籤中按一下「開啟」旁邊的下拉箭頭
  2. 按一下從磁碟新增項目
  3. 導航至包含程式碼的目錄,然後按一下「確定」
  4. 如果出現提示,請選擇要使用的 Unity 編輯器版本以及您的目標平台(Android 或 iOS)。
  5. 按一下專案名稱level-up-with-firebase ,該專案將在 Unity 編輯器中開啟。
  6. 如果您的編輯器沒有自動開啟它,請在 Unity 編輯器的「專案」標籤中的「資源」 > “Hamster”中開啟MainGameScene

有關安裝和使用 Unity 的更多信息,請參閱在 Unity 中工作

3. 將 Firebase 新增到您的 Unity 項目

創建 Firebase 項目

  1. Firebase 控制台中,按一下新增項目
  2. 若要建立新項目,請輸入所需的項目名稱。
    這也將根據項目名稱將項目 ID(顯示在項目名稱下方)設定為某些內容。您可以選擇單擊項目 ID 上的編輯圖示以進一步自訂它。
  3. 如果出現提示,請查看並接受Firebase 條款
  4. 單擊繼續
  5. 選擇為此項目啟用 Google Analytics選項,然後按一下繼續
  6. 選擇要使用的現有 Google Analytics 帳戶,或選擇建立新帳戶來建立新帳戶。
  7. 點選建立項目
  8. 建立項目後,按一下「繼續」

向 Firebase 註冊您的應用

  1. 開啟Firebase 控制台,然後從項目概述頁面的中心點擊 Unity 圖示以啟動設定工作流程,或者,如果您已將應用程式新增至 Firebase 項目,請按一下新增應用程式以顯示平台選項。
  2. 選擇註冊 Apple (iOS) 和 Android 建置目標。
  3. 輸入 Unity 專案的平台特定 ID。對於此 Codelab,請輸入以下內容:
  4. (可選)輸入 Unity 項目的平台特定暱稱。
  5. 點擊註冊應用程式並繼續下載設定檔部分。
  6. 對第一次未執行的建置目標重複此程序。

新增 Firebase 設定檔

點擊Register app後,系統將提示您下載兩個設定檔(每個建置目標一個設定檔)。您的 Unity 專案需要這些檔案中的 Firebase 元資料才能與 Firebase 連線。

  1. 下載兩個可用的設定檔:
    • 對於 Apple (iOS) :下載GoogleService-Info.plist
    • 對於 Android :下載google-services.json
  2. 開啟 Unity 專案的「專案」窗口,然後將兩個設定檔移至Assets資料夾。
  3. 返回 Firebase 控制台的設定工作流程中,按一下下一步並繼續新增適用於 Unity 的 Firebase SDK。

注意:您可以隨時重新下載這些文件,方法是開啟專案的常規設置,向下捲動到您的應用程式部分,然後按一下所需設定檔的下載按鈕。

新增適用於 Unity 的 Firebase SDK

  1. 按一下 Firebase 控制台中的「下載 Firebase Unity SDK」
  2. 將 SDK 解壓縮到方便的地方。
  3. 在開啟的 Unity 專案中,導覽至Assets > Import Package > Custom Package
  4. 「導入套件」對話方塊中,導覽至包含解壓縮的 SDK 的目錄,選擇FirebaseAnalytics.unitypackage ,然後按一下「開啟」
  5. 在出現的「匯入 Unity 套件」對話方塊中,按一下「匯入」
  6. 重複前面的步驟導入以下兩個包:
    • FirebaseRemoteConfig.unitypackage
    • FirebaseCrashlytics.unitypackage
      Crashlytics 是一款輕量級的即時崩潰報告程序,可協助您追蹤、確定優先順序並修復影響應用程式品質的穩定性問題。如果您以前沒有使用過它,請考慮完成Unity 的 Crashlytics 學習路徑
  7. 返回 Firebase 控制台,然後在設定工作流程中按一下「下一步」

有關將 Firebase SDK 添加到 Unity 專案的更多信息,請參閱其他 Unity 安裝選項

4. 設定遠端配置預設值並取得新值

在此 Codelab 中,您將更新使用程式碼中定義的值或在 Unity 編輯器中序列化的對象,以使用透過 Remote Config 檢測的值。您將使用SetDefaultsAsync配置每個參數的預設值,以便您的應用程式在連接到遠端配置後端之前按預期運行。您的應用程式將透過從遠端配置獲取新值並啟動它們以使其可在程式碼中使用來保持最新狀態。

若要從遠端配置取得新值, Assets/Hamster/Scripts/MainGame.cs檔案中已存在許多未實作的方法,必須完成這些方法。

  1. 將以下using語句加入MainGame.cs
    using Firebase.Crashlytics;
    using Firebase.Extensions;
    using Firebase.RemoteConfig;
    
    Firebase.Extensions模組包含對C# 任務 API 的一些擴展,這將有助於簡化使用回呼管理初始化過程。
  2. 將 Firebase 初始化加入MainGame.cs Start()方法中,方法是將現有的 InitializeCommonDataAndStartGame() 方法替換為目前未實作的方法InitializeFirebaseAndStartGame()
    void Start()
    {
       Screen.SetResolution(Screen.width / 2, Screen.height / 2, true);
       InitializeFirebaseAndStartGame();
    }
    
  3. MainGame.cs中,找到InitializeFirebaseAndStartGame() 。宣告一個 app 變數並覆寫該方法的實現,如下所示:
    public Firebase.FirebaseApp app = null;
    
    // Begins the firebase initialization process and afterwards, opens the main menu.
    private void InitializeFirebaseAndStartGame()
    {
       Firebase.FirebaseApp.CheckAndFixDependenciesAsync()
       .ContinueWithOnMainThread(
          previousTask =>
          {
             var dependencyStatus = previousTask.Result;
             if (dependencyStatus == Firebase.DependencyStatus.Available) {
             // Create and hold a reference to your FirebaseApp,
             app = Firebase.FirebaseApp.DefaultInstance;
             // Set the recommended Crashlytics uncaught exception behavior.
             Crashlytics.ReportUncaughtExceptionsAsFatal = true;
             SetRemoteConfigDefaults();
             } else {
             UnityEngine.Debug.LogError(
                $"Could not resolve all Firebase dependencies: {dependencyStatus}\n" +
                "Firebase Unity SDK is not safe to use here");
             }
          });
    }
    
  4. Firebase 初始化在成功時呼叫SetRemoteConfigDefaults以設定應用程式內預設值。將未實作的 SetRemoteConfigDefaults 方法替換為以下內容:
    private void SetRemoteConfigDefaults()
    {
       var defaults = new System.Collections.Generic.Dictionary < string, object > ();
       defaults.Add(
          Hamster.MapObjects.AccelerationTile.AccelerationTileForceKey,
          Hamster.MapObjects.AccelerationTile.AccelerationTileForceDefault);
       defaults.Add(
          Hamster.States.MainMenu.SubtitleOverrideKey,
          Hamster.States.MainMenu.SubtitleOverrideDefault);
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       remoteConfig.SetDefaultsAsync(defaults).ContinueWithOnMainThread(
          previousTask =>
          {
             FetchRemoteConfig(InitializeCommonDataAndStartGame);
          }
       );
    }
    

5. 取得並啟動新值(根據需要)

我們現在需要完成現有的FetchRemoteConfig方法。這將使用名為onFetchAndActivateSuccessful的回呼參數連結呼叫遠端配置的方法FetchAsync (從遠端配置取得新值)和ActivateAsync (啟動這些取得的值以使其在程式碼中可用)。

我們在上一個步驟中新增的啟動程式碼呼叫FetchRemoteConfig並使用InitializeCommonDataAndStartGame作為其回調,以便在序列末尾啟動遊戲。您可以將替代回呼傳遞給FetchRemoteConfig ,以便呼叫具有不同結果的提取。一個範例(您將在稍後實現)是傳入一個開啟新 UI 選單的方法,該選單取決於遠端配置值。這將導致選單僅在獲取並啟動這些值後打開。

  1. 將以下程式碼貼到FetchRemoteConfig中:
    public void FetchRemoteConfig(System.Action onFetchAndActivateSuccessful)
    {
       if(app==null)
       {
          Debug.LogError($"Do not use Firebase until it is properly initialized by calling {nameof(InitializeFirebaseAndStartGame)}.");
          return;
       }
    
       Debug.Log("Fetching data...");
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       remoteConfig.FetchAsync(System.TimeSpan.Zero).ContinueWithOnMainThread(
          previousTask=>
          {
             if (!previousTask.IsCompleted)
             {
             Debug.LogError($"{nameof(remoteConfig.FetchAsync)} incomplete: Status '{previousTask.Status}'");
             return;
             }
             ActivateRetrievedRemoteConfigValues(onFetchAndActivateSuccessful);
          });
    }
    
  2. 接下來,完成ActivateRetrievedRemoteConfigValues方法,該方法接收傳入的回呼onFetchAndActivateSuccessful 。啟動完成後,將呼叫指定的回呼:
    private void ActivateRetrievedRemoteConfigValues(System.Action onFetchAndActivateSuccessful)
    {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       var info = remoteConfig.Info;
       if(info.LastFetchStatus == LastFetchStatus.Success)
       {
          remoteConfig.ActivateAsync().ContinueWithOnMainThread(
             previousTask =>
             {
             Debug.Log($"Remote data loaded and ready (last fetch time {info.FetchTime}).");
             onFetchAndActivateSuccessful();
             });
       }
    }
    

SetRemoteConfigDefaults從初始化上下文向下游呼叫時, ActivateRetrievedRemoteConfigValues會呼叫先前的起點InitializeCommonDataAndStartGame來透過開啟主選單來啟動遊戲。

6. 設定Remote Config載入策略

要在使用應用程式期間的其他時間取得並啟動值,您需要再次呼叫這些函數,並且如果任何物件已快取這些值,則必須通知它們執行更新。為了製定重新獲取遠端配置值的策略,請考慮何時需要新值以及何時啟動新值的獲取和激活,以避免它們在使用時發生更改。

按照目前的實施方式,當應用程式啟動時,將獲取並啟動遠端配置值。可以在選單變更期間隱藏獲取,同時還可以在轉換期間阻止互動。此外,這通常是獲取新值的最相關時間,因為選單狀態的變化通常可用於了解玩家要去「哪裡」並預測將使用某個值。

縱觀 Mechahamster 的選單系統,添加 UI 阻止選單刷新的最簡單方法是在主選單恢復之前呼叫它(特別是當透過退出另一個選單來存取它時),並將 UI 顯示方法作為onFetchAndActivateSuccessful回調傳遞。對於“級別選擇”選單也可以執行相同的操作。

將初始載入作為應用程式啟動的一部分,任何經過主選單的選單導航都將由第一個選單處理,而任何重新進入層級選擇選單也將導致刷新。最初進入關卡選擇選單並不重要,因為它只能從主選單訪問,因此已經被覆蓋。

要在應用程式中啟用此功能,請完成主選單和層級選擇檔案中的相關方法,這將阻止 UI 顯示,直到FetchAsyncActivateAsync完成:

  1. 開啟Assets/Hamster/Scripts/States/MainMenu.cs並將現有的Resume方法替換為以下內容:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.SelectAndPlayMusic(CommonData.prefabs.menuMusic, true);
       CommonData.mainGame.FetchRemoteConfig(InitializeUI);
    }
    
  2. 儲存文件。
  3. 開啟Assets/Hamster/Scripts/States/BaseLevelSelect.cs ,將現有的Resume方法替換為以下內容:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.FetchRemoteConfig(ShowUI);
    }
    
  4. 儲存文件。

7. 調試/驗證獲取行為

此時,進行診斷/驗證檢查是有益的。以下過程將允許您手動測試您的應用程式以及它如何/是否獲取和啟動遠端配置值。

這些資訊將作為模擬器、設備或編輯器日誌的一部分列印。對於 iOS,您可以在 Xcode 中查看裝置和模擬器日誌。對於 Android,透過執行adb logcat查看日誌。如果您透過在編輯器中按 Play 來執行 Unity 中的程式碼,日誌將顯示在「控制台」標籤中。

  1. 重建並運行應用程式(在編輯器中,使用設備或模擬器)。
  2. 遊戲的主選單出現後,查看遊戲的日誌輸出,其中應包含FetchRemoteConfigActivateRetrievedRemoteConfigValues中的Debug.Log產生的日誌。這些應該顯示“正在獲取資料...”和“遠端資料已載入並準備就緒”訊息。請注意這些訊息開頭的時間戳記。
  3. 在遊戲中,按許可證
  4. 確定
  5. 等待遊戲的主選單出現。
  6. 檢查遊戲的日誌輸出,它應該與先前步驟中的日誌輸出類似,並帶有新的時間戳記(與運行遊戲的系統時鐘上設定的時間相符)。
  7. 在遊戲中,按「開始」
  8. “開始吧”
  9. 使用鍵盤箭頭將球引導至球門,這將開啟「關卡完成」功能表。
  10. 等級
  11. 等待等級選擇選單載入。
  12. 再次查看遊戲的日誌輸出。它應該與先前步驟中的日誌訊息和較新的時間戳記相符(與運行遊戲的系統時鐘上設定的時間相符)。

如果其中任何一個沒有出現在您的應用程式中,則提取和啟動流程(或您的裝置)的某些部分可能配置錯誤。如果第一個日誌沒有出現,您的遊戲可能無法啟動。查看編輯器控制台或設備/模擬器日誌中有關您的項目/環境的警告和錯誤並進行調查 - 問題可能就像連接到互聯網一樣簡單。

如果載入選單的初始日誌出現,但後續日誌之一沒有出現,請調查/重新實作Assets/Hamster/Scripts/States/MainMenu.csAssets/Hamster/Scripts/States/BaseLevelSelect.cs中的Resume方法。

8. 偵測你的程式碼

現在,您已在SetDefaultsAsync()中配置了應用程式內參數值,並透過FetchAsync()ActivateAsync()提供了最新版本,您將在程式碼中引用和使用這些值。

在遠端配置後端設定值、取得它們並啟動它們(或同時執行這兩項操作)後,這些值可供您的應用程式使用。若要使用這些值,請呼叫GetValue(string key ) ,並選擇參數鍵作為參數。這會傳回一個ConfigValue ,它具有用於存取各種受支援類型的值的屬性: stringboollongdouble 。在此專案和大多數遊戲用例中,您必須將最後兩種類型轉換為更慣用的intfloat 。為了確保這些轉換不會導致問題,請確保遠端配置中設定的初始值位於您將在應用程式碼中使用的類型的有效範圍內。

  1. 透過using Firebase.RemoteConfig;到以下文件的頂部:
    • Assets/Hamster/Scripts/States/MainMenu.cs
    • Assets/Hamster/Scripts/MapObjects/AccelerationTile.cs
  2. 取代AccelerationTile.csStart方法:
    private void Start() {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       Acceleration = (float)remoteConfig.GetValue(AccelerationTileForceKey).DoubleValue;
    }
    
    透過此更改,加速圖塊施加的力值將更改為從遠端配置接收的力值。
  3. 編輯MainMenu.csInitializeUI方法的主體:
    private void InitializeUI() {
       if (menuComponent == null) {
          menuComponent = SpawnUI<Menus.MainMenuGUI>(StringConstants.PrefabMainMenu);
       }
    
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       var subtitleOverride = JsonUtility.FromJson<Menus.MainMenuGUI.SubtitleOverride>(
          remoteConfig.GetValue(SubtitleOverrideKey).StringValue);
       // Only sets values if all fields of the override are non-default.
       if(subtitleOverride != null && subtitleOverride.IsValidOverride())
       {
          menuComponent.MenuSubtitleText.text = subtitleOverride.text;
          menuComponent.MenuSubtitleText.fontSize = subtitleOverride.fontSize;
          menuComponent.MenuSubtitleText.color = subtitleOverride.textColor;
       }
       ShowUI();
    }
    
    此處, subtitleOverride設定為更改主選單畫面上的副標題(如果其在雲端中的所有欄位都設定為其類型的預設值以外的值)。

9. 遠端設定參數值

現在您的應用程式已完全安裝完畢,您可以在遠端設定伺服器上設定參數和值。在此 Codelab 中,我們將使用 Firebase 控制台進行設定。

  1. Firebase 控制台中,開啟您的專案。
  2. 從選單中選擇遠端配置以查看遠端配置儀表板。
  3. 對於您在應用程式中定義並在下表中列出的每個參數,按一下新增參數,貼上參數名稱(鍵),選擇表中列出的資料類型,停用使用應用程式內預設值並貼上新的預設值:

    參數名稱(鍵)

    資料類型

    預設值

    加速度瓦力

    數位

    100

    字幕覆蓋

    JSON

    {"text":"We overwrote the subtitle","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}

    Remote Config Parameter editor with\nacceleration_tile_force populated
  4. 點擊“儲存”以儲存您的變更。
  5. 按一下「發布」以發布新配置並使新值可用於您的遊戲。
  6. 設定這些遠端參數後再次運行您的應用程序,並觀察它們如何覆蓋原始預設值。 Mechahamster main screen with Debug\nMenu enabled

10.使用遠端配置條件來服務變體

您可能希望根據使用者使用的語言、所在位置、一天中的時間或使用的平台來滿足使用者的應用程式體驗。遠端配置條件可讓您單獨或組合使用這些屬性和其他屬性,為使用者提供不同的值(稱為變體)。

條件的常見用途是在 iOS 和 Android 平台之間更改內容。請依照以下步驟實作一個條件,根據所使用的平台為subtitle_override提供不同的值。

  1. Firebase 控制台中開啟專案的「遠端設定」標籤。
  2. 點選subtitle_override.
  3. 在左下角,按一下新增新的
  4. 在出現的下拉清單中,將滑鼠懸停在條件值上,然後按一下建立新條件。 Remote Config parameter editor:\nConditional value option
  5. 出現提示時,如果您的目標是 iOS,則將條件命名為「is iOS」;如果您的目標是 Android,則將條件命名為「is Android」。如果您的目標是兩者,只需在此處選擇一個並將其用於 Codelab 的其餘部分。 Using the Define a new condition\ndialog to define an iOS-specific condition
  6. “適用於...”下,按一下“選擇...”下拉清單並選擇“平台” 。然後,選擇合適的平台。 Using the Define a new condition\neditor to select the iOS platform
  7. 按一下建立條件以建立條件。編輯參數對話框再次出現,您現在可以設定一個值:
    • 如果您面向 Android,請將設為:
      {"text":"Level Up Android Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
    • 如果您的目標是 iOS,請將設為:
      {"text":"Level Up iOS Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
  8. 點擊“儲存”以儲存您的變更。
  9. 按一下「發布」以發布新配置並使新值可用於您的遊戲。

如果您再次建造並運行遊戲,您應該會看到遊戲的副標題被替換為特定於平台的變體。

11. 配置 Remote Config 以接收即時更新

遠端配置現在可以即時監聽並處理遠端配置模板的更新。應用程式可以訂閱新的即時遠端配置 API 以偵聽配置變更和更新值。

怎麼運作的

若要偵聽更新,您的應用程式必須實作訂閱OnConfigUpdateListener事件的方法。當訂閱一個或多個配置更新偵聽器時,將自動取得新的遠端配置模板,呼叫訂閱的處理程序並可用於執行回應邏輯,例如啟動新值並使它們可供應用程式的其餘部分使用。

實施即時遠端配置

為了說明其在遊戲中的工作原理,請對您的程式碼進行以下更改。

建立配置更新處理程序

使用配置更新事件的第一步是建立一個能夠偵聽該事件的方法。將以下方法放入Assets/Hamster/Scripts/MainGame.cs中:

   void ActivateValuesOnConfigUpdate( object sender, ConfigUpdateEventArgs args)
   {
      if (args.Error != RemoteConfigError.None) {
         Debug.Log($"Error occurred while listening: {args.Error}");
         return;
      }

      Debug.Log("Updated keys: " + string.Join(", ", args.UpdatedKeys));
      // Activate all fetched values and then logs.
      var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
      remoteConfig.ActivateAsync().ContinueWithOnMainThread(
         task => {
            Debug.Log($"Keys from {nameof(ActivateValuesOnConfigUpdate)} activated.");
         });
   }

當啟動新值時,此方法將在日誌中列印更新的鍵列表和成功訊息。

訂閱更新事件

為了在呼叫該事件時啟動ActivateValuesOnConfigUpdate ,請訂閱該事件。將Assets/Hamster/Scripts/MainGame.cs中的InitializeCommonDataAndStartGame()方法替換為以下內容:

   void InitializeCommonDataAndStartGame()
   {
      CommonData.prefabs = FindObjectOfType<PrefabList>();
      CommonData.mainCamera = FindObjectOfType<CameraController>();
      CommonData.mainGame = this;

      Screen.orientation = ScreenOrientation.LandscapeLeft;

      musicPlayer = CommonData.mainCamera.GetComponentInChildren<AudioSource>();

      CommonData.gameWorld = FindObjectOfType<GameWorld>();

      // Set up volume settings.
      MusicVolume = PlayerPrefs.GetInt(StringConstants.MusicVolume, MaxVolumeValue);
      // Set the music to ignore the listeners volume, which is used for sound effects.
      CommonData.mainCamera.GetComponentInChildren<AudioSource>().ignoreListenerVolume = true;
      SoundFxVolume = PlayerPrefs.GetInt(StringConstants.SoundFxVolume, MaxVolumeValue);

      // Subscribes to on config update after first initial fetch and activate
      FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener += ActivateValuesOnConfigUpdate;

      stateManager.PushState(new States.MainMenu());
   }

新行(以+= ActivateValuesOnConfigUpdate;結尾)將事件處理程序訂閱到該事件。

當處理程序所屬的物件被銷毀時取消訂閱

為了防止空引用錯誤,具有訂閱事件方法的物件在銷毀時必須取消訂閱該方法。將以下方法加入Assets/Hamster/Scripts/MainGame.cs

   private void OnDestroy() 
   {
      FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener -= ActivateValuesOnConfigUpdate;
   }

測試新功能

若要驗證新功能,請嘗試您建立的應用程式。以下過程要求您可以使用真實設備讀取日誌並進行偵錯

改變acceleration_tile_force並觀察

啟動應用程式後,在 Firebase 控制台的「遠端設定」部分

  1. acceleration_tile_force旁邊的編輯按鈕。

dc602d4db54e50a4.png

  1. 將值變更為“120”並按“儲存”

fcbc1df848f88009.png

  1. 按一下“發布更改”按鈕。

3785c1e00e7a6359.png

  1. 檢查日誌。
  2. 如果您看到以「偵聽時發生錯誤」開頭的日誌訊息,請閱讀其餘部分並嘗試使用它列印的錯誤訊息進行偵錯。
  3. 如果您看到以「更新的金鑰」開頭的日誌,則您的應用程式已收到更改的值。
  4. 如果您沒有看到這些,請查看其餘日誌,然後重新查看建立配置更新處理程序中的說明,重新測試並重新檢查日誌以確定是否有任何問題。

12. 恭喜!

您已經使用遠端配置來遠端控制遊戲中的值,方法是在您的應用程式中獲取它們並使用條件來提供不同的變體!

我們涵蓋的內容

  • 如何設定和檢索遠端配置值
  • 如何偵測 Unity C# 程式碼以使用檢索到的值
  • 如何將複合值/物件儲存、偵測和覆寫為 JSON 值
  • 如何使用遠端配置條件來提供不同的值變體

下一步

閱讀參數值優先級,以便更好地了解當應用程式實例使用具有多個值的參數(由於條件或位置)時,應用程式實例會取得哪些值的邏輯。