Unity oyununuzu Firebase Remote Config ile donatın

1. Giriş

Uygulamanızda parametreler olarak da bilinen anahtar/değer çiftlerini tanımlamak ve bunların değerlerini bulutta güncellemek için Firebase Remote Config'i kullanabilirsiniz; böylece bir uygulama güncellemesi dağıtmadan uygulamanızın görünümünü ve davranışını değiştirebilirsiniz .

Bu yeni işlevselliği MechaHamster: Firebase Edition ile Seviye Atlama adlı örnek oyuna ekleyeceksiniz. Bu örnek oyun, klasik Firebase oyunu MechaHamster'ın, yerleşik Firebase işlevlerinin çoğunu ortadan kaldıran ve size Firebase'in yeni kullanımlarını yerine uygulama şansı veren yeni bir sürümüdür.

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

Ne öğreneceksin

  • Bulutta Remote Config değerleri nasıl ayarlanır ve alınır?
  • Unity C# kodunuzu, alınan değerleri otomatik olarak kullanacak şekilde nasıl kullanabilirsiniz?
  • Bileşik değerleri/nesneleri JSON değerleri olarak saklama, ölçme ve geçersiz kılma
  • Farklı kullanıcı gruplarına farklı değer çeşitleri sunmak için Remote Config koşulları nasıl kullanılır?

İhtiyacınız olan şey

  • Unity 2019.1.0f1 veya üzeri, iOS ve/veya Android derleme desteğiyle
  • Oyunu oluşturmak ve çalıştırmak için fiziksel bir Android/iOS cihazı veya bir simülatör/emülatör

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

Aşağıdaki bölümlerde Firebase ile Seviye Atlama kodunun nasıl indirileceği, Unity'de nasıl açılacağı ve bir Firebase projesinin nasıl ekleneceği açıklanmaktadır. Bu Firebase ile Seviye Atlama örnek oyunu diğer birçok Firebase + Unity codelab'i tarafından kullanıldığından, bu bölümdeki görevleri zaten tamamlamış olabilirsiniz. Öyleyse bu adımları atlayabilir ve Remote Config'i örnek oyun koduna eklemek için Unity için Firebase SDK'ları Ekle bölümüne geçebilirsiniz.

Kodu indirin

Bu codelab'in GitHub deposunu komut satırından kopyalayın:

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

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

Unity editöründe Firebase ile Seviye Atlamayı açın

  1. Unity Hub'ı başlatın ve Projeler sekmesinde Aç'ın yanındaki açılır oka tıklayın.
  2. Diskten proje ekle'yi tıklayın.
  3. Kodu içeren dizine gidin ve ardından Tamam'a tıklayın.
  4. İstenirse kullanılacak Unity düzenleyici sürümünü ve hedef platformunuzu (Android veya iOS) seçin.
  5. Proje adına tıklayın, firebase ile seviye atlayın ve proje Unity editöründe açılacaktır.
  6. Editörünüz otomatik olarak açmazsa, Unity Editör'ün Proje sekmesindeki Varlıklar > Hamster'da MainGameScene açın.

Unity'yi yükleme ve kullanma hakkında daha fazla bilgi için bkz. Unity'de Çalışmak .

3. Firebase'i Unity projenize ekleyin

Firebase projesi oluşturma

  1. Firebase konsolunda Proje ekle'yi tıklayın.
  2. Yeni bir proje oluşturmak için istediğiniz proje adını girin.
    Bu aynı zamanda proje kimliğini (proje adının altında görüntülenen) proje adına dayalı bir şeye ayarlayacaktır. İsteğe bağlı olarak proje kimliğini daha da özelleştirmek için düzenleme simgesine tıklayabilirsiniz.
  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 seçin ve ardından 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. Proje oluştur'u tıklayın.
  8. Proje oluşturulduğunda Devam'a 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 veya Firebase projenize zaten 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 özel kimlik(ler)ini girin. Bu codelab için aşağıdakileri girin:
  4. İsteğe bağlı olarak Unity projenizin platforma özel takma adlarını girin.
  5. Uygulamayı kaydet'e tıklayın ve Yapılandırma dosyasını indir bölümüne ilerleyin.
  6. İlk seferde yapmadığınız derleme hedefi için işlemi tekrarlayın.

Firebase Yapılandırma Dosyalarını Ekle

Uygulamayı kaydet seçeneğine tıkladıktan sonra, iki yapılandırma dosyasını (her derleme hedefi için bir yapılandırma dosyası) indirmeniz istenecektir. Unity projenizin Firebase'e bağlanabilmesi için bu dosyalardaki Firebase meta verilerine ihtiyacı var.

  1. Mevcut her iki yapılandırma dosyasını da indirin:
    • Apple (iOS) için : GoogleService-Info.plist'i 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ı da Varlıklar klasörüne taşıyın.
  3. Firebase konsoluna geri döndüğünüzde, kurulum iş akışında İleri'ye tıklayın ve Unity için Firebase SDK'ları Ekle'ye ilerleyin.

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

Unity için Firebase SDK'ları ekleyin

  1. Firebase konsolunda Firebase Unity SDK'yı İndir'e tıklayın.
  2. SDK'yı uygun bir yerde açın.
  3. Açık Unity Projenizde Varlıklar > Paketi İçe Aktar > Özel Paket'e gidin.
  4. Paketi içe aktar iletişim kutusunda, sıkıştırılmış SDK'yı içeren dizine gidin, FirebaseAnalytics.unitypackage seçin ve ardından Aç öğesine tıklayın.
  5. Görüntülenen 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, uygulama kalitenizi düşüren kararlılık sorunlarını izlemenize, önceliklendirmenize ve düzeltmenize yardımcı olan hafif, gerçek zamanlı bir kilitlenme raporlayıcısıdır. Daha önce kullanmadıysanız Crashlytics Learning Pathway for Unity'yi tamamlamayı düşünün.
  7. Firebase konsoluna dönün ve kurulum iş akışında İleri'yi tıklayın.

Firebase SDK'larını Unity projelerine ekleme hakkında daha fazla bilgi için Ek Unity yükleme seçeneklerine bakın.

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

Bu codelab'de, kodda tanımlanan değerleri kullanan veya Unity düzenleyicisinde serileştirilmiş nesneleri, Remote Config ile kullanılan değerleri kullanacak şekilde güncelleyeceksiniz. Uygulamanızın Remote Config arka ucuna bağlanmadan önce amaçlandığı gibi davranması için SetDefaultsAsync kullanarak her parametre için varsayılan değerleri yapılandıracaksınız. Uygulamanız, Remote Config'den yeni değerler alıp kodda kullanılabilir hale getirmek için bunları etkinleştirerek güncel kalacaktır.

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

  1. MainGame.cs aşağıdaki using ifadelerini ekleyin:
    using Firebase.Crashlytics;
    using Firebase.Extensions;
    using Firebase.RemoteConfig;
    
    Firebase.Extensions modülü, geri çağırmalarla başlatma sürecini daha basit bir şekilde yönetmeye yardımcı olacak C# Görevler API'sine yönelik bazı uzantılar içerir.
  2. Mevcut InitializeCommonDataAndStartGame() yöntemini şu anda uygulanmamış olan InitializeFirebaseAndStartGame( InitializeFirebaseAndStartGame() yöntemiyle değiştirerek Firebase başlatma işlemini MainGame.cs Start() yönteminize ekleyin:
    void Start()
    {
       Screen.SetResolution(Screen.width / 2, Screen.height / 2, true);
       InitializeFirebaseAndStartGame();
    }
    
  3. MainGame.cs , InitializeFirebaseAndStartGame() bulun. Bir uygulama değişkeni bildirin ve yöntemin uygulamasının üzerine şu şekilde 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ı durumunda SetRemoteConfigDefaults ç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 alın ve etkinleştirin (gerektiğinde)

Artık mevcut FetchRemoteConfig metodunu tamamlamamız gerekiyor. Bu, onFetchAndActivateSuccessful adlı bir geri çağırma parametresini kullanarak 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 yapılan çağrıları zincirleyecektir.

Önceki adımda eklediğimiz başlangıç ​​kodu, sıranın sonunda oyunu başlatmak için geri çağırma olarak FetchRemoteConfig ve InitializeCommonDataAndStartGame çağırır. Getirmeyi farklı sonuçlarla başlatmak için FetchRemoteConfig alternatif geri aramalar iletebilirsiniz. Bunun bir örneği (daha sonra uygulayacağınız), Remote Config değerlerine bağlı olan yeni kullanıcı arayüzü menülerini açan bir yöntemin aktarılmasıdır. Bu, menülerin ancak bu değerler alınıp etkinleştirildikten sonra açılmasına neden olacaktır.

  1. Aşağıdaki kodu FetchRemoteConfig 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. Daha sonra, aktarılan bir geri çağırmayı alan ActivateRetrievedRemoteConfigValues ​​yöntemini onFetchAndActivateSuccessful tamamlayın. Etkinleştirme tamamlandığında belirtilen geri arama çağrılacaktı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();
             });
       }
    }
    

Başlatma bağlamından SetRemoteConfigDefaults tarafından aşağı yönde çağrıldığında ActivateRetrievedRemoteConfigValues , oyunu ana menüyü açarak başlatmak için önceki başlangıç ​​noktası 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 gerekir ve herhangi bir nesne değerleri önbelleğe almışsa, bu nesnelerin bir güncelleme gerçekleştirmeleri konusunda uyarılması gerekir. Remote Config değerlerini yeniden getirmeye yönelik bir strateji geliştirmek için, yeni değerlere ne zaman ihtiyaç duyulduğunu ve kullanım sırasında değişmelerini önlemek amacıyla yeni değerlerin getirilmesini ve etkinleştirilmesini ne zaman başlatacağınızı düşünün.

Şu anda uygulandığı şekliyle Remote Config değerleri, uygulama başlatıldığında getirilir ve etkinleştirilir. Getirmeler menü değişiklikleri sırasında gizlenebilir ve aynı zamanda geçiş sırasındaki etkileşim de engellenebilir. Buna ek olarak, menü durumundaki bir değişiklik genellikle oyuncunun "nereye" gittiğini bilmek ve bir değerin kullanılacağını tahmin etmek için kullanılabildiğinden, bu genellikle yeni değerler elde etmek için en uygun zamandır.

Mechahamster'ın menü sistemine bakıldığında, kullanıcı arayüzü engelleme menüsü yenilemeleri eklemenin en kolay yolu, ana menü devam etmeden önce onu ç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ğırma olarak iletmektir. Aynı şey Seviye Seçimi menüsü için de yapılabilir.

Uygulama başlatmanın bir parçası olarak ilk yükleme yapıldığında, ana menüden geçen herhangi bir menü gezinmesi bunlardan ilki tarafından gerçekleştirilecek ve Seviye Seçimi menüsüne herhangi bir yeniden giriş de yenilemeye neden olacaktır. Seviye seçme menüsüne ilk giriş önemli değildir çünkü bu menüye yalnızca ana menüden erişilebilir ve bu nedenle zaten kapsanmıştır.

Uygulamada bunu etkinleştirmek için ana menüdeki ilgili yöntemleri ve FetchAsync ve ActivateAsync tamamlanana kadar kullanıcı arayüzü ekranını engelleyecek seviye seçim dosyalarını tamamlayın:

  1. Assets/Hamster/Scripts/States/MainMenu.cs dosyası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. Dosya 'yı kaydet.
  3. Assets/Hamster/Scripts/States/BaseLevelSelect.cs dosyasını açın, mevcut Resume yöntemini aşağıdakiyle değiştirin:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.FetchRemoteConfig(ShowUI);
    }
    
  4. Dosya 'yı kaydet.

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

Bu noktada bir teşhis/doğrulama kontrolü yapmakta fayda var. Aşağıdaki prosedür, uygulamanızı manuel olarak test etmenize ve Remote Config değerlerini nasıl alıp etkinleştirip etkinleştirmediğini test etmenize olanak tanır.

Bilgiler simülatörünüzün, cihazınızın veya editör günlüklerinizin bir parçası olarak yazdırılacaktır. İOS için cihaz ve simülatör günlüklerini Xcode'da görüntüleyebilirsiniz. Android için adb logcat çalıştırarak günlükleri görüntüleyin. Kodu Unity'de düzenleyicide Oynat tuşuna basarak çalıştırırsanız günlükler Konsol sekmesinde görünür.

  1. Uygulamayı yeniden oluşturun ve çalıştırın (Editör'de, bir cihaz veya simülatör kullanarak).
  2. Oyunun Ana Menüsü göründükten sonra oyununuzun FetchRemoteConfig ve ActivateRetrievedRemoteConfigValues ​​öğelerinde Debug.Log tarafından oluşturulan günlükleri içermesi gereken günlük çıktısını inceleyin. Bunlarda "Veriler getiriliyor..." ve "Uzak veriler yüklendi ve hazır" mesajları gösterilmelidir. Bu mesajların 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 önceki adımdakilere benzer olması gereken günlük çıktısını yeni zaman damgalarıyla (oyunu çalıştırdığınız sistem saatinde ayarlanan zamanla eşleşecek şekilde) gözden geçirin.
  7. Oyunda Oynat tuşuna basın.
  8. Hadi Dönelim'e basın.
  9. Klavye oklarını kullanarak topu hedefe yönlendirin; bu, Seviye Tamamlama menüsünü açar.
  10. Seviyeler'e basın.
  11. Seviye Seçimi menüsünün yüklenmesini bekleyin.
  12. Oyununuzun günlük çıktısını tekrar inceleyin. Daha önceki adımlardan gelen günlük mesajlarını daha yeni zaman damgalarıyla (oyunu çalıştırdığınız sistem saatinde ayarlanan zamanla eşleşen) eşleştirmelidir.

Bunlardan herhangi biri uygulamanızda görünmüyorsa, getirme ve etkinleştirme akışının (veya cihazınızın) bir kısmı yanlış yapılandırılmış olabilir. İlk günlük görünmüyorsa oyununuzun başlamama ihtimali vardır. Projeniz/ortamınız hakkındaki uyarılar ve hatalar için Editör konsolunu veya cihaz/emülatör günlüklerini inceleyin ve bunları araştırın; sorun internete bağlanmak kadar basit olabilir.

Menünün yüklenmesiyle ilgili ilk günlükler görünüyor ancak sonrakilerden biri görünmüyorsa, Assets/Hamster/Scripts/States/MainMenu.cs ve Assets/Hamster/Scripts/States/BaseLevelSelect.cs içindeki Resume yöntemlerini araştırın/yeniden uygulayın.

8. Kodunuzu kullanın

Artık SetDefaultsAsync() uygulamasında uygulama içi parametre değerlerini yapılandırdığınıza ve FetchAsync() ve ActivateAsync() ile en güncel sürümleri kullanılabilir hale getirdiğinize göre, kodda bu değerlere başvurup bunları kullanacaksınız.

Remote Config arka ucunda değerleri ayarladıktan, bunları getirdikten ve etkinleştirdikten ( veya her ikisini birden aynı anda yaptıktan ) sonra bu değerler uygulamanızda kullanılabilir. Bu değerleri kullanmak için GetValue(string key ) öğesini çağırın ve bağımsız değişken olarak bir parametre anahtarı seçin. Bu, değere desteklenen çeşitli türler halinde erişmeyi sağlayan özelliklere sahip bir ConfigValue döndürür: string , bool , long , double . Bu projede ve oyun kullanım durumlarının çoğunda, son iki türü daha deyimsel olan int ve float çevirmelisiniz. Bu dönüşümlerin sorunlara neden olmadığından emin olmak için Remote Config'de ayarlanan başlangıç ​​değerlerinin, uygulama kodunuzda kullanacağınız türlerin geçerli aralığı dahilinde olduğundan emin olun.

  1. using Firebase.RemoteConfig; aşağıdaki dosyaların en üstüne:
    • Assets/Hamster/Scripts/States/MainMenu.cs
    • Assets/Hamster/Scripts/MapObjects/AccelerationTile.cs
  2. AccelerationTile.cs Start yöntemini değiştirin:
    private void Start() {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       Acceleration = (float)remoteConfig.GetValue(AccelerationTileForceKey).DoubleValue;
    }
    
    Bu değişiklikle, hızlanma kutucuğu tarafından uygulanan kuvvet miktarı, Remote Config'den alınan kuvvetle değiştirilecektir.
  3. MainMenu.cs 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ürlerinin varsayılan değerlerinden farklı değerler olarak ayarlanmışsa, ana menü ekranındaki altyazıyı değiştirmek üzere ayarlanmıştır.

9. Parametre değerlerini uzaktan ayarlayın

Artık uygulamanız tam olarak araçlandırıldığına 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 'ye 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 seçeneğini devre dışı bırakın ve yeni varsayılan değer:

    Parametre adı (anahtar)

    Veri tipi

    Varsayılan değer

    ivme_tile_force

    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}}

    Remote Config Parameter editor with\nacceleration_tile_force populated
  4. Değişikliklerinizi kaydetmek için Kaydet'i tıklayın.
  5. Yeni yapılandırmayı yayınlamak ve yeni değerleri oyununuzun kullanımına sunmak için Yayınla'ya 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ı gözlemleyin. Mechahamster main screen with Debug\nMenu enabled

10. Çeşitleri sunmak için Remote Config koşullarını kullanın

Kullanıcının konuştuğu dile, nerede olduğuna, günün saatine veya kullandığı platforma göre uygulama deneyimini kullanıcıya sunmak isteyebilirsiniz. Remote Config koşulları, kullanıcıya farklı değerler (varyant adı verilen) sunmak için bu ve diğer nitelikleri tek tek veya birlikte kullanma olanağı sağlar.

Koşulların yaygın kullanımlarından biri, içeriği iOS ve Android platformları arasında değiştirmektir. Hangi platformun kullanıldığına bağlı olarak subtitle_override için farklı bir değer sunan bir koşulu uygulamak için aşağıdaki adımları izleyin.

  1. Firebase konsolunda projenizin Remote Config sekmesini açın.
  2. subtitle_override.
  3. Sol alt köşedeki Yeni ekle'yi tıklayın.
  4. Görüntülenen açılır menüde Koşullu değerin üzerine gelin ve Yeni koşul oluştur'a tıklayın. Remote Config parameter editor:\nConditional value option
  5. İstendiğinde, iOS'u hedefliyorsanız koşulu "iOS", Android'i hedefliyorsanız "Android" olarak adlandırın. Her ikisini de hedefliyorsanız, buradan birini seçin ve codelab'in geri kalanı için onu kullanın. Using the Define a new condition\ndialog to define an iOS-specific condition
  6. Şu durumda uygulanır: altında, Seç... açılır menüsüne tıklayın ve Platform öğesini seçin. Daha sonra uygun platformu seçin. Using the Define a new condition\neditor to select the iOS platform
  7. Koşulu oluşturmak için Koşul oluştur'a 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ğeri ş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'u hedefliyorsanız Değeri ş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 oyununuzun kullanımına sunmak için Yayınla'ya tıklayın.

Oyunu tekrar oluşturup çalıştırırsanız oyunun altyazısının platforma özgü varyantla değiştirildiğini görmelisiniz.

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ı Uzaktan Yapılandırma API'sine abone olabilir.

Nasıl çalışır

Güncellemeleri dinlemek için uygulamanızın OnConfigUpdateListener olayına abone olan bir yöntem uygulaması gerekir. Bir veya daha fazla yapılandırma güncelleme dinleyicisine abone olunduğunda, yeni Remote Config şablonları otomatik olarak getirilir, abone olunan işleyiciler çağrılır ve yeni değerlerin etkinleştirilmesi ve bunların uygulamanın geri kalanı tarafından kullanılabilir hale getirilmesi gibi yanıt olarak mantık gerçekleştirmek için kullanılabilir.

Gerçek zamanlı Uzaktan Yapılandırmayı 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

Config Update olayını kullanmanın ilk adımı, onu dinleyebilecek bir yöntem oluşturmaktır. Aşağıdaki yöntemi Assets/Hamster/Scripts/MainGame.cs dosyasına 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, yeni değerleri etkinleştirdiğinde güncellenmiş anahtarların bir listesini ve günlüğe bir başarı mesajı yazdıracaktır.

Güncelleme etkinliğine abone olun

Etkinlik çağrıldığında ActivateValuesOnConfigUpdate etkinleştirmek için etkinliğe abone olun. Assets/Hamster/Scripts/MainGame.cs dosyasındaki InitializeCommonDataAndStartGame() yöntemini aşağıdakiyle 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) olay işleyicisini olaya abone eder.

İşleyicinin sahip olduğu nesne yok edildiğinde abonelikten çıkın

Boş referans hatalarını önlemek için, olaylara abone olan yöntemlere sahip nesnelerin, yok edildiklerinde bu yöntemin aboneliğinden çıkması gerekir. Assets/Hamster/Scripts/MainGame.cs dosyasına aşağıdaki yöntemi ekleyin:

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

Yeni işlevselliği test edin

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

acceleration_tile_force değiştirin ve gözlemleyin

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

  1. acceleration_tile_force yanındaki düzenleme 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, mesajın 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 uygulamanız değiştirilen değerleri almıştır.
  4. Bunlardan hiçbirini görmüyorsanız, günlüklerinizin geri kalanına bakın ve ardından Yapılandırma Güncelleme işleyicisi oluşturma bölümündeki talimatları yeniden gözden geçirin, yanlış bir şey olup olmadığını belirlemek için günlükleri yeniden test edin ve yeniden kontrol edin.

12. Tebrikler!

Oyun içi değerleri uygulamanıza getirerek ve farklı değişkenler sunmak için koşulları kullanarak uzaktan kontrol etmek için Remote Config'i kullandınız!

Neleri ele aldık?

  • Remote Config değerleri nasıl ayarlanır ve alınır?
  • Alınan değerleri kullanmak için Unity C# kodunuzu nasıl kullanabilirsiniz?
  • Bileşik değerleri/nesneleri JSON değerleri olarak saklama, ölçme ve geçersiz kılma
  • Farklı değer değişkenlerini sunmak için Remote Config koşulları nasıl kullanılır?

Sonraki adımlar

Birden fazla değere sahip bir parametre kullandığında (koşullar veya yerellik nedeniyle) bir uygulama örneği tarafından hangi değerlerin elde edildiğinin mantığını daha iyi anlamak için parametre değeri önceliği hakkında bilgi edinin.