Firebase Remote Config ile Unity oyununuzu kullanın

1. Giriş

Firebase Remote Config'i kullanarak uygulamanızda parametreler olarak da bilinen anahtar/değer çiftlerini tanımlayabilir ve bunların buluttaki değerlerini güncelleyebilirsiniz. Böylece, uygulama güncellemesi dağıtmadan uygulamanızın görünümünü ve davranışını değiştirebilirsiniz.

Bu yeni işlevi, örnek bir oyun olan MechaHamster: Level Up with Firebase Edition'a ekleyeceksiniz. Bu örnek oyun, klasik Firebase oyunu MechaHamster'ın yeni bir sürümüdür. Yerleşik Firebase işlevlerinin çoğunu kaldırarak bunların yerine yeni Firebase kullanımlarını kullanma şansını elde edersiniz.

Uygulamanızın gerektiği gibi davrandığından emin olmak amacıyla örnek oyun kodundaki değerler için varsayılan yapılandırmalar ayarlarsınız ve bu değerler Firebase konsolundaki Remote Config'de ayarladığınız değerler tarafından geçersiz kılınabilir.

Neler öğreneceksiniz?

  • Bulutta Remote Config değerlerini ayarlama ve alma
  • Alınan değerleri otomatik olarak kullanmak için Unity C# kodunuzda enstrümantasyon yapma
  • Bileşik değerleri/nesneleri JSON değerleri olarak depolama, kullanma ve geçersiz kılma
  • Farklı kullanıcı gruplarına farklı değer varyantları sunmak için Remote Config koşullarını kullanma

Gerekenler

  • iOS ve/veya Android derleme desteğine sahip Unity 2019.1.0f1 veya sonraki sürümler
  • Oyunu geliştirip çalıştırmak için fiziksel bir Android/iOS cihaz veya bir simülatör/emülatör

2. Geliştirme ortamınızı ayarlama

Aşağıdaki bölümlerde, Firebase ile Seviye Atlayın kodunu nasıl indireceğiniz, Unity'de nasıl açacağınız ve bir Firebase projesinin nasıl ekleneceği açıklanmaktadır. Bu Firebase ile Seviye Atlama örnek oyunu, diğer Firebase ve Unity codelab'leri tarafından kullanıldığından bu bölümdeki görevleri zaten tamamlamış olabilirsiniz. Öyleyse bu adımları atlayıp örnek oyun koduna Remote Config'i eklemek için Unity için Firebase SDK'larını ekleme adımına geçebilirsiniz.

Kodu indirme

Komut satırından bu codelab'in GitHub deposunu klonlayın:

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

Alternatif olarak, git yüklü değilse depoyu bir ZIP dosyası olarak indirebilirsiniz.

Unity düzenleyicide Firebase ile Seviye Atla'yı açın

  1. Unity Hub'ı başlatın ve Projeler sekmesinde 'ın yanındaki açılır oku tıklayın.
  2. Add project from disk'i (Diskten proje ekle) tıklayın.
  3. Kodu içeren dizine gidin, ardından Tamam'ı tıklayın.
  4. İstenirse kullanılacak Unity Editor sürümünü ve hedef platformunuzu (Android veya iOS) seçin.
  5. level-up-with-firebase proje adını tıklayın. Proje Unity Editor'da açılır.
  6. Düzenleyiciniz öğeyi otomatik olarak açmazsa MainGameScene öğesini Öğeler > Unity Editor'ın Proje sekmesindeki Hamster.

Unity'yi yükleme ve kullanma hakkında daha fazla bilgi için Unity'de çalışma başlıklı makaleyi inceleyin.

3. Firebase'i Unity projenize ekleyin

Firebase projesi oluşturma

  1. Firebase konsolunda Proje ekle'yi tıklayın.
  2. Yeni proje oluşturmak için istediğiniz proje adını girin.
    Bu işlem ayrıca proje kimliğini (proje adının altında gösterilir) proje adına bağlı olarak bir değere ayarlar. İsteğe bağlı olarak proje kimliğindeki düzenle simgesini tıklayarak kimliği daha fazla özelleştirebilirsiniz.
  3. İstenirse Firebase şartlarını inceleyip kabul edin.
  4. Devam'ı tıklayın.
  5. Bu proje için Google Analytics'i etkinleştir seçeneğini belirleyip Devam'ı tıklayın.
  6. Kullanmak için mevcut bir Google Analytics hesabını seçin veya yeni bir hesap oluşturmak için Yeni hesap oluştur'u seçin.
  7. Create project (Proje oluştur) seçeneğini tıklayın.
  8. Proje oluşturulduktan sonra Continue (Devam) seçeneğini tıklayın.

Uygulamanızı Firebase'e kaydedin

  1. Firebase konsolunu açın ve kurulum iş akışını başlatmak için projeye genel bakış sayfasının ortasında Unity simgesini tıklayın. Firebase projenize daha önce bir uygulama eklediyseniz platform seçeneklerini görüntülemek için Uygulama ekle'yi tıklayın.
  2. Hem Apple (iOS) hem de Android derleme hedeflerini kaydetmek için seçin.
  3. Unity projenizin platforma özgü kimliklerini girin. Bu codelab için şunları girin:
  4. İsteğe bağlı olarak Unity projenizin platforma özel takma adlarını girin.
  5. Uygulamayı kaydet'i tıklayın ve Yapılandırma dosyasını indir bölümüne geçin.
  6. Bu işlemi, ilk seferinde yapmadığınız derleme hedefi için tekrarlayın.

Firebase Yapılandırma Dosyaları Ekleme

Uygulamayı kaydet'i tıkladıktan sonra iki yapılandırma dosyası (her derleme hedefi için bir yapılandırma dosyası) indirmeniz istenir. Unity projenizin bu dosyalardaki Firebase meta verileri ile Firebase'e bağlanması gerekir.

  1. Kullanılabilir iki yapılandırma dosyasını indirin:
    • Apple (iOS) için: GoogleService-Info.plist dosyasını indirin.
    • Android için: google-services.json dosyasını indirin.
  2. Unity projenizin Proje penceresini açın, ardından her iki yapılandırma dosyasını Assets klasörüne taşıyın.
  3. Firebase konsolunda kurulum iş akışında İleri'yi tıklayın ve Unity için Firebase SDK'ları Ekleme bölümüne geçin.

Not: Bu dosyaları daha sonra istediğiniz zaman projenizin genel ayarlarını açıp Uygulamalarınız bölümüne gidip istediğiniz yapılandırma dosyasının indirme düğmesini tıklayarak yeniden indirebilirsiniz.

Unity için Firebase SDK'ları ekleyin

  1. Firebase konsolunda Firebase Unity SDK'yı indir'i tıklayın.
  2. SDK'yı uygun bir yerde açın.
  3. Açık Unity Projenizde Assets (Öğeler) > Paketi İçe Aktar > Özel Paket.
  4. Paketi içe aktar iletişim kutusunda, sıkıştırılmış SDK'yı içeren dizine gidin, FirebaseAnalytics.unitypackage'yi seçin ve ardından 'ı tıklayın.
  5. Açılan Unity Paketini İçe Aktar iletişim kutusunda İçe Aktar'ı tıklayın.
  6. Aşağıdaki iki paketi içe aktarmak için önceki adımları tekrarlayın:
    • FirebaseRemoteConfig.unitypackage
    • FirebaseCrashlytics.unitypackage
      Crashlytics, uygulamanızın kalitesini düşüren kararlılık sorunlarını izlemenize, önceliklendirmenize ve düzeltmenize yardımcı olan hafif ve gerçek zamanlı bir kilitlenme raporu aracıdır. Daha önce kullanmadıysanız Unity İçin Crashlytics Öğrenme Rotası'nı tamamlayabilirsiniz.
  7. Firebase konsoluna dönün ve kurulum iş akışında İleri'yi tıklayın.

Unity projelerine Firebase SDK'ları ekleme hakkında daha fazla bilgi için Ek Unity yükleme seçenekleri bölümüne bakın.

4. Remote Config varsayılanlarını ayarlayın ve yeni değerler getirin

Bu codelab'de, kodda tanımlanmış değerleri kullanan veya Unity düzenleyicide serileştirilmiş nesneleri Remote Config ile sağlanan değerleri kullanacak şekilde güncelleyeceksiniz. Her parametre için varsayılan değerleri SetDefaultsAsync kullanarak yapılandırabilirsiniz. Böylece uygulamanız Remote Config arka ucuna bağlanmadan önce amaçlandığı gibi davranır. Uygulamanız, Remote Config'den yeni değerler getirip etkinleştirerek bu değerleri kodda kullanılabilir hale getirerek güncel kalır.

Remote Config'den yeni değerler getirmek için Assets/Hamster/Scripts/MainGame.cs dosyasında zaten mevcut olan ve tamamlanması gereken, uygulanmamış birkaç yöntem vardır.

  1. Şu using ifadelerini MainGame.cs öğesine ekleyin:
    using Firebase.Crashlytics;
    using Firebase.Extensions;
    using Firebase.RemoteConfig;
    
    Firebase.Extensions modülünde, C# Tasks API için bazı uzantılar bulunur. Bu uzantılar, geri çağırma işlevleriyle başlatma sürecini yönetmenizi kolaylaştırır.
  2. Mevcut InitializeCommonDataAndStartGame() yöntemini şu anda uygulanmamış InitializeFirebaseAndStartGame() yöntemiyle değiştirerek MainGame.cs Start() yönteminize Firebase başlatma ekleyin:
    void Start()
    {
       Screen.SetResolution(Screen.width / 2, Screen.height / 2, true);
       InitializeFirebaseAndStartGame();
    }
    
  3. MainGame.cs uygulamasında InitializeFirebaseAndStartGame() uygulamasını bulun. Aşağıdaki gibi bir uygulama değişkeni tanımlayın ve yöntemin uygulamasının üzerine yazın:
    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 başlatma, uygulama içi varsayılan değerleri ayarlamak için başarılı olduğunda SetRemoteConfigDefaults yöntemini çağırır. Uygulanmayan SetRemoteConfigDefaults yöntemini aşağıdakiyle değiştirin:
    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. Yeni değerleri getirin ve etkinleştirin (gerektiğinde)

Şimdi mevcut FetchRemoteConfig yöntemini tamamlamamız gerekiyor. Bu işlem, Remote Config'in onFetchAndActivateSuccessful adlı bir geri çağırma parametresini kullanarak çağrıları Remote Config'in FetchAsync (Remote Config'den yeni değerler getirir) ve ActivateAsync (elde edilen değerleri kodda kullanılabilir hale getirmek için etkinleştirir) yöntemlerine zincirler.

Önceki adımda eklediğimiz başlangıç kodu, oyunu dizinin sonunda başlatmak için InitializeCommonDataAndStartGame ile birlikte FetchRemoteConfig yöntemini çağırır. Getirme işlemini farklı sonuçlarla çağırmak için FetchRemoteConfig öğesine alternatif geri çağırmalar iletebilirsiniz. Bunun bir örneği (daha sonra uygulayacağınız), Remote Config değerlerine bağlı olan yeni kullanıcı arayüzü menüleri açan bir yöntemin geçirilmesidir. Bu işlem, menülerin yalnızca söz konusu değerler getirilip etkinleştirildikten sonra açılmasına neden olur.

  1. Aşağıdaki kodu FetchRemoteConfig alanına yapıştırın:
    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. Ardından, onFetchAndActivateSuccessful olarak iletilen geri çağırmayı alan ActivateRetrievedRemoteConfigValues yöntemini tamamlayın. Etkinleştirme tamamlandığında, belirtilen geri çağırma çağrılır:
    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 tarafından başlatma bağlamından aşağı akış çağrıldığında ActivateRetrievedRemoteConfigValues, ana menüyü açarak oyunu başlatmak için önceki başlangıç noktasını (InitializeCommonDataAndStartGame) çağırır.

6. Remote Config yükleme stratejisi oluşturun

Uygulamanın kullanımı sırasında değerleri başka bir zamanda getirmek ve etkinleştirmek için bu işlevleri tekrar çağırmanız ve değerleri önbelleğe almış olan nesnelere güncelleme yapmaları gerektiği bildirilmelidir. Remote Config değerlerini tekrar getirmeyle ilgili bir strateji geliştirmek için, yeni değerlerin ne zaman gerekli olacağını ve kullanım sırasında değişmelerini önlemek için yeni değerlerin getirilmesini ve etkinleştirilmesini ne zaman başlatacağınızı düşünün.

Şu anda uygulandığı gibi, Remote Config değerleri uygulama başlatıldığında alınıp etkinleştirilir. Getirme işlemleri, menü değişiklikleri sırasında gizlenebilir ve geçiş sırasında etkileşim engellenebilir. Ayrıca, menü durumundaki bir değişiklik çoğu zaman "nerede" değerini bilmek için kullanılabildiğinden, bu genellikle yeni değerler almak için en uygun zamandır. olduğunu ve bir değerin kullanılacağını tahmin ettiğini gösterir.

Mechahamster'ın menü sistemine bakıldığında, kullanıcı arayüzü engelleme menüsü yenilemeleri eklemenin en kolay yolu, ana menü devam etmeden önce çağırmak (özellikle başka bir menüden geri çekilerek erişildiğinde) ve kullanıcı arayüzü görüntüleme yöntemini onFetchAndActivateSuccessful geri çağırması olarak kullanmaktır. Aynı işlem Level Select menüsü için de yapılabilir.

Uygulama başlatılmasının bir parçası olarak gerçekleşen ilk yüklemeyle, ana menüden geçen menüde gezinme, bunların ilki tarafından işlenir. Seviye Seçimi menüsünün yeniden girilmesi de yenilemeye neden olur. Seviye seçme menüsüne ilk giriş önemli değildir. Çünkü bu menüye yalnızca ana menüden erişilebilir ve dolayısıyla halihazırda kapsama dahil edilmiştir.

Bunu uygulamada etkinleştirmek için ana menüde ve seviye seçme dosyalarında ilgili yöntemleri tamamlayın. Bu işlem, FetchAsync ve ActivateAsync tamamlanana kadar kullanıcı arayüzünün gösterilmesini engeller:

  1. Assets/Hamster/Scripts/States/MainMenu.cs uygulamasını açın ve mevcut Resume yöntemini aşağıdakiyle değiştirin:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.SelectAndPlayMusic(CommonData.prefabs.menuMusic, true);
       CommonData.mainGame.FetchRemoteConfig(InitializeUI);
    }
    
  2. Dosyayı kaydedin.
  3. Assets/Hamster/Scripts/States/BaseLevelSelect.cs uygulamasını açın ve mevcut Resume yöntemini aşağıdakiyle değiştirin:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.FetchRemoteConfig(ShowUI);
    }
    
  4. Dosyayı kaydedin.

7. Getirme davranışlarında hata ayıklama/doğrulama

Bu noktada, teşhis/doğrulama kontrolü yapmak yararlı olur. Aşağıdaki prosedür, uygulamanızı manuel olarak test etmenize olanak tanır. Ayrıca uygulamanızın Remote Config değerlerini nasıl getirip etkinleştirdiğini/etkinleştirip etkinleştirmediğini de buradan inceleyebilirsiniz.

Bilgiler simülasyon aracı, cihaz veya düzenleyici günlüklerinizin bir parçası olarak yazdırılır. iOS için, cihaz ve simülatör günlüklerini Xcode'da görüntüleyebilirsiniz. Android'de, günlükleri adb logcat çalıştırarak görüntüleyebilirsiniz. Düzenleyicide Oynat düğmesine basarak Unity'de kodu çalıştırırsanız günlükler Konsol sekmesinde görünür.

  1. Uygulamayı yeniden derleyip çalıştırın (cihaz veya simülatör kullanarak Editor'da).
  2. Oyunun Ana Menüsü göründükten sonra, oyununuzun FetchRemoteConfig ve ActivateRetrievedRemoteConfigValues içinde Debug.Log tarafından oluşturulan günlükleri içeren günlük çıkışını inceleyin. Burada "Veriler getiriliyor..." ifadesi görünecektir. ve "Uzaktan veriler yüklendi ve hazır" mesaj. Bu iletilerin başındaki zaman damgalarına dikkat edin.
  3. Oyunda, Lisans'a basın.
  4. Tamam'a basın.
  5. Oyunun Ana Menüsü'nün görünmesini bekleyin.
  6. Oyununuzun, yeni zaman damgalarıyla (oyunu çalıştırdığınız sistem saatinde ayarlanan zamanla eşleşen) önceki adımdakine benzer olması gereken günlük çıkışını inceleyin.
  7. Oyunda Oyna'ya basın.
  8. Başlayalım'a basın.
  9. Klavye oklarını kullanarak topu hedefe gidin. Bunu yaptığınızda Seviye Tamamlandı menüsü açılır.
  10. Düzeyler'e basın.
  11. Level Select menüsünün yüklenmesini bekleyin.
  12. Oyununuzun günlük çıkışını tekrar inceleyin. Önceki adımlarda verilen günlük mesajlarını, daha yeni zaman damgalarıyla (oyunu çalıştırdığınız sistem saatinde ayarlanan zamanla) eşleştirmesi gerekir.

Bunlardan herhangi biri uygulamanızda görünmüyorsa getirme ve etkinleştirme akışının bir kısmı (veya cihazınız) yanlış yapılandırılmış olabilir. İlk günlük görünmüyorsa oyununuzun başlatılmama olasılığı vardır. Düzenleyici konsolunu veya cihaz/emülatör günlüklerini inceleyerek projeniz/ortamınızla ilgili uyarı ve hataları araştırın. Sorun, internete bağlanmak kadar basit olabilir.

Menü yüklendiğinden ilk günlükler görüntüleniyor, ancak sonrakilerden biri görünmüyorsa Assets/Hamster/Scripts/States/MainMenu.cs ve Assets/Hamster/Scripts/States/BaseLevelSelect.cs için Resume yöntemlerini araştırın/yeniden uygulayın.

8. Kodunuzu kullanın

SetDefaultsAsync() ürününde uygulama içi parametre değerlerini yapılandırdığınıza ve FetchAsync() ile ActivateAsync() ile en güncel sürümleri yayınladığınıza göre, bu değerleri kodda referans alıp kullanabilirsiniz.

Remote Config arka ucunda değerleri ayarladıktan ve bu değerleri getirip etkinleştirdikten (veya aynı anda ikisini birden yaptıktan) sonra bu değerler uygulamanız tarafından kullanılabilir. Bu değerleri kullanmak için GetValue(string key) yöntemini çağırın ve bağımsız değişken olarak bir parametre anahtarı seçin. Bu komut, desteklenen çeşitli türlerde değere erişecek özelliklere sahip bir ConfigValue döndürür: string, bool, long, double. Bu projede ve oyunların çoğu kullanım alanında, son iki türü daha deyimsel olan int ve float öğelerine yayınlamanız gerekir. Bu dönüşümlerin soruna neden olmaması için Remote Config'de ayarlanan başlangıç değerlerinin, uygulama kodunuzda kullanacağınız türlerin geçerli aralığında olduğundan emin olun.

  1. Aşağıdaki dosyaların en üstüne using Firebase.RemoteConfig; ekleyerek Remote Config'i içe aktarın:
    • Assets/Hamster/Scripts/States/MainMenu.cs
    • Assets/Hamster/Scripts/MapObjects/AccelerationTile.cs
  2. AccelerationTile.cs öğesinin Start yöntemini değiştirin:
    private void Start() {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       Acceleration = (float)remoteConfig.GetValue(AccelerationTileForceKey).DoubleValue;
    }
    
    Bu değişiklikle birlikte, hızlandırma kutusunun uyguladığı kuvvet, Remote Config'den alınan kuvvet olarak değiştirilecek.
  3. MainMenu.cs yönteminin InitializeUI yönteminin gövdesini düzenleyin:
    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();
    }
    
    Burada subtitleOverride, buluttaki tüm alanları türünün varsayılan değerlerinden farklı değerler olarak ayarlanmışsa ana menü ekranındaki alt başlığı değiştirecek şekilde ayarlanmıştır.

9. Parametre değerlerini uzaktan ayarlama

Uygulamanızda artık tüm gerekli donanımlara sahip olduğuna göre Remote Config sunucusunda parametreleri ve değerleri yapılandırmaya hazırsınız. Bu codelab'de, bunu Firebase konsolunu kullanarak ayarlayacağız.

  1. Firebase konsolunda projenizi açın.
  2. Remote Config kontrol panelini görüntülemek için menüden Remote Config'i seçin.
  3. Uygulamanızda tanımladığınız ve aşağıdaki tabloda listelenen parametrelerin her biri için Parametre ekle'yi tıklayın, parametre adını (anahtar) yapıştırın, tabloda listelenen Veri türü'nü seçin, Uygulama içi varsayılan kullan'ı devre dışı bırakın ve yeni varsayılan değeri yapıştırın:

    Parametre adı (anahtar)

    Veri türü

    Varsayılan değer

    ivme_kutu_kuvveti

    Sayı

    100

    altyazı geçersiz kılma

    JSON

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

    Acceleration_tile_force doldurulmuş\nRemote Config Parametre düzenleyici
  4. Değişikliklerinizi kaydetmek için Kaydet'i tıklayın.
  5. Yeni yapılandırmayı yayınlamak ve yeni değerleri oyununuzda kullanılabilir hale getirmek için Publish (Yayınla) seçeneğini tıklayın.
  6. Bu uzak parametreleri ayarladıktan sonra uygulamanızı tekrar çalıştırın ve bunların orijinal varsayılanları nasıl geçersiz kıldığını inceleyin.Hata Ayıklama özellikli Mechahamster ana ekranı\nMenü etkin

10. Varyantları yayınlamak için Remote Config koşullarını kullanın

Konuştuğu dile, bulunduğu yere, günün saatine veya kullandığı platforma bağlı olarak uygulama deneyimini kullanıcıya sunmak isteyebilirsiniz. Remote Config koşulları, kullanıcıya farklı değerler (varyant olarak adlandırılır) sunmak için bu özellikleri ve diğer özellikleri ayrı ayrı veya bir arada kullanmanıza olanak tanır.

Koşulların yaygın bir kullanım alanı, içeriklerin iOS ve Android platformları arasında değiştirilmesidir. Kullanımda olan platforma bağlı olarak subtitle_override için farklı bir değer sunan bir koşul uygulamak üzere aşağıdaki adımları uygulayın.

  1. Firebase konsolunda projenizin Remote Config sekmesini açın.
  2. subtitle_override. için düzenle düğmesini tıklayın
  3. Sol alt köşedeki Yeni ekle'yi tıklayın.
  4. Görünen açılır menüde, fareyle Koşullu değer'in üzerine gelin ve Yeni koşul oluştur'u tıklayın.Remote Config parametre düzenleyicisi:\nKoşullu değer seçeneği
  5. İstendiğinde koşulu "iOS" olarak adlandırın iOS'i veya "Android" ise Android'i hedefliyorsanız İkisini de hedefliyorsanız buradan birini seçmeniz ve codelab'in geri kalanında bunu kullanmanız yeterlidir.iOS&#39;a özgü bir koşulu tanımlamak için\nYeni koşul tanımlayın iletişim kutusunu kullanarak
  6. Geçerli olduğu durumlar: bölümünde Seç... açılır menüsünü tıklayıp Platform'u seçin. Ardından uygun platformu seçin.iOS platformunu seçmek için Yeni bir koşul tanımla\ndüzenleyicisini kullanma
  7. Koşulu oluşturmak için Koşul oluştur'u tıklayın. Parametreyi düzenle iletişim kutusu yeniden görünür ve artık bir değer ayarlayabilirsiniz:
    • Android'i hedefliyorsanız Değer'i şu şekilde ayarlayın:
      {"text":"Level Up Android Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
    • iOS'i hedefliyorsanız Değer'i şu şekilde ayarlayın:
      {"text":"Level Up iOS Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
  8. Değişikliklerinizi kaydetmek için Kaydet'i tıklayın.
  9. Yeni yapılandırmayı yayınlamak ve yeni değerleri oyununuzda kullanılabilir hale getirmek için Publish (Yayınla) seçeneğini tıklayın.

Oyunu tekrar geliştirip çalıştırırsanız oyunun altyazısının platforma özgü varyantıyla değiştirildiğini görürsünüz.

11. Gerçek zamanlı güncellemeleri almak için Remote Config'i yapılandırın

Remote Config artık Remote Config şablonlarındaki güncellemeleri gerçek zamanlı olarak dinleyebilir ve işleyebilir. Uygulamalar, yapılandırma değişikliklerini ve güncellenen değerleri dinlemek için yeni gerçek zamanlı Remote Config API'ye abone olabilir.

İşleyiş şekli

Güncellemeleri dinlemek için uygulamanızın OnConfigUpdateListener etkinliğine abone olan bir yöntem uygulaması gerekir. Bir veya daha fazla yapılandırma güncelleme dinleyicisi aboneyken yeni Remote Config şablonu otomatik olarak getirilir, abone olunan işleyiciler çağrılır ve yanıt olarak yeni değerleri etkinleştirmek ve uygulamanın geri kalanı için kullanılabilir hale getirmek gibi mantık işlemleri gerçekleştirmek için kullanılabilir.

Gerçek zamanlı Remote Config uygulayın

Bunun oyunda nasıl çalıştığını göstermek için kodunuzda aşağıdaki değişiklikleri yapın.

Yapılandırma Güncelleme işleyicisi oluşturma

Yapılandırma Güncelleme etkinliğini kullanmanın ilk adımı, etkinliği işleyebilecek bir yöntem oluşturmaktır. Assets/Hamster/Scripts/MainGame.cs öğesine aşağıdaki yöntemi yerleştirin:

   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.");
         });
   }

Bu yöntem, güncellenen anahtarların listesini ve yeni değerler etkinleştirildiğinde günlüğe bir başarı mesajı yazdırır.

Güncelleme etkinliğine abone ol

Etkinlik çağrıldığında ActivateValuesOnConfigUpdate özelliğinin etkinleştirilmesi için etkinliğe abone olun. Assets/Hamster/Scripts/MainGame.cs içindeki InitializeCommonDataAndStartGame() yöntemini şununla değiştirin:

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

Yeni satır (+= ActivateValuesOnConfigUpdate; ile biten) etkinlik işleyiciyi etkinliğe abone yapar.

İşleyicinin sahip nesnesi kaldırıldığında e-posta listesinden çık

Boş referans hatalarını önlemek için etkinliklere abone olan yöntemlere sahip nesneler, kaldırıldıkları zaman ilgili yöntemin aboneliğinden çıkmalıdır. Assets/Hamster/Scripts/MainGame.cs eklentisine aşağıdaki yöntemi ekleyin:

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

Yeni işlevleri test etme

Yeni işlevi doğrulamak için yerleşik uygulamanızı deneyin. Aşağıdaki prosedür, günlüğü okumanızı ve gerçek bir cihaz kullanarak hata ayıklamanızı gerektirir.

acceleration_tile_force ayarını değiştirin ve gözlemleyin

Uygulamanızı başlattıktan sonra Firebase konsolunun Remote Config bölümünde:

  1. acceleration_tile_force öğesinin yanındaki düzenle düğmesine basın.

dc602d4db54e50a4.png

  1. Değeri "120" olarak değiştirin ve Kaydet'e basın.

fcbc1df848f88009.png

  1. Değişiklikleri Yayınla düğmesini tıklayın.

3785c1e00e7a6359.png

  1. Günlüğü inceleyin.
  2. "Dinlerken hata oluştu" ile başlayan bir günlük mesajı görürseniz geri kalanını okuyun ve yazdırdığı hata mesajıyla hata ayıklamayı deneyin.
  3. "Güncellenen anahtarlar" ile başlayan bir günlük görürseniz değişikliklerinin değerleri alıp almadığını gösterir.
  4. Bunların ikisini de görmüyorsanız günlüklerinizin geri kalanını inceleyin ve ardından Yapılandırma Güncelleme işleyicisi oluşturma bölümündeki talimatları tekrar inceleyin. Ardından, herhangi bir eksiklik olup olmadığını belirlemek için günlükleri yeniden test edin ve günlükleri tekrar kontrol edin.

12. Tebrikler!

Oyun içi değerleri uygulamanızda getirip farklı varyantlar sunmak için koşullar kullanarak uzaktan kontrol etmek üzere Remote Config'i kullandınız.

İşlediğimiz konular

  • Remote Config değerlerini ayarlama ve alma
  • Alınan değerleri kullanmak için Unity C# kodunuzu kullanma
  • Bileşik değerleri/nesneleri JSON değerleri olarak depolama, kullanma ve geçersiz kılma
  • Farklı değer varyantları yayınlamak için Remote Config koşullarını kullanma

Sonraki adımlar

Bir uygulama örneğinin birden fazla değere sahip parametre kullandığında (koşullar veya konum nedeniyle) hangi değerlerin toplandığına dair mantığı daha iyi anlamak için parametre değeri önceliği hakkında bilgi edinin.