Lengkapi game Unity Anda dengan Firebase Remote Config

1. Perkenalan

Anda dapat menggunakan Firebase Remote Config untuk menentukan pasangan nilai kunci , 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: Naik Level dengan Firebase Edition . Contoh game ini adalah versi baru dari game Firebase klasik MechaHamster yang menghapus sebagian besar fungsi Firebase bawaannya, sehingga memberi Anda peluang untuk menerapkan penggunaan baru Firebase sebagai gantinya.

Untuk memastikan bahwa aplikasi Anda berperilaku sebagaimana mestinya, Anda akan menetapkan konfigurasi default untuk nilai-nilai dalam contoh kode game, dan nilai-nilai ini dapat diganti dengan nilai yang Anda tetapkan di Remote Config di Firebase console .

Apa yang akan Anda pelajari

  • Cara menyetel nilai Remote Config di cloud dan mengambilnya
  • Cara melengkapi kode Unity C# Anda untuk menggunakan nilai yang diambil secara otomatis
  • Cara menyimpan, menginstrumentasikan, dan mengganti nilai/objek gabungan sebagai nilai JSON
  • Cara menggunakan ketentuan Remote Config untuk menyajikan varian nilai yang berbeda ke grup pengguna yang berbeda

Apa yang Anda perlukan

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

2. Siapkan lingkungan pengembangan Anda

Bagian berikut menjelaskan cara mendownload Level Up dengan kode Firebase , membukanya di Unity, dan menambahkan proyek Firebase. Contoh game Naik Level 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 Tambahkan Firebase SDK untuk Unity guna menambahkan Remote Config ke contoh kode game.

Unduh kodenya

Kloning repositori GitHub codelab ini dari baris perintah:

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

Alternatifnya, jika Anda belum menginstal git, Anda dapat mengunduh repositori sebagai file ZIP .

Buka Level Up dengan Firebase di editor Unity

  1. Luncurkan Unity Hub dan, dari tab Projects , klik panah drop-down di sebelah Open .
  2. Klik Tambahkan proyek dari disk .
  3. Navigasikan ke 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 pada nama proyek, level-up-with-firebase , dan proyek akan terbuka di editor Unity.
  6. Jika editor Anda tidak membukanya secara otomatis, buka MainGameScene di Assets > Hamster di tab Project pada Unity Editor.

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

3. Tambahkan Firebase ke proyek Unity Anda

Buat proyek Firebase

  1. Di Firebase console , klik Tambahkan proyek .
  2. Untuk membuat proyek baru, masukkan nama proyek yang diinginkan.
    Ini juga akan mengatur ID proyek (ditampilkan di bawah nama proyek) menjadi sesuatu berdasarkan nama proyek. Anda juga dapat mengklik ikon edit pada ID proyek untuk menyesuaikannya lebih lanjut.
  3. Jika diminta, tinjau dan setujui persyaratan Firebase .
  4. Klik Lanjutkan .
  5. Pilih opsi Aktifkan Google Analytics untuk proyek ini , lalu klik Lanjutkan .
  6. Pilih akun Google Analytics yang ada untuk digunakan atau pilih Buat akun baru untuk membuat akun baru.
  7. Klik Buat proyek .
  8. Ketika proyek telah dibuat, klik Lanjutkan .

Daftarkan aplikasi Anda ke Firebase

  1. Buka Firebase console dan, dari tengah halaman ringkasan proyek, klik ikon Unity untuk meluncurkan alur kerja penyiapan atau, jika Anda sudah menambahkan aplikasi ke proyek Firebase, klik Tambahkan aplikasi untuk menampilkan opsi platform.
  2. Pilih untuk mendaftarkan target build Apple (iOS) dan Android.
  3. Masukkan ID khusus platform proyek 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 nama paket Android .
  4. Secara opsional, masukkan nama panggilan khusus platform proyek Unity Anda.
  5. Klik Daftarkan aplikasi dan lanjutkan ke bagian Unduh file konfigurasi .
  6. Ulangi proses ini untuk target pembangunan mana pun yang tidak Anda lakukan pertama kali.

Tambahkan File Konfigurasi Firebase

