Melengkapi game Unity 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 contoh game, 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 berkesempatan untuk menerapkan penggunaan Firebase yang baru sebagai gantinya.

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

Yang akan Anda pelajari

  • Cara menetapkan nilai Remote Config di cloud dan mengambilnya
  • Cara melengkapi 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 memberikan 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 membuat dan menjalankan game

2. Menyiapkan lingkungan pengembangan

Bagian berikut menjelaskan cara mendownload kode Naik Level dengan Firebase, membukanya di Unity, dan menambahkan project Firebase. Contoh game Level Up dengan 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 contoh kode game.

Mendownload kode

Clone repositori GitHub codelab ini dari command line:

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

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

Buka Level Up dengan Firebase di editor Unity

  1. Luncurkan Unity Hub dan, dari tab Project, klik panah drop-down di samping Buka.
  2. Klik Add project from disk.
  3. Buka direktori yang berisi kode tersebut, 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 membukanya secara otomatis, buka MainGameScene di Assets > Hamster di tab Project di Unity Editor.

Untuk mengetahui 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 yang didasarkan pada nama project. 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 Create a new account 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 iOS bundle ID.
    • 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, lalu lanjutkan ke bagian Download file konfigurasi.
  6. Ulangi proses ini untuk target build mana pun yang tidak Anda lakukan 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. Unduh 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 dalam folder Assets.
  3. Kembali ke Firebase console, di alur kerja penyiapan, klik Next dan lanjutkan ke Menambahkan Firebase SDK untuk Unity.

Catatan: Anda selalu dapat mendownload ulang file ini di lain waktu dengan membuka setelan umum project, 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. Dalam 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, pertimbangkan untuk menyelesaikan Jalur Pembelajaran Crashlytics untuk Unity.
  7. Kembali ke Firebase console, lalu klik Next di alur kerja penyiapan.

Untuk mengetahui 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 memperbarui 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 sebagaimana mestinya sebelum terhubung ke backend Remote Config. Aplikasi Anda akan terus diupdate 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 dalam 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() dengan mengganti metode InitializeCommonDataAndStartGame() 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 menetapkan nilai default dalam aplikasi. Ganti metode SetRemoteConfigDefaults yang tidak diterapkan dengan kode berikut:
    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 (jika perlu)

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

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

  1. Tempel kode di bawah 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. Saat 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 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 pada waktu lain selama penggunaan aplikasi, Anda perlu memanggil kembali fungsi ini dan, jika ada objek yang telah meng-cache nilai, fungsi tersebut harus diberi tahu untuk melakukan pembaruan. Untuk mengembangkan strategi untuk mengambil ulang nilai Remote Config, pertimbangkan kapan nilai baru diperlukan dan kapan harus memulai pengambilan dan aktivasi nilai baru untuk menghindari perubahan 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, waktu ini sering kali paling relevan untuk mendapatkan nilai baru, karena perubahan status menu sering kali dapat digunakan untuk mengetahui "ke mana" pemain akan 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 (terutama saat 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 pengaktifan aplikasi, navigasi menu apa pun yang melewati menu utama akan ditangani oleh yang pertama, sementara setiap masuk kembali ke menu Pilihan Level juga akan menyebabkan pemuatan ulang. Masuk awal ke menu pilihan level tidak menjadi masalah karena hanya dapat diakses dari menu utama sehingga sudah tercakup.

Untuk mengaktifkannya di aplikasi, selesaikan metode yang relevan di menu utama dan file pilihan 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 yang berikut ini:
    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 yang berikut ini:
    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 dan bagaimana/apakah aplikasi tersebut mengambil dan mengaktifkan value 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 akan berisi log yang dibuat oleh Debug.Log di FetchRemoteConfig dan ActivateRetrievedRemoteConfigValues. Ini akan menampilkan pesan "Mengambil data..." dan "Data jarak jauh dimuat dan siap". Perhatikan stempel waktu di awal pesan ini.
  3. Di game, tekan Lisensi.
  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 pada jam sistem tempat Anda menjalankan game).
  7. Dalam game, tekan Play.
  8. Tekan Let's Roll.
  9. Arahkan bola ke sasaran menggunakan tombol panah di keyboard, yang akan membuka menu Penyelesaian Level.
  10. Tekan Levels.
  11. Tunggu hingga menu Pilihan Level dimuat.
  12. Tinjau kembali output log game Anda. Stempel waktu ini harus cocok dengan pesan log dari langkah sebelumnya, dengan stempel waktu yang lebih baru (cocok dengan waktu yang disetel pada 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 dapat dijalankan. Tinjau peringatan dan error terkait project/lingkungan Anda di konsol Editor atau log perangkat/emulator, lalu selidiki masalah tersebut – masalahnya mungkin semudah menghubungkan ke internet.

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

8. Menginstrumentasikan kode Anda

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

Setelah Anda menetapkan nilai di backend Remote Config, mengambilnya, lalu 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 yang 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 berubah menjadi 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 selesai 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 tercantum dalam tabel berikutnya, klik Add parameter, tempelkan nama parameter (kunci), pilih Data type yang tercantum dalam tabel, nonaktifkan Use in-app default, dan tempelkan nilai default baru:

    Nama parameter (kunci)

    Jenis data

    Nilai default

    gaya_ubin_akselerasi

    Angka

    100

    subjudul_timpa

    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 membuat nilai baru ini tersedia untuk game Anda.
  6. Jalankan kembali aplikasi Anda setelah menyetel parameter jarak jauh ini dan amati bagaimana parameter tersebut menggantikan default asli.Layar utama Mechahamster dengan Debug\nMenu diaktifkan

10. Menggunakan kondisi Remote Config untuk menampilkan varian

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

Salah satu penggunaan umum untuk kondisi ini adalah untuk mengubah konten antara platform iOS dan Android. Ikuti langkah-langkah di bawah ini untuk menerapkan kondisi yang menayangkan nilai yang 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 sudut kiri bawah, klik Tambahkan baru.
  4. Di drop-down yang muncul, arahkan kursor ke Nilai bersyarat dan klik Buat kondisi baru.Editor parameter Remote Config:\nOpsi nilai bersyarat
  5. Saat diminta, beri nama kondisi "iOS" jika Anda menargetkan iOS, atau "Android" jika Anda menargetkan Android. Jika Anda menargetkan keduanya, cukup pilih salah satu di sini dan gunakan untuk seluruh codelab.Menggunakan dialog Tentukan kondisi baru\nuntuk menentukan kondisi khusus iOS
  6. Di bagian Berlaku jika..., klik drop-down Pilih... dan pilih Platform. Kemudian, pilih platform yang sesuai.Menggunakan editor Tetapkan kondisi baru\nuntuk memilih platform iOS
  7. Klik Create condition untuk membuat kondisi. Dialog Edit parameter akan muncul kembali dan Anda kini dapat menetapkan nilai:
    • Jika Anda menargetkan Android, tetapkan Nilai 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 Nilai 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 membuat nilai baru ini tersedia untuk game Anda.

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

11. Mengonfigurasi Remote Config untuk menerima update real-time

Remote Config kini dapat memproses dan menangani pembaruan 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. Saat satu atau beberapa pemroses update konfigurasi berlangganan, template Remote Config baru akan diambil secara otomatis, pengendali yang berlangganan akan dipanggil dan dapat digunakan untuk menjalankan logika sebagai respons, seperti mengaktifkan nilai baru dan menyediakannya untuk aplikasi lainnya.

Menerapkan Remote Config real-time

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

Membuat pengendali Config Update

Langkah pertama untuk menggunakan peristiwa Config Update adalah membuat metode yang mampu 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 nilai baru diaktifkan.

Berlangganan peristiwa Update

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

   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 (yang diakhiri dengan += ActivateValuesOnConfigUpdate;) akan memasukkan pengendali peristiwa ke peristiwa tersebut.

Berhenti berlangganan saat objek yang dimiliki pengendali dihancurkan

Untuk mencegah error referensi null, objek dengan metode yang berlangganan peristiwa harus menghentikan langganan metode tersebut saat dimusnahkan. 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 Anda buat. Prosedur berikut mengharuskan Anda dapat membaca log dan melakukan debug menggunakan perangkat sungguhan.

Ubah acceleration_tile_force dan amati

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

  1. Tekan tombol edit di samping acceleration_tile_force.

dc602d4db54e50a4.png

  1. Ubah nilainya ke ‘120' dan tekan Save.

fcbc1df848f88009.png

  1. Klik tombol Publikasikan Perubahan.

3785c1e00e7a6359.png

  1. Periksa log.
  2. Jika Anda melihat pesan log yang diawali dengan "Error terjadi saat mendengarkan", baca sisanya dan coba lakukan debug dengan pesan error yang dicetaknya.
  3. Jika Anda melihat log yang diawali dengan "Kunci yang diperbarui", aplikasi Anda telah menerima nilai yang diubah.
  4. Jika Anda tidak melihat kedua hal tersebut, periksa log lainnya, lalu tinjau kembali petunjuk dari Membuat pengendali Update Konfigurasi, lakukan pengujian 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 berbagai varian.

Yang telah kita bahas

  • Cara menetapkan dan mengambil nilai Remote Config
  • Cara melengkapi 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 menyajikan berbagai varian nilai

Langkah berikutnya

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