Lengkapi game Unity Anda dengan Firebase Remote Config

1. Pengantar

Anda dapat menggunakan Firebase Remote Config untuk menentukan key-value pair, yang juga dikenal sebagai parameter, di aplikasi Anda dan memperbarui nilainya di cloud, sehingga Anda dapat mengubah tampilan dan perilaku aplikasi tanpa mendistribusikan update aplikasi.

Anda akan menambahkan fungsi baru ini ke game contoh, MechaHamster: Level Up with Firebase Edition. Contoh game ini adalah versi baru dari game Firebase klasik MechaHamster yang menghapus sebagian besar fungsi Firebase bawaannya, sehingga Anda dapat mengimplementasikan penggunaan baru Firebase sebagai gantinya.

Untuk memastikan aplikasi Anda berperilaku seperti yang diinginkan, Anda perlu menetapkan konfigurasi default untuk nilai dalam contoh kode game, dan nilai ini dapat diganti dengan nilai yang Anda tetapkan di Remote Config di Firebase console.

Yang akan Anda pelajari

  • Cara menetapkan nilai Remote Config di cloud dan mengambilnya
  • Cara menginstrumentasikan kode C# Unity untuk menggunakan nilai yang diambil secara otomatis
  • Cara menyimpan, menginstrumentasikan, dan mengganti nilai/objek gabungan sebagai nilai JSON
  • Cara menggunakan kondisi Remote Config untuk menyalurkan varian nilai yang berbeda ke berbagai grup pengguna

Yang Anda butuhkan

  • Unity 2019.1.0f1 atau yang lebih tinggi dengan dukungan build iOS dan/atau Android
  • Perangkat Android/iOS fisik atau simulator/emulator untuk membangun dan menjalankan game

2. Menyiapkan lingkungan pengembangan

Bagian berikut menjelaskan cara mendownload kode Level Up with Firebase, membukanya di Unity, dan menambahkan project Firebase. Contoh game Level Up with Firebase ini digunakan oleh beberapa codelab Firebase + Unity lainnya, jadi Anda mungkin sudah menyelesaikan tugas di bagian ini. Jika demikian, Anda dapat melewati langkah-langkah ini dan melanjutkan ke Menambahkan Firebase SDK untuk Unity guna menambahkan Remote Config ke kode game contoh.

Mendownload kode

Clone repositori GitHub codelab ini dari command line:

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

Atau, jika Anda belum menginstal git, Anda dapat mendownload repositori sebagai file ZIP.

Buka Level Up with Firebase di editor Unity

  1. Luncurkan Unity Hub dan, dari tab Project, klik panah drop-down di samping Open.
  2. Klik Add project from disk.
  3. Buka direktori yang berisi kode, lalu klik OK.
  4. Jika diminta, pilih versi editor Unity yang akan digunakan dan platform target Anda (Android atau iOS).
  5. Klik nama project, level-up-with-firebase, dan project akan terbuka di editor Unity.
  6. Jika editor Anda tidak otomatis membukanya, buka MainGameScene di Assets > Hamster di tab Project pada Unity Editor.

Untuk informasi selengkapnya tentang cara menginstal dan menggunakan Unity, lihat Bekerja di Unity.

3. Menambahkan Firebase ke project Unity

Membuat project Firebase

  1. Di Firebase console, klik Add project.
  2. Untuk membuat project baru, masukkan nama project yang diinginkan.
    Tindakan ini juga akan menetapkan project ID (yang ditampilkan di bawah nama project) ke sesuatu berdasarkan nama project. Jika ingin, Anda dapat mengklik ikon edit pada project ID untuk menyesuaikannya lebih lanjut.
  3. Jika diminta, tinjau dan setujui persyaratan Firebase.
  4. Klik Continue.
  5. Pilih opsi Enable Google Analytics for this project, lalu klik Continue.
  6. Pilih akun Google Analytics yang ada untuk digunakan atau pilih Buat akun baru untuk membuat akun baru.
  7. Klik Create project.
  8. Setelah project dibuat, klik Continue.

Mendaftarkan aplikasi ke Firebase

  1. Buka Firebase console dan, dari bagian tengah halaman ringkasan project, klik ikon Unity untuk meluncurkan alur kerja penyiapan atau, jika Anda sudah menambahkan aplikasi ke project Firebase, klik Add app untuk menampilkan opsi platform.
  2. Pilih untuk mendaftarkan target build Apple (iOS) dan Android.
  3. Masukkan ID khusus platform project Unity Anda. Untuk codelab ini, masukkan kode berikut:
    • Untuk Apple (iOS) - Masukkan com.google.firebase.level-up di kolom ID paket iOS.
    • Untuk Android - Masukkan com.google.firebase.level_up di kolom Android package name.
  4. Secara opsional, masukkan nama panggilan khusus platform project Unity Anda.
  5. Klik Register app dan lanjutkan ke bagian Download config file.
  6. Ulangi prosesnya untuk target build mana pun yang tidak Anda lakukan saat pertama kali.

Menambahkan File Konfigurasi Firebase

Setelah mengklik Register app, Anda akan diminta untuk mendownload dua file konfigurasi (satu file konfigurasi untuk setiap target build). Project Unity Anda memerlukan metadata Firebase dalam file ini agar dapat terhubung dengan Firebase.

  1. Download kedua file konfigurasi yang tersedia:
    • Untuk Apple (iOS): Download GoogleService-Info.plist.
    • Untuk Android: Download google-services.json.
  2. Buka jendela Project untuk project Unity Anda, lalu pindahkan kedua file konfigurasi ke folder Assets.
  3. Kembali ke Firebase console, di alur kerja penyiapan, klik Next dan lanjutkan ke Add Firebase SDK untuk Unity.

Catatan: Anda selalu dapat mendownload ulang file ini di lain waktu dengan membuka setelan umum project, men-scroll ke bawah ke bagian Your apps, lalu mengklik tombol download untuk file konfigurasi yang diinginkan.

Menambahkan Firebase SDK untuk Unity

  1. Klik Download Firebase Unity SDK di Firebase console.
  2. Ekstrak SDK di tempat yang mudah diakses.
  3. Pada Project Unity yang terbuka, buka Assets > Import Package > Custom Package.
  4. Di dialog Import package, buka direktori yang berisi SDK yang telah diekstrak, pilih FirebaseAnalytics.unitypackage, lalu klik Open.
  5. Dari dialog Import Unity Package yang muncul, klik Import.
  6. Ulangi langkah sebelumnya untuk mengimpor dua paket berikut:
    • FirebaseRemoteConfig.unitypackage
    • FirebaseCrashlytics.unitypackage
      Crashlytics adalah solusi pelaporan error yang ringan dan bekerja secara realtime untuk membantu Anda melacak, memprioritaskan, serta memperbaiki masalah stabilitas yang mengurangi kualitas aplikasi Anda. Jika Anda belum pernah menggunakannya, sebaiknya selesaikan Jalur Pembelajaran Crashlytics untuk Unity.
  7. Kembali ke Firebase console dan, di alur kerja penyiapan, klik Next.

Untuk informasi selengkapnya tentang menambahkan Firebase SDK ke project Unity, lihat Opsi penginstalan Unity tambahan.

4. Menetapkan default Remote Config dan mengambil nilai baru

Dalam codelab ini, Anda akan mengupdate objek yang menggunakan nilai yang ditentukan dalam kode atau diserialisasi di editor Unity untuk menggunakan nilai yang diinstrumentasikan dengan Remote Config. Anda akan mengonfigurasi nilai default untuk setiap parameter menggunakan SetDefaultsAsync agar aplikasi Anda berperilaku seperti yang diharapkan sebelum terhubung ke backend Remote Config. Aplikasi Anda akan selalu mendapatkan info terbaru dengan mengambil nilai baru dari Remote Config dan mengaktifkannya agar dapat digunakan dalam kode.

Untuk mengambil nilai baru dari Remote Config, ada sejumlah metode yang tidak diterapkan dan sudah ada di file Assets/Hamster/Scripts/MainGame.cs yang harus diselesaikan.

  1. Tambahkan pernyataan using berikut ke MainGame.cs:
    using Firebase.Crashlytics;
    using Firebase.Extensions;
    using Firebase.RemoteConfig;
    
    Modul Firebase.Extensions berisi beberapa ekstensi ke C# Tasks API yang akan membantu mempermudah pengelolaan proses inisialisasi dengan callback.
  2. Tambahkan inisialisasi Firebase ke metode MainGame.cs Start() Anda dengan mengganti metode InitializeCommonDataAndStartGame() yang ada dengan metode yang saat ini tidak diterapkan, InitializeFirebaseAndStartGame():
    void Start()
    {
       Screen.SetResolution(Screen.width / 2, Screen.height / 2, true);
       InitializeFirebaseAndStartGame();
    }
    
  3. Di MainGame.cs, temukan InitializeFirebaseAndStartGame(). Deklarasikan variabel aplikasi dan timpa implementasi metode sebagai berikut:
    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. Inisialisasi Firebase memanggil SetRemoteConfigDefaults jika berhasil untuk menetapkan nilai default dalam aplikasi. Ganti metode SetRemoteConfigDefaults yang tidak diterapkan dengan yang berikut ini:
    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. Ambil dan Aktifkan nilai baru (sesuai kebutuhan)

Sekarang kita perlu menyelesaikan metode FetchRemoteConfig yang ada. Tindakan ini akan merangkai panggilan ke metode Remote Config FetchAsync (yang mengambil value baru dari Remote Config) dan ActivateAsync (yang mengaktifkan nilai yang diperoleh tersebut agar tersedia dalam kode) menggunakan parameter callback bernama onFetchAndActivateSuccessful.

Kode startup yang telah kita tambahkan pada langkah sebelumnya memanggil FetchRemoteConfig dengan InitializeCommonDataAndStartGame sebagai callback-nya agar dapat memulai game di akhir urutan. Anda dapat meneruskan callback alternatif ke FetchRemoteConfig untuk memanggil pengambilan dengan hasil yang berbeda. Sebuah contoh (yang akan Anda terapkan nanti) adalah meneruskan metode yang membuka menu UI baru, yang bergantung pada nilai Remote Config. Ini akan menyebabkan menu terbuka hanya setelah nilai tersebut diambil dan diaktifkan.

  1. Tempelkan kode di bawah ini ke dalam 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. Selanjutnya, selesaikan metode ActivateRetrievedRemoteConfigValues, yang menerima callback yang diteruskan, onFetchAndActivateSuccessful. Setelah aktivasi selesai, callback yang ditentukan akan dipanggil:
    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();
             });
       }
    }
    

Saat dipanggil ke downstream oleh SetRemoteConfigDefaults dari konteks inisialisasi, ActivateRetrievedRemoteConfigValues akan memanggil titik awal sebelumnya, InitializeCommonDataAndStartGame, untuk memulai game dengan membuka menu utama.

6. Menyiapkan strategi pemuatan Remote Config

Untuk mengambil dan mengaktifkan nilai di lain waktu selama penggunaan aplikasi, Anda perlu memanggil fungsi ini lagi dan, jika ada objek yang telah menyimpan nilai dalam cache, objek tersebut harus diberi tahu untuk melakukan update. Untuk mengembangkan strategi guna mengambil ulang nilai Remote Config, pertimbangkan kapan nilai baru diperlukan serta kapan harus memulai pengambilan dan aktivasi nilai baru agar tidak berubah saat digunakan.

Seperti yang saat ini diterapkan, nilai Remote Config diambil dan diaktifkan saat aplikasi dimulai. Pengambilan dapat disembunyikan selama perubahan menu sekaligus memblokir interaksi selama transisi. Selain itu, ini sering kali menjadi waktu yang paling relevan untuk mendapatkan nilai baru, karena perubahan status menu sering kali dapat digunakan untuk mengetahui "ke mana" pemain pergi dan memprediksi bahwa sebuah nilai akan digunakan.

Melihat sistem menu Mechahamster, cara termudah untuk menambahkan pembaruan menu pemblokiran UI adalah dengan memanggilnya sebelum menu utama dilanjutkan (khususnya jika diakses dengan keluar dari menu lain) dan meneruskan metode tampilan UI sebagai callback onFetchAndActivateSuccessful. Hal yang sama dapat dilakukan untuk menu Pilihan Level.

Dengan pemuatan awal sebagai bagian dari startup aplikasi, setiap navigasi menu yang berjalan melalui menu utama akan ditangani oleh yang pertama, sementara setiap masuk kembali ke menu Pilihan Level juga akan menyebabkan pembaruan. Masuk awal ke menu pemilihan level tidak menjadi masalah karena hanya dapat diakses dari menu utama dan karenanya sudah dibahas.

Untuk mengaktifkannya di aplikasi, selesaikan metode yang relevan di menu utama dan file pilih level, yang akan memblokir tampilan UI hingga FetchAsync dan ActivateAsync selesai:

  1. Buka Assets/Hamster/Scripts/States/MainMenu.cs dan ganti metode Resume yang ada dengan metode berikut:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.SelectAndPlayMusic(CommonData.prefabs.menuMusic, true);
       CommonData.mainGame.FetchRemoteConfig(InitializeUI);
    }
    
  2. Simpan file.
  3. Buka Assets/Hamster/Scripts/States/BaseLevelSelect.cs, ganti metode Resume yang ada dengan metode berikut:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.FetchRemoteConfig(ShowUI);
    }
    
  4. Simpan file.

7. Men-debug/memvalidasi perilaku pengambilan

Pada tahap ini, sebaiknya lakukan pemeriksaan diagnostik/validasi. Prosedur berikut memungkinkan Anda menguji aplikasi secara manual serta bagaimana/apakah aplikasi tersebut mengambil dan mengaktifkan nilai Remote Config.

Informasi tersebut akan dicetak sebagai bagian dari log simulator, perangkat, atau editor Anda. Untuk iOS, Anda dapat melihat log perangkat dan simulator di Xcode. Untuk Android, lihat log dengan menjalankan adb logcat. Jika Anda menjalankan kode di Unity dengan menekan Play di editor, log akan muncul di tab Console.

  1. Build ulang dan jalankan aplikasi (di Editor, menggunakan perangkat atau simulator).
  2. Setelah Menu Utama game muncul, tinjau output log game Anda, yang seharusnya berisi log yang dibuat oleh Debug.Log dalam FetchRemoteConfig dan ActivateRetrievedRemoteConfigValues. Perintah ini akan menampilkan pesan "Mengambil data..." dan "Data jarak jauh dimuat dan siap". Catat stempel waktu di awal pesan ini.
  3. Di game, tekan License.
  4. Tekan Oke.
  5. Tunggu hingga Menu Utama game muncul.
  6. Tinjau output log game Anda, yang seharusnya mirip dengan yang ada di langkah sebelumnya, dengan stempel waktu baru (sesuai dengan waktu yang disetel di jam sistem tempat Anda menjalankan game).
  7. Di game, tekan Play.
  8. Tekan Let's Roll.
  9. Arahkan bola ke gawang dengan menggunakan panah keyboard, yang akan membuka menu Level Selesai.
  10. Tekan Level.
  11. Tunggu hingga menu Pilihan Level dimuat.
  12. Tinjau kembali output log game Anda. ID tersebut harus cocok dengan pesan log dari langkah sebelumnya, dengan stempel waktu yang lebih baru (sesuai dengan waktu yang disetel di jam sistem tempat Anda menjalankan game).

Jika salah satunya tidak muncul di aplikasi Anda, beberapa bagian dari alur pengambilan dan pengaktifan (atau perangkat Anda) mungkin salah dikonfigurasi. Jika log pertama tidak muncul, ada kemungkinan game Anda tidak akan dimulai. Tinjau konsol Editor atau log perangkat/emulator untuk melihat peringatan dan error tentang project/lingkungan Anda lalu selidiki. Masalahnya mungkin semudah terhubung ke internet.

Jika log awal dari pemuatan menu muncul, tetapi salah satu log berikutnya tidak muncul, selidiki/implementasikan kembali metode Resume di Assets/Hamster/Scripts/States/MainMenu.cs dan Assets/Hamster/Scripts/States/BaseLevelSelect.cs.

8. Menginstrumentasikan kode Anda

Setelah mengonfigurasi parameter value dalam aplikasi di SetDefaultsAsync() dan menyediakan versi terbaru dengan FetchAsync() dan ActivateAsync(), Anda akan mereferensikan dan menggunakan nilai tersebut dalam kode.

Setelah menetapkan nilai di backend Remote Config, ambil, dan mengaktifkannya (atau melakukan keduanya sekaligus), nilai tersebut akan tersedia untuk aplikasi Anda. Untuk menggunakan nilai ini, panggil GetValue(string key), lalu pilih kunci parameter sebagai argumen. Tindakan ini menampilkan ConfigValue, yang memiliki properti untuk mengakses nilai dari berbagai jenis yang didukung: string, bool, long, double. Dalam project ini dan sebagian besar kasus penggunaan game, Anda harus mentransmisikan dua jenis terakhir ke int dan float yang lebih idiomatis. Untuk memastikan konversi ini tidak menimbulkan masalah, pastikan nilai awal yang ditetapkan di Remote Config berada dalam rentang valid dari jenis yang akan Anda gunakan dalam kode aplikasi.

  1. Impor Remote Config dengan menambahkan using Firebase.RemoteConfig; ke bagian atas file berikut:
    • Assets/Hamster/Scripts/States/MainMenu.cs
    • Assets/Hamster/Scripts/MapObjects/AccelerationTile.cs
  2. Mengganti metode Start dari AccelerationTile.cs:
    private void Start() {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       Acceleration = (float)remoteConfig.GetValue(AccelerationTileForceKey).DoubleValue;
    }
    
    Dengan perubahan ini, jumlah gaya yang diberikan oleh kartu akselerasi akan diubah menjadi satu yang diterima dari Remote Config.
  3. Edit isi metode InitializeUI dari MainMenu.cs:
    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();
    }
    
    Di sini, subtitleOverride disetel untuk mengubah subtitel di layar menu utama jika semua kolomnya di cloud ditetapkan sebagai nilai selain nilai default jenisnya.

9. Menetapkan parameter value dari jarak jauh

Setelah aplikasi Anda sepenuhnya diinstrumentasi, Anda siap untuk mengonfigurasi parameter dan nilai di server Remote Config. Dalam codelab ini, kita akan menyiapkannya menggunakan Firebase console.

  1. Buka project Anda di Firebase console.
  2. Pilih Remote Config dari menu untuk melihat dasbor Remote Config.
  3. Untuk masing-masing parameter yang Anda tentukan di aplikasi dan yang tercantum dalam tabel berikut, klik Tambahkan parameter, tempel nama parameter (kunci), pilih Jenis data yang tercantum dalam tabel, nonaktifkan Gunakan default dalam aplikasi, lalu tempelkan nilai default baru:

    Nama parameter (kunci)

    Jenis data

    Nilai default

    percepatan_ubin_gaya

    Angka

    100

    penggantian_subtitel

    JSON

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

    Editor Parameter Remote Config dengan\nacceleration_til_force terisi
  4. Klik Simpan untuk menyimpan perubahan.
  5. Klik Publikasikan untuk memublikasikan konfigurasi baru dan menyediakan nilai baru untuk game Anda.
  6. Jalankan kembali aplikasi Anda setelah menyetel parameter jarak jauh ini dan amati bagaimana parameter tersebut mengganti setelan default aslinya.Layar utama Mechahamster dengan Debug\nMenu diaktifkan

10. Menggunakan kondisi Remote Config untuk menyalurkan varian

Anda mungkin ingin memberikan pengalaman aplikasi kepada pengguna berdasarkan bahasa yang mereka gunakan, di mana mereka berada, waktu, atau platform yang mereka gunakan. Kondisi Remote Config memberi Anda kemampuan untuk menggunakan atribut ini dan atribut lainnya secara terpisah atau bersama-sama untuk menampilkan nilai yang berbeda (yang disebut varian) kepada pengguna.

Satu penggunaan umum untuk kondisi adalah untuk mengubah konten antara platform iOS dan Android. Ikuti langkah-langkah di bawah ini untuk menerapkan kondisi yang menampilkan nilai berbeda untuk subtitle_override bergantung pada platform yang digunakan.

  1. Buka tab Remote Config project Anda di Firebase console.
  2. Klik tombol edit untuk subtitle_override.
  3. Di pojok kiri bawah, klik Tambahkan baru.
  4. Di drop-down yang muncul, arahkan kursor ke Nilai bersyarat, lalu klik Buat kondisi baru.Editor parameter Remote Config:\nOpsi nilai kondisional
  5. Saat diminta, beri nama kondisi "adalah iOS" jika Anda menargetkan iOS, atau "adalah Android" jika Anda menargetkan Android. Jika Anda menargetkan keduanya, cukup pilih salah satu di sini dan gunakan untuk bagian codelab lainnya.Menggunakan dialog Tetapkan kondisi baru\nuntuk menentukan kondisi khusus iOS
  6. Di bagian Berlaku jika..., klik drop-down Pilih..., lalu pilih Platform. Kemudian, pilih platform yang sesuai.Menggunakan editor Define a new condition\nuntuk memilih platform iOS
  7. Klik Buat kondisi untuk membuat kondisi. Dialog Edit parameter akan muncul kembali dan Anda kini dapat menetapkan nilai:
    • Jika Anda menargetkan Android, tetapkan Value ke:
      {"text":"Level Up Android Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
    • Jika Anda menargetkan iOS, tetapkan Value ke:
      {"text":"Level Up iOS Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
  8. Klik Simpan untuk menyimpan perubahan.
  9. Klik Publikasikan untuk memublikasikan konfigurasi baru dan menyediakan nilai baru untuk game Anda.

Jika Anda membangun dan menjalankan game lagi, Anda akan melihat subjudul game diganti dengan varian khusus platform.

11. Mengonfigurasi Remote Config untuk menerima update real-time

Remote Config kini dapat memproses dan menangani update pada template Remote Config secara real-time. Aplikasi dapat berlangganan Remote Config API real-time yang baru untuk memproses perubahan konfigurasi dan nilai yang diperbarui.

Cara kerjanya

Untuk memproses update, aplikasi Anda harus mengimplementasikan metode yang berlangganan peristiwa OnConfigUpdateListener. Meskipun satu atau beberapa pemroses update konfigurasi berlangganan, template Remote Config baru akan diambil secara otomatis, handler yang berlangganan akan dipanggil dan dapat digunakan untuk menjalankan logika sebagai respons, seperti mengaktifkan nilai baru dan menyediakannya untuk seluruh aplikasi.

Mengimplementasikan Remote Config real-time

Untuk menggambarkan cara kerjanya dalam game, buat perubahan berikut pada kode Anda.

Membuat pengendali Update Konfigurasi

Langkah pertama untuk menggunakan peristiwa Update Konfigurasi adalah membuat metode yang dapat memprosesnya. Tempatkan metode berikut di 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.");
         });
   }

Metode ini akan mencetak daftar kunci yang diperbarui dan pesan berhasil ke log saat mengaktifkan nilai baru.

Berlangganan acara Pembaruan

Untuk mengaktifkan ActivateValuesOnConfigUpdate saat peristiwa dipanggil, berlanggananlah ke peristiwa tersebut. Ganti metode InitializeCommonDataAndStartGame() di Assets/Hamster/Scripts/MainGame.cs dengan metode berikut:

   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());
   }

Baris baru (diakhiri dengan += ActivateValuesOnConfigUpdate;) membuat pengendali peristiwa berlangganan peristiwa tersebut.

Berhenti berlangganan saat objek yang memiliki pengendali dihancurkan

Untuk mencegah error referensi null, objek dengan metode yang berlangganan peristiwa harus menghentikan langganan metode tersebut saat dihancurkan. Tambahkan metode berikut ke Assets/Hamster/Scripts/MainGame.cs:

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

Menguji fungsi baru

Untuk memvalidasi fungsi baru, coba aplikasi yang sudah dibangun. Prosedur berikut mengharuskan Anda dapat membaca log dan men-debug menggunakan perangkat sebenarnya.

Ubah acceleration_tile_force dan amati

Setelah memulai aplikasi, di bagian Remote Config di Firebase console:

  1. Tekan tombol edit di samping acceleration_tile_force.

dc602d4db54e50a4.pngS

  1. Ubah nilai menjadi '120', lalu tekan Save.

fcbc1df848f88009.pngS

  1. Klik tombol Publikasikan Perubahan.

3785c1e00e7a6359.pngS

  1. Periksa log.
  2. Jika Anda melihat pesan log yang dimulai dengan "Error terjadi saat memproses", baca selengkapnya dan coba lakukan proses debug dengan pesan error yang dicetak.
  3. Jika Anda melihat log yang dimulai dengan "Kunci yang diperbarui", aplikasi Anda telah menerima nilai yang diubah.
  4. Jika tidak satu pun dari keduanya, periksa log Anda yang lain, lalu tinjau kembali petunjuk dari Buat pengendali Update Konfigurasi, uji ulang, dan periksa kembali log untuk menentukan apakah ada yang salah.

12. Selamat!

Anda telah menggunakan Remote Config untuk mengontrol nilai dalam game dari jarak jauh dengan mengambilnya di aplikasi dan menggunakan kondisi untuk menyajikan varian yang berbeda.

Yang telah kita bahas

  • Cara menetapkan dan mengambil nilai Remote Config
  • Cara menginstrumentasikan kode C# Unity untuk menggunakan nilai yang diambil
  • Cara menyimpan, menginstrumentasikan, dan mengganti nilai/objek gabungan sebagai nilai JSON
  • Cara menggunakan kondisi Remote Config untuk menyalurkan berbagai varian nilai

Langkah berikutnya

Baca tentang prioritas nilai parameter untuk lebih memahami logika nilai yang diperoleh oleh instance aplikasi saat menggunakan parameter dengan beberapa nilai (karena kondisi atau lokalitas).