Setelah mengklik Daftarkan aplikasi , Anda akan diminta untuk mengunduh dua file konfigurasi (satu file konfigurasi untuk setiap target build). Proyek Unity Anda memerlukan metadata Firebase dalam file ini untuk terhubung dengan Firebase.

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

Catatan: Anda selalu dapat mengunduh ulang file-file ini di lain waktu dengan membuka pengaturan umum proyek Anda, menggulir ke bawah ke bagian Aplikasi Anda , lalu mengklik tombol unduh untuk file konfigurasi yang diinginkan.

Tambahkan Firebase SDK untuk Unity

  1. Klik Unduh Firebase Unity SDK di Firebase console.
  2. Buka zip SDK di tempat yang nyaman.
  3. Di Proyek Unity terbuka Anda, navigasikan ke Assets > Import Package > Custom Package .
  4. Dalam dialog Impor paket , navigasikan ke direktori yang berisi SDK yang belum di-zip, pilih FirebaseAnalytics.unitypackage , lalu klik Open .
  5. Dari dialog Impor Paket Unity yang muncul, klik Impor .
  6. Ulangi langkah sebelumnya untuk mengimpor dua paket berikut:
    • FirebaseRemoteConfig.unitypackage
    • FirebaseCrashlytics.unitypackage
      Crashlytics adalah pelapor kerusakan ringan dan real-time yang membantu Anda melacak, memprioritaskan, dan memperbaiki masalah stabilitas yang mengurangi kualitas aplikasi Anda. Jika Anda belum pernah menggunakannya sebelumnya, pertimbangkan untuk menyelesaikan Jalur Pembelajaran Crashlytics untuk Unity .
  7. Kembali ke Firebase console dan, di alur kerja penyiapan, klik Berikutnya .

Untuk informasi lebih lanjut tentang menambahkan Firebase SDK ke proyek Unity, lihat Opsi instalasi Unity tambahan .

4. Tetapkan default Remote Config dan ambil nilai baru

Dalam codelab ini, Anda akan mengupdate objek yang menggunakan nilai yang ditentukan dalam kode atau diserialkan di editor Unity untuk menggunakan nilai yang diinstrumentasikan dengan Remote Config. Anda akan mengonfigurasi nilai default untuk setiap parameter menggunakan SetDefaultsAsync sehingga aplikasi Anda berperilaku sebagaimana mestinya sebelum terhubung ke backend Remote Config. Aplikasi Anda akan selalu diperbarui 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 belum diterapkan yang 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 belum 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 yang 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 (sesuai kebutuhan)

Kita sekarang perlu menyelesaikan metode FetchRemoteConfig yang ada. Ini akan menghubungkan 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 panggilan baliknya untuk memulai permainan di akhir urutan. Anda dapat meneruskan callback alternatif ke FetchRemoteConfig untuk menjalankan pengambilan dengan hasil berbeda. Contohnya (yang akan Anda terapkan nanti) adalah meneruskan metode yang membuka menu UI baru, yang bergantung pada nilai Remote Config. Hal ini akan menyebabkan menu terbuka hanya setelah nilai tersebut diambil dan diaktifkan.

  1. Rekatkan kode di bawah ini ke 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 panggilan balik yang diteruskan, onFetchAndActivateSuccessful . Ketika aktivasi selesai, panggilan balik 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 ​​memanggil titik awal sebelumnya, InitializeCommonDataAndStartGame , untuk memulai permainan dengan membuka menu utama.

6. Siapkan 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 menyimpan nilai dalam cache, objek tersebut harus diberi tahu untuk melakukan pembaruan. Untuk mengembangkan strategi pengambilan 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 diterapkan saat ini, 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 merupakan waktu yang paling relevan untuk mendapatkan nilai baru, karena perubahan status menu sering kali dapat digunakan untuk mengetahui "ke mana" tujuan pemain dan memprediksi nilai mana yang akan digunakan.

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

Dengan pemuatan awal sebagai bagian dari permulaan aplikasi, navigasi menu apa pun yang melewati menu utama akan ditangani oleh menu pertama, sementara masuknya kembali menu Pilihan Tingkat juga akan menyebabkan penyegaran. Pintu masuk awal ke menu pemilihan level tidak menjadi masalah karena hanya dapat diakses dari menu utama dan karenanya sudah tercakup.

Untuk mengaktifkan ini di aplikasi, selesaikan metode yang relevan di menu utama dan pilih level file, 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:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.SelectAndPlayMusic(CommonData.prefabs.menuMusic, true);
       CommonData.mainGame.FetchRemoteConfig(InitializeUI);
    }
    
  2. Simpan berkasnya.
  3. Buka Assets/Hamster/Scripts/States/BaseLevelSelect.cs , ganti metode Resume yang ada dengan yang berikut:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.FetchRemoteConfig(ShowUI);
    }
    
  4. Simpan berkasnya.

7. Debug/validasi perilaku pengambilan

Pada titik ini, ada baiknya melakukan pemeriksaan diagnostik/validasi. Prosedur berikut memungkinkan Anda menguji aplikasi secara manual dan bagaimana/jika aplikasi 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 Konsol.

  1. Bangun kembali 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 dihasilkan 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 dalam game, tekan Lisensi .
  4. Tekan Oke .
  5. Tunggu hingga Menu Utama game muncul.
  6. Tinjau keluaran log game Anda, yang seharusnya serupa dengan langkah sebelumnya, dengan stempel waktu baru (cocok dengan waktu yang ditetapkan pada jam sistem tempat Anda menjalankan game).
  7. Di dalam game, tekan Mainkan .
  8. Tekan Ayo Berguling .
  9. Arahkan bola ke gawang menggunakan panah keyboard, yang akan membuka menu Level Complete.
  10. Tekan Level .
  11. Tunggu hingga menu Pilihan Level dimuat.
  12. Tinjau kembali keluaran log game Anda. Ini harus cocok dengan pesan log dari langkah sebelumnya, dengan stempel waktu yang lebih baru (cocok dengan waktu yang ditetapkan pada jam sistem tempat Anda menjalankan game).

Jika salah satu dari hal tersebut 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 konsol Editor atau log perangkat/emulator untuk melihat peringatan dan kesalahan tentang proyek/lingkungan Anda dan selidiki masalah tersebut–masalahnya mungkin sesederhana menghubungkan ke internet.

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

8. Instrumenkan kode Anda

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

Setelah Anda menetapkan nilai di backend Remote Config, mengambilnya, dan mengaktifkannya ( atau melakukan keduanya sekaligus ), nilai tersebut akan tersedia untuk aplikasi Anda. Untuk menggunakan nilai-nilai ini, panggil GetValue(string key ) , dan pilih kunci parameter sebagai argumen. Ini mengembalikan ConfigValue , yang memiliki properti untuk mengakses nilai sebagai berbagai tipe yang didukung: string , bool , long , double . Dalam proyek ini dan sebagian besar kasus penggunaan game, Anda harus memasukkan dua tipe 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 Anda.

  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. Ganti 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 petak akselerasi akan diubah menjadi gaya yang diterima dari Remote Config.
  3. Edit isi metode InitializeUI 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 diatur untuk mengubah subtitle pada layar menu utama jika semua bidangnya di cloud ditetapkan sebagai nilai selain nilai default tipenya .

9. Tetapkan nilai parameter dari jarak jauh

Kini setelah aplikasi Anda terinstrumentasi sepenuhnya, Anda siap mengonfigurasi parameter dan nilai di server Remote Config. Dalam codelab ini, kita akan menyiapkannya menggunakan Firebase console.

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

    Nama parameter (kunci)

    Tipe data

    Nilai bawaan

    akselerasi_tile_force

    Nomor

    100

    subtitle_override

    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. Klik Simpan untuk menyimpan perubahan Anda.
  5. Klik Publikasikan untuk mempublikasikan konfigurasi baru dan membuat nilai baru tersedia untuk game Anda.
  6. Jalankan kembali aplikasi Anda setelah menyetel parameter jarak jauh ini dan amati bagaimana parameter tersebut menggantikan default aslinya. Mechahamster main screen with Debug\nMenu enabled

10. Gunakan ketentuan Remote Config untuk menyajikan varian

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

Salah satu kegunaan umum dari kondisi ini adalah untuk mengubah konten antara platform iOS dan Android. Ikuti langkah-langkah di bawah ini untuk menerapkan ketentuan yang memberikan nilai berbeda untuk subtitle_override bergantung pada platform mana yang digunakan.

  1. Buka tab Remote Config proyek Anda di Firebase console .
  2. Klik tombol edit untuk subtitle_override.
  3. Di pojok kiri bawah, klik Tambahkan baru .
  4. Di tarik-turun yang muncul, arahkan kursor ke Nilai bersyarat dan klik Buat ketentuan baru. Remote Config parameter editor:\nConditional value option
  5. Saat diminta, beri nama ketentuan "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 codelab lainnya. Using the Define a new condition\ndialog to define an iOS-specific condition
  6. Di bawah Berlaku jika... , klik tarik-turun Pilih... dan pilih Platform . Kemudian, pilih platform yang sesuai. Using the Define a new condition\neditor to select the iOS platform
  7. Klik Buat kondisi untuk membuat kondisi. Dialog Edit parameter muncul kembali dan Anda sekarang 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 Anda.
  9. Klik Publikasikan untuk mempublikasikan konfigurasi baru dan membuat nilai baru tersedia untuk game Anda.

Jika Anda membuat dan menjalankan kembali game tersebut, Anda akan melihat subtitle game tersebut diganti dengan varian khusus platformnya.

11. Konfigurasikan Remote Config untuk menerima pembaruan waktu nyata

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

Bagaimana itu bekerja

Untuk memproses pembaruan, aplikasi Anda harus mengimplementasikan metode yang berlangganan peristiwa OnConfigUpdateListener . Saat satu atau lebih pemroses pembaruan 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 membuatnya tersedia untuk seluruh aplikasi.

Menerapkan Remote Config secara real-time

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

Buat pengendali Pembaruan Konfigurasi

Langkah pertama untuk menggunakan event Config Update adalah membuat metode yang mampu mendengarkannya. 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 sukses ke log ketika mengaktifkan nilai baru.

Berlangganan acara Pembaruan

Untuk mengaktifkan ActivateValuesOnConfigUpdate saat acara dipanggil, berlanggananlah ke acara tersebut. Ganti metode InitializeCommonDataAndStartGame() di Assets/Hamster/Scripts/MainGame.cs dengan yang 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; ) berlangganan event handler ke acara tersebut.

Berhenti berlangganan ketika objek milik pawang dihancurkan

Untuk mencegah kesalahan referensi nol, objek dengan metode yang berlangganan peristiwa harus berhenti berlangganan metode tersebut ketika metode tersebut dimusnahkan. Tambahkan metode berikut ke Assets/Hamster/Scripts/MainGame.cs :

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

Uji fungsionalitas baru

Untuk memvalidasi fungsi baru, cobalah aplikasi yang Anda buat. Prosedur berikut mengharuskan Anda dapat membaca log dan melakukan debug menggunakan perangkat nyata .

Ubah acceleration_tile_force dan amati

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

  1. Tekan tombol edit di sebelah acceleration_tile_force .

dc602d4db54e50a4.png

  1. Ubah nilainya menjadi '120' dan tekan Simpan .

fcbc1df848f88009.png

  1. Klik tombol Publikasikan Perubahan .

3785c1e00e7a6359.png

  1. Periksa lognya.
  2. Jika Anda melihat pesan log yang diawali dengan "Terjadi kesalahan saat mendengarkan", baca sisanya dan coba lakukan debug dengan pesan kesalahan 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 keduanya, periksa sisa log Anda lalu tinjau kembali instruksi dari Create a Config Update handler , 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 Anda dan menggunakan ketentuan untuk menyajikan varian yang berbeda!

Apa yang telah kami bahas

  • Cara menyetel dan mengambil nilai Remote Config
  • Cara melengkapi kode Unity C# Anda untuk menggunakan nilai yang diambil
  • Cara menyimpan, menginstrumentasikan, dan mengganti nilai/objek gabungan sebagai nilai JSON
  • Cara menggunakan ketentuan Remote Config untuk menyajikan varian nilai yang berbeda

Langkah selanjutnya

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