1. Einführung
Mit Firebase Remote Config können Sie Schlüssel-Wert-Paare (auch als Parameter bezeichnet) in Ihrer App definieren und ihre Werte in der Cloud aktualisieren. So können Sie das Erscheinungsbild und das Verhalten Ihrer App ändern, ohne ein App-Update zu verteilen.
Sie fügen diese neue Funktion einem Beispielspiel hinzu: MechaHamster: Level Up with Firebase Edition. Dieses Beispielspiel ist eine neue Version des klassischen Firebase-Spiels MechaHamster. Die meisten integrierten Firebase-Funktionen wurden entfernt, sodass Sie die Möglichkeit haben, neue Firebase-Funktionen zu implementieren.
Damit Ihre App wie vorgesehen funktioniert, legen Sie Standardkonfigurationen für Werte im Beispielspielcode fest. Diese Werte können durch Werte überschrieben werden, die Sie in Remote Config in der Firebase Console festlegen.
Lerninhalte
- Remote Config-Werte in der Cloud festlegen und abrufen
- So instrumentieren Sie Ihren Unity-C#-Code, damit die abgerufenen Werte automatisch verwendet werden
- Zusammengesetzte Werte/Objekte als JSON-Werte speichern, instrumentieren und überschreiben
- Remote Config-Bedingungen verwenden, um verschiedenen Nutzergruppen unterschiedliche Wertvarianten bereitzustellen
Voraussetzungen
- Unity 2019.1.0f1 oder höher mit Unterstützung für iOS- und/oder Android-Builds
- Ein physisches Android-/iOS-Gerät oder ein Simulator/Emulator zum Erstellen und Ausführen des Spiels
2. Entwicklungsumgebung einrichten
In den folgenden Abschnitten wird beschrieben, wie Sie den Code für Level Up with Firebase herunterladen, in Unity öffnen und ein Firebase-Projekt hinzufügen. Dieses Beispielspiel aus „Level Up with Firebase“ wird in mehreren anderen Firebase + Unity-Codelabs verwendet. Möglicherweise haben Sie die Aufgaben in diesem Abschnitt also bereits erledigt. Wenn ja, können Sie diese Schritte überspringen und mit „Firebase SDKs für Unity hinzufügen“ fortfahren, um Remote Config dem Beispielspielcode hinzuzufügen.
Code herunterladen
Klonen Sie das GitHub-Repository für dieses Codelab über die Befehlszeile:
git clone https://github.com/firebase/level-up-with-firebase
Wenn Sie Git nicht installiert haben, können Sie das Repository auch als ZIP-Datei herunterladen.
Level Up with Firebase im Unity-Editor öffnen
- Starten Sie Unity Hub und klicken Sie auf dem Tab Projekte neben Öffnen auf den Drop-down-Pfeil.
- Klicken Sie auf Projekt vom Laufwerk hinzufügen.
- Wechseln Sie zum Verzeichnis mit dem Code und klicken Sie auf OK.
- Wählen Sie bei Aufforderung eine Unity-Editor-Version und Ihre Zielplattform (Android oder iOS) aus.
- Klicken Sie auf den Projektnamen level-up-with-firebase. Das Projekt wird im Unity-Editor geöffnet.
- Wenn der Editor nicht automatisch geöffnet wird, öffnen Sie
MainGameScene
im Unity-Editor auf dem Tab Project (Projekt) unter Assets > Hamster.
Weitere Informationen zur Installation und Verwendung von Unity finden Sie unter Mit Unity arbeiten.
3. Firebase zu einem Unity-Projekt hinzufügen
Firebase-Projekt erstellen
- Melden Sie sich mit Ihrem Google-Konto in der Firebase Console an.
- Klicken Sie auf die Schaltfläche, um ein neues Projekt zu erstellen, und geben Sie dann einen Projektnamen ein (z. B.
LevelUpWithFirebase
).
- Klicken Sie auf Weiter.
- Lesen und akzeptieren Sie bei Aufforderung die Firebase-Nutzungsbedingungen und klicken Sie dann auf Weiter.
- (Optional) Aktivieren Sie die KI-Unterstützung in der Firebase Console (als „Gemini in Firebase“ bezeichnet).
- Für dieses Codelab benötigen Sie Google Analytics, um Firebase-Produkte optimal nutzen zu können. Lassen Sie die Ein/Aus-Schaltfläche für die Google Analytics-Option also aktiviert. Folgen Sie der Anleitung auf dem Bildschirm, um Google Analytics einzurichten.
- Klicken Sie auf Projekt erstellen, warten Sie, bis Ihr Projekt bereitgestellt wurde, und klicken Sie dann auf Weiter.
App bei Firebase registrieren
- Öffnen Sie die Firebase Console und klicken Sie in der Mitte der Projektübersicht auf das Unity-Symbol, um den Einrichtungsworkflow zu starten. Wenn Sie Ihrem Firebase-Projekt bereits eine App hinzugefügt haben, klicken Sie auf App hinzufügen, um die Plattformoptionen aufzurufen.
- Wählen Sie diese Option aus, um sowohl das Apple-Build-Ziel (iOS) als auch das Android-Build-Ziel zu registrieren.
- Geben Sie die plattformspezifischen IDs Ihres Unity-Projekts ein. Geben Sie für dieses Codelab Folgendes ein:
- Für Apple (iOS): Geben Sie im Feld iOS-Bundle-ID
com.google.firebase.level-up
ein. - Für Android: Geben Sie im Feld Android-Paketname
com.google.firebase.level_up
ein.
- Für Apple (iOS): Geben Sie im Feld iOS-Bundle-ID
- Optional können Sie plattformspezifische Aliasse für Ihr Unity-Projekt eingeben.
- Klicken Sie auf App registrieren und fahren Sie mit dem Bereich Konfigurationsdatei herunterladen fort.
- Wiederholen Sie den Vorgang für das Build-Ziel, das Sie beim ersten Mal nicht ausgewählt haben.
Firebase-Konfigurationsdateien hinzufügen
Nachdem Sie auf App registrieren geklickt haben, werden Sie aufgefordert, zwei Konfigurationsdateien herunterzuladen (eine Konfigurationsdatei für jedes Build-Ziel). Ihr Unity-Projekt benötigt die Firebase-Metadaten in diesen Dateien, um eine Verbindung zu Firebase herzustellen.
- Laden Sie beide verfügbaren Konfigurationsdateien herunter:
- Für Apple (iOS): Laden Sie GoogleService-Info.plist herunter.
- Für Android: Laden Sie google-services.json herunter.
- Öffnen Sie das Fenster Project Ihres Unity-Projekts und verschieben Sie beide Konfigurationsdateien in den Ordner Assets.
- Klicken Sie in der Firebase Console im Einrichtungsablauf auf Weiter und fahren Sie mit dem Hinzufügen von Firebase-SDKs für Unity fort.
Hinweis:Sie können diese Dateien jederzeit wieder herunterladen, indem Sie die allgemeinen Einstellungen Ihres Projekts öffnen, zum Bereich Ihre Apps scrollen und dann auf die Schaltfläche zum Herunterladen der gewünschten Konfigurationsdatei klicken.
Firebase SDKs für Unity hinzufügen
- Klicken Sie in der Firebase Console auf Firebase Unity SDK herunterladen.
- Entpacken Sie das SDK an einem für Sie günstigen Ort.
- Rufen Sie in Ihrem geöffneten Unity-Projekt Assets > Import Package > Custom Package auf.
- Rufen Sie im Dialogfeld Paket importieren das Verzeichnis auf, das das entpackte SDK enthält, wählen Sie
FirebaseAnalytics.unitypackage
aus und klicken Sie dann auf Öffnen. - Klicken Sie im Dialogfeld Import Unity Package auf Import.
- Wiederholen Sie die vorherigen Schritte, um die folgenden beiden Pakete zu importieren:
FirebaseRemoteConfig.unitypackage
FirebaseCrashlytics.unitypackage
Crashlytics ist ein schlanker Echtzeit-Absturzreporter, mit dem Sie Stabilitätsprobleme, die die Qualität Ihrer App beeinträchtigen, erfassen, priorisieren und beheben können. Wenn Sie Crashlytics noch nicht verwendet haben, sollten Sie den Crashlytics-Lernpfad für Unity durcharbeiten.
- Kehren Sie zur Firebase Console zurück und klicken Sie im Einrichtungs-Workflow auf Weiter.
Weitere Informationen zum Hinzufügen von Firebase SDKs zu Unity-Projekten finden Sie unter Zusätzliche Unity-Installationsoptionen.
4. Remote Config-Standardwerte festlegen und neue Werte abrufen
In diesem Codelab aktualisieren Sie Objekte, die Werte verwenden, die im Code definiert oder im Unity-Editor serialisiert sind, sodass sie Werte verwenden, die mit Remote Config instrumentiert wurden. Sie konfigurieren Standardwerte für jeden Parameter mit SetDefaultsAsync
, damit sich Ihre App wie vorgesehen verhält, bevor sie eine Verbindung zum Remote Config-Backend herstellt. Ihre App bleibt auf dem neuesten Stand, indem sie neue Werte aus Remote Config abruft und aktiviert, damit sie im Code verwendet werden können.
Um neue Werte aus Remote Config abzurufen, sind in der Datei Assets/Hamster/Scripts/MainGame.cs
bereits einige nicht implementierte Methoden vorhanden, die abgeschlossen werden müssen.
- Fügen Sie
MainGame.cs
die folgendenusing
-Anweisungen hinzu: Dasusing Firebase.Crashlytics; using Firebase.Extensions; using Firebase.RemoteConfig;
Firebase.Extensions
-Modul enthält einige Erweiterungen der C# Tasks API, die die Verwaltung des Initialisierungsprozesses mit Callbacks vereinfachen. - Fügen Sie die Firebase-Initialisierung zu Ihrer
MainGame.cs
Start()
-Methode hinzu, indem Sie die vorhandene Methode „InitializeCommonDataAndStartGame()“ durch die derzeit nicht implementierte MethodeInitializeFirebaseAndStartGame()
ersetzen:void Start() { Screen.SetResolution(Screen.width / 2, Screen.height / 2, true); InitializeFirebaseAndStartGame(); }
- Suchen Sie in
MainGame.cs
nachInitializeFirebaseAndStartGame()
. Deklarieren Sie eine App-Variable und überschreiben Sie die Implementierung der Methode so: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"); } }); }
- Bei erfolgreicher Firebase-Initialisierung wird
SetRemoteConfigDefaults
aufgerufen, um Standardwerte in der App festzulegen. Ersetzen Sie die nicht implementierte Methode „SetRemoteConfigDefaults“ durch Folgendes: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. Neue Werte abrufen und aktivieren (falls erforderlich)
Wir müssen jetzt die vorhandene Methode FetchRemoteConfig
vervollständigen. Dadurch werden Aufrufe der Remote Config-Methoden FetchAsync
(mit der neue Werte aus Remote Config abgerufen werden) und ActivateAsync
(mit der die abgerufenen Werte aktiviert werden, damit sie im Code verfügbar sind) über einen Callback-Parameter namens onFetchAndActivateSuccessful
verkettet.
Der im vorherigen Schritt hinzugefügte Startcode ruft FetchRemoteConfig
mit InitializeCommonDataAndStartGame
als Callback auf, um das Spiel am Ende der Sequenz zu starten. Sie können alternative Rückrufe an FetchRemoteConfig
übergeben, um den Abruf mit unterschiedlichen Ergebnissen aufzurufen. Ein Beispiel (das Sie später implementieren werden) ist die Übergabe einer Methode, die neue Benutzeroberflächenmenüs öffnet, die von Remote Config-Werten abhängen. Dadurch werden die Menüs erst geöffnet, nachdem diese Werte abgerufen und aktiviert wurden.
- Fügen Sie den folgenden Code in
FetchRemoteConfig
ein: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); }); }
- Vervollständigen Sie als Nächstes die Methode
ActivateRetrievedRemoteConfigValues
, die einen übergebenen Callback,onFetchAndActivateSuccessful
, empfängt. Wenn die Aktivierung abgeschlossen ist, wird der angegebene Callback aufgerufen: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(); }); } }
Wenn SetRemoteConfigDefaults
ActivateRetrievedRemoteConfigValues
im Initialisierungskontext nachgelagert aufruft, ruft ActivateRetrievedRemoteConfigValues
den vorherigen Startpunkt InitializeCommonDataAndStartGame
auf, um das Spiel zu starten, indem das Hauptmenü geöffnet wird.
6. Remote Config-Ladestrategie einrichten
Wenn Sie Werte zu einem anderen Zeitpunkt während der Nutzung der App abrufen und aktivieren möchten, müssen Sie diese Funktionen noch einmal aufrufen. Wenn Objekte die Werte im Cache gespeichert haben, müssen sie benachrichtigt werden, damit sie ein Update durchführen. Wenn Sie eine Strategie zum erneuten Abrufen von Remote Config-Werten entwickeln möchten, sollten Sie überlegen, wann die neuen Werte benötigt werden und wann das Abrufen und Aktivieren neuer Werte initiiert werden soll, damit sie sich während der Verwendung nicht ändern.
In der aktuellen Implementierung werden Remote Config-Werte beim Start der App abgerufen und aktiviert. Abrufe können bei Menüänderungen ausgeblendet werden, während die Interaktion während des Übergangs blockiert wird. Außerdem ist dies oft der relevanteste Zeitpunkt, um neue Werte abzurufen, da eine Änderung des Menüzustands oft verwendet werden kann, um zu wissen, „wohin“ der Spieler geht, und vorherzusagen, dass ein Wert verwendet wird.
Wenn man sich das Menüsystem von Mechahamster ansieht, ist es am einfachsten, Menüaktualisierungen hinzuzufügen, die die Benutzeroberfläche blockieren, indem man es vor dem Fortsetzen des Hauptmenüs aufruft (insbesondere, wenn darauf zugegriffen wird, indem man aus einem anderen Menü zurückkehrt) und die Methode zur Anzeige der Benutzeroberfläche als onFetchAndActivateSuccessful
-Callback übergibt. Das Gleiche gilt für das Menü Level Select (Level auswählen).
Beim ersten Laden im Rahmen des App-Starts wird jede Menünavigation über das Hauptmenü durch die erste dieser beiden Aktionen verarbeitet. Wenn das Menü Level Select (Level auswählen) erneut aufgerufen wird, wird ebenfalls eine Aktualisierung ausgelöst. Der erste Aufruf des Menüs zur Levelauswahl ist nicht relevant, da es nur über das Hauptmenü aufgerufen werden kann und somit bereits abgedeckt ist.
Wenn Sie dies in der App aktivieren möchten, führen Sie die entsprechenden Methoden im Hauptmenü und in den Dateien zur Auswahl der Ebene aus. Dadurch wird die UI-Anzeige blockiert, bis FetchAsync
und ActivateAsync
abgeschlossen sind:
- Öffnen Sie
Assets/Hamster/Scripts/States/MainMenu.cs
und ersetzen Sie die vorhandeneResume
-Methode durch Folgendes:public override void Resume(StateExitValue results) { CommonData.mainGame.SelectAndPlayMusic(CommonData.prefabs.menuMusic, true); CommonData.mainGame.FetchRemoteConfig(InitializeUI); }
- Speichern Sie die Datei.
- Öffnen Sie
Assets/Hamster/Scripts/States/BaseLevelSelect.cs
und ersetzen Sie die vorhandeneResume
-Methode durch Folgendes:public override void Resume(StateExitValue results) { CommonData.mainGame.FetchRemoteConfig(ShowUI); }
- Speichern Sie die Datei.
7. Abrufverhalten debuggen/validieren
An dieser Stelle ist es sinnvoll, eine Diagnose-/Validierungsprüfung durchzuführen. Mit der folgenden Vorgehensweise können Sie manuell testen, wie und ob Ihre App Remote Config-Werte abruft und aktiviert.
Die Informationen werden in den Protokollen des Simulators, des Geräts oder des Editors ausgegeben. Unter iOS können Sie Geräte- und Simulatorprotokolle in Xcode aufrufen. Unter Android können Sie Logs mit dem Befehl adb logcat
aufrufen. Wenn Sie den Code in Unity ausführen, indem Sie im Editor auf „Play“ klicken, werden die Protokolle auf dem Tab „Console“ angezeigt.
- Erstellen Sie die App neu und führen Sie sie aus (im Editor, auf einem Gerät oder in einem Simulator).
- Nachdem das Hauptmenü des Spiels angezeigt wird, sehen Sie sich die Log-Ausgabe des Spiels an. Sie sollte die von
Debug.Log
inFetchRemoteConfig
undActivateRetrievedRemoteConfigValues
generierten Logs enthalten. Dort sollten die Meldungen „Daten werden abgerufen…“ und „Remotedaten geladen und bereit“ angezeigt werden. Achten Sie auf die Zeitstempel am Anfang dieser Nachrichten. - Drücken Sie im Spiel auf Lizenz.
- Tippen Sie auf OK.
- Warte, bis das Hauptmenü des Spiels angezeigt wird.
- Sehen Sie sich die Logausgabe Ihres Spiels an. Sie sollte den Ausgaben im vorherigen Schritt ähneln, aber neue Zeitstempel enthalten, die der Uhrzeit entsprechen, die auf der Systemuhr des Geräts eingestellt ist, auf dem Sie das Spiel ausführen.
- Drücken Sie im Spiel auf Spielen.
- Drücken Sie auf Let's Roll.
- Bringen Sie den Ball mit den Pfeiltasten auf der Tastatur ins Tor. Dadurch wird das Menü „Level abgeschlossen“ geöffnet.
- Drücken Sie auf Pegel.
- Warte, bis das Menü Level Select (Level auswählen) geladen ist.
- Sehen Sie sich die Protokollausgabe Ihres Spiels noch einmal an. Sie sollten mit den Log-Nachrichten aus den vorherigen Schritten übereinstimmen, aber neuere Zeitstempel haben (entsprechend der Zeit, die auf der Systemuhr eingestellt ist, auf der Sie das Spiel ausführen).
Wenn einer dieser Werte nicht in Ihrer App angezeigt wurde, ist möglicherweise ein Teil des Abruf- und Aktivierungsablaufs oder Ihres Geräts falsch konfiguriert. Wenn das erste Log nicht angezeigt wird, kann es sein, dass das Spiel nicht gestartet wird. Sehen Sie in der Editor-Konsole oder in den Geräte-/Emulatorlogs nach Warnungen und Fehlern zu Ihrem Projekt/Ihrer Umgebung und untersuchen Sie diese. Das Problem kann so einfach sein wie eine fehlende Internetverbindung.
Wenn die ersten Logs vom Laden des Menüs angezeigt werden, aber einer der nachfolgenden nicht, untersuchen Sie die Resume
-Methoden in Assets/Hamster/Scripts/States/MainMenu.cs
und Assets/Hamster/Scripts/States/BaseLevelSelect.cs
und implementieren Sie sie gegebenenfalls neu.
8. Code instrumentieren
Nachdem Sie In-App-Parameterwerte in SetDefaultsAsync()
konfiguriert und die aktuellen Versionen mit FetchAsync()
und ActivateAsync()
verfügbar gemacht haben, können Sie im Code auf diese Werte verweisen und sie verwenden.
Nachdem Sie Werte im Remote Config-Backend festgelegt haben, können Sie sie abrufen und aktivieren (oder beides gleichzeitig ausführen). Diese Werte sind dann für Ihre App verfügbar. Rufen Sie GetValue(string key)
auf und wählen Sie einen Parameterschlüssel als Argument aus, um die Werte zu verwenden. Dadurch wird ein ConfigValue
zurückgegeben, das Eigenschaften für den Zugriff auf den Wert als verschiedene unterstützte Typen hat: string
, bool
, long
, double
. In diesem Projekt und den meisten Gaming-Anwendungsfällen müssen Sie die letzten beiden Typen in die idiomatischen Typen int
und float
umwandeln. Damit diese Conversions keine Probleme verursachen, müssen die in Remote Config festgelegten Anfangswerte im gültigen Bereich der Typen liegen, die Sie im App-Code verwenden.
- Importieren Sie Remote Config, indem Sie
using Firebase.RemoteConfig;
oben in die folgenden Dateien einfügen:Assets/Hamster/Scripts/States/MainMenu.cs
Assets/Hamster/Scripts/MapObjects/AccelerationTile.cs
- Ersetzen Sie die
Start
-Methode vonAccelerationTile.cs
: Durch diese Änderung wird die von der Beschleunigungs-Kachel ausgeübte Kraft auf einen Wert geändert, der von Remote Config empfangen wird.private void Start() { var remoteConfig = FirebaseRemoteConfig.DefaultInstance; Acceleration = (float)remoteConfig.GetValue(AccelerationTileForceKey).DoubleValue; }
- Bearbeiten Sie den Text der Methode
InitializeUI
vonMainMenu.cs
: Hier wirdprivate 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(); }
subtitleOverride
so festgelegt, dass der Untertitel auf dem Hauptmenübildschirm geändert wird, wenn alle Felder in der Cloud auf andere Werte als die Standardwerte des Typs festgelegt sind.
9. Parameterwerte per Remote-Konfiguration festlegen
Nachdem Ihre App vollständig instrumentiert ist, können Sie Parameter und Werte auf dem Remote Config-Server konfigurieren. In diesem Codelab richten wir das über die Firebase Console ein.
- Öffnen Sie Ihr Projekt in der Firebase Console.
- Wählen Sie im Menü „Remote Config“ aus, um das Remote Config-Dashboard aufzurufen.
- Klicken Sie für jeden Parameter, den Sie in Ihrer App definiert und in der folgenden Tabelle aufgeführt haben, auf Parameter hinzufügen, fügen Sie den Parameternamen (Schlüssel) ein, wählen Sie den in der Tabelle aufgeführten Datentyp aus, deaktivieren Sie In-App-Standardwert verwenden und fügen Sie den neuen Standardwert ein:
Parametername (Schlüssel)
Datentyp
Standardwert
acceleration_tile_force
Zahl
100
subtitle_override
JSON
{"text":"We overwrote the subtitle","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
- Klicken Sie auf Speichern, um die Änderungen zu speichern.
- Klicken Sie auf Veröffentlichen, um die neue Konfiguration zu veröffentlichen und die neuen Werte für Ihr Spiel verfügbar zu machen.
- Führen Sie Ihre App nach dem Festlegen dieser Remote-Parameter noch einmal aus und beobachten Sie, wie die ursprünglichen Standardwerte überschrieben werden.
10. Remote Config-Bedingungen zum Bereitstellen von Varianten verwenden
Sie können die App-Nutzung an den Nutzer anpassen, indem Sie die Sprache, den Standort, die Tageszeit oder die verwendete Plattform berücksichtigen. Mit Remote Config-Bedingungen können Sie diese und andere Attribute einzeln oder in Kombination verwenden, um dem Nutzer verschiedene Werte (Varianten) zu präsentieren.
Eine häufige Verwendung von Bedingungen ist das Ändern von Inhalten zwischen iOS- und Android-Plattformen. Gehen Sie so vor, um eine Bedingung zu implementieren, mit der je nach verwendeter Plattform ein anderer Wert für subtitle_override
bereitgestellt wird.
- Öffnen Sie in der Firebase Console den Tab „Remote Config“ Ihres Projekts.
- Klicken Sie auf die Schaltfläche zum Bearbeiten von
subtitle_override.
. - Klicken Sie links unten auf Neu hinzufügen.
- Bewegen Sie den Mauszeiger im Drop-down-Menü, das angezeigt wird, auf Bedingter Wert und klicken Sie auf Neue Bedingung erstellen.
- Geben Sie bei Aufforderung den Namen „is iOS“ ein, wenn Sie iOS-Nutzer ansprechen möchten, oder „is Android“, wenn Sie Android-Nutzer ansprechen möchten. Wenn Sie beide Plattformen als Zielgruppe festlegen, wählen Sie hier einfach eine aus und verwenden Sie sie für den Rest des Codelabs.
- Klicken Sie unter Gilt, wenn… auf das Drop-down-Menü Auswählen… und wählen Sie Plattform aus. Wählen Sie dann die entsprechende Plattform aus.
- Klicken Sie auf Bedingung erstellen, um die Bedingung zu erstellen. Das Dialogfeld „Parameter bearbeiten“ wird wieder angezeigt und Sie können jetzt einen Wert festlegen:
- Wenn Sie Android-Geräte als Zielgruppe verwenden, legen Sie den Wert auf Folgendes fest:
{"text":"Level Up Android Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
- Wenn Sie iOS als Zielgruppe festlegen, legen Sie den Wert auf Folgendes fest:
{"text":"Level Up iOS Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
- Wenn Sie Android-Geräte als Zielgruppe verwenden, legen Sie den Wert auf Folgendes fest:
- Klicken Sie auf Speichern, um die Änderungen zu speichern.
- Klicken Sie auf Veröffentlichen, um die neue Konfiguration zu veröffentlichen und die neuen Werte für Ihr Spiel verfügbar zu machen.
Wenn Sie das Spiel noch einmal erstellen und ausführen, sollte der Untertitel des Spiels durch die plattformspezifische Variante ersetzt werden.
11. Remote Config für den Empfang von Echtzeitupdates konfigurieren
Remote Config kann jetzt Remote Config-Vorlagen in Echtzeit abrufen und aktualisieren. Apps können die neue Echtzeit-Remote Config API abonnieren, um auf Konfigurationsänderungen und aktualisierte Werte zu reagieren.
Funktionsweise
Damit Ihre App auf Updates warten kann, muss sie eine Methode implementieren, die das OnConfigUpdateListener
-Ereignis abonniert. Wenn ein oder mehrere Listener für Konfigurationsupdates abonniert sind, werden neue Remote Config-Vorlagen automatisch abgerufen. Die abonnierten Handler werden aufgerufen und können verwendet werden, um Logik als Reaktion auszuführen, z. B. die neuen Werte zu aktivieren und für den Rest der Anwendung verfügbar zu machen.
Echtzeit-Remote Config implementieren
Um zu veranschaulichen, wie das im Spiel funktioniert, nehmen Sie die folgenden Änderungen an Ihrem Code vor.
Handler für Konfigurationsupdates erstellen
Der erste Schritt bei der Verwendung des Ereignisses „Config Update“ besteht darin, eine Methode zu erstellen, die darauf warten kann. Fügen Sie die folgende Methode in Assets/Hamster/Scripts/MainGame.cs
ein:
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.");
});
}
Bei dieser Methode wird eine Liste der aktualisierten Schlüssel und eine Erfolgsmeldung im Log ausgegeben, wenn die neuen Werte aktiviert werden.
Das Update-Ereignis abonnieren
Wenn Sie ActivateValuesOnConfigUpdate
aktivieren möchten, wenn das Ereignis aufgerufen wird, abonnieren Sie das Ereignis. Ersetzen Sie die Methode InitializeCommonDataAndStartGame()
in Assets/Hamster/Scripts/MainGame.cs
durch Folgendes:
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());
}
In der neuen Zeile (die mit += ActivateValuesOnConfigUpdate;
endet) wird der Event-Handler für das Ereignis registriert.
Abonnement beenden, wenn das zugehörige Objekt des Handlers zerstört wird
Um Null-Referenzfehler zu vermeiden, müssen Objekte mit Methoden, die Ereignisse abonnieren, die Methode abmelden, wenn sie zerstört werden. Fügen Sie Assets/Hamster/Scripts/MainGame.cs
die folgende Methode hinzu:
private void OnDestroy()
{
FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener -= ActivateValuesOnConfigUpdate;
}
Neue Funktion testen
Um die neue Funktion zu testen, probieren Sie die erstellte App aus. Für das folgende Verfahren ist es erforderlich, dass Sie das Log lesen und auf einem echten Gerät debuggen können.
acceleration_tile_force
ändern und beobachten
Nachdem Sie Ihre App gestartet haben, gehen Sie in der Firebase Console zum Abschnitt „Remote Config“:
- Klicken Sie neben
acceleration_tile_force
auf die Schaltfläche „Bearbeiten“.
- Ändern Sie den Wert in „120“ und drücken Sie Speichern.
- Klicken Sie auf die Schaltfläche Änderungen veröffentlichen.
- Prüfen Sie das Log.
- Wenn Sie eine Log-Meldung sehen, die mit „Error occurred while listening“ (Fehler beim Zuhören) beginnt, lesen Sie den Rest der Meldung und versuchen Sie, den Fehler anhand der Fehlermeldung zu beheben.
- Wenn Sie ein Log sehen, das mit „Updated keys“ beginnt, hat Ihre App die geänderten Werte erhalten.
- Wenn Sie keines der beiden sehen, sehen Sie sich den Rest Ihrer Logs an und lesen Sie dann die Anleitung unter Config Update-Handler erstellen noch einmal. Führen Sie den Test noch einmal aus und prüfen Sie die Logs noch einmal, um festzustellen, ob etwas nicht stimmt.
12. Glückwunsch!
Sie haben Remote Config verwendet, um In-Game-Werte remote zu steuern, indem Sie sie in Ihrer App abgerufen und Bedingungen verwendet haben, um verschiedene Varianten bereitzustellen.
Behandelte Themen
- Remote Config-Werte festlegen und abrufen
- Unity-C#-Code instrumentieren, um die abgerufenen Werte zu verwenden
- Zusammengesetzte Werte/Objekte als JSON-Werte speichern, instrumentieren und überschreiben
- Bedingungen in Remote Config verwenden, um verschiedene Wertvarianten bereitzustellen