Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Ändern Sie die Remote-Konfiguration programmgesteuert

In diesem Dokument wird beschrieben, wie Sie den Satz von JSON-formatierten Parametern und Bedingungen, die als Remote Config-Vorlage bezeichnet werden, programmgesteuert lesen und ändern können. Auf diese Weise können Sie im Backend Vorlagenänderungen vornehmen, die die Client-App mithilfe der Client-Bibliothek abrufen kann.

Mithilfe der Remote Config REST-API oder der in diesem Handbuch beschriebenen Admin-SDKs können Sie die Verwaltung der Vorlage in der Firebase-Konsole umgehen, um Remote Config-Änderungen direkt in Ihre eigenen Prozesse zu integrieren. Mit Remote Config-Backend-APIs können Sie beispielsweise:

  • Planen von Remote Config-Updates . Durch die Verwendung von API-Aufrufen in Verbindung mit einem Cron-Job können Sie die Remote-Konfigurationswerte regelmäßig ändern.
  • Batch-Import-Konfigurationswerte, um effizient von Ihrem eigenen proprietären System zu Firebase Remote Config zu wechseln.
  • Verwenden Sie Remote Config mit Cloud-Funktionen für Firebase und ändern Sie die Werte in Ihrer App basierend auf Ereignissen, die serverseitig auftreten. Sie können beispielsweise Remote Config verwenden, um eine neue Funktion in Ihrer App zu bewerben, und diese Aktion dann automatisch deaktivieren, sobald Sie feststellen, dass genügend Personen mit der neuen Funktion interagiert haben.

In den folgenden Abschnitten dieses Handbuchs werden Vorgänge beschrieben, die Sie mit den Remote Config-Backend-APIs ausführen können. Informationen zum Überprüfen von Code, der diese Aufgaben über die REST-API ausführt, finden Sie in einer dieser Beispiel-Apps:

Ändern Sie die Remote-Konfiguration mit dem Firebase Admin SDK

Das Admin-SDK besteht aus einer Reihe von Serverbibliotheken, mit denen Sie aus privilegierten Umgebungen mit Firebase interagieren können. Das Admin SDK führt nicht nur Aktualisierungen der Remote-Konfiguration durch, sondern ermöglicht auch die Generierung und Überprüfung von Firebase-Authentifizierungstoken, das Lesen und Schreiben aus der Echtzeitdatenbank usw. Weitere Informationen zu den Voraussetzungen und der Einrichtung des Admin SDK finden Sie unter Hinzufügen des Firebase Admin SDK zu Ihrem Server .

In einem typischen Remote-Konfigurationsablauf erhalten Sie möglicherweise die aktuelle Vorlage, ändern einige der Parameter oder Parametergruppen und -bedingungen, validieren die Vorlage und veröffentlichen sie anschließend. Bevor Sie diese API-Aufrufe ausführen, müssen Sie Anforderungen vom SDK autorisieren.

Initialisieren Sie das SDK und autorisieren Sie API-Anforderungen

Wenn Sie das Admin-SDK ohne Parameter initialisieren, verwendet das SDK die Standardanmeldeinformationen der Google-Anwendung und liest Optionen aus der Umgebungsvariablen FIREBASE_CONFIG . Wenn der Inhalt der Variablen FIREBASE_CONFIG mit einem { beginnt, wird sie als JSON-Objekt analysiert. Andernfalls geht das SDK davon aus, dass die Zeichenfolge der Name einer JSON-Datei ist, die die Optionen enthält.

Zum Beispiel:

Node.js

const admin = require('firebase-admin');
admin.initializeApp();

Java

FileInputStream serviceAccount = new FileInputStream("service-account.json");
FirebaseOptions options = FirebaseOptions.builder()
        .setCredentials(GoogleCredentials.fromStream(serviceAccount))
        .build();
FirebaseApp.initializeApp(options);

Rufen Sie die aktuelle Remote-Konfigurationsvorlage ab

Beachten Sie bei der Arbeit mit Remote Config-Vorlagen, dass diese versioniert sind und dass jede Version von der Erstellung bis zum Ersetzen durch ein Update eine begrenzte Lebensdauer hat: 90 Tage mit einem Gesamtlimit von 300 gespeicherten Versionen. Weitere Informationen finden Sie unter Vorlagen und Versionierung .

Sie können die Backend-APIs verwenden, um die aktuell aktive Version der Remote Config-Vorlage im JSON-Format abzurufen. So erhalten Sie die Vorlage:

Node.js

function getTemplate() {
  var config = admin.remoteConfig();
  config.getTemplate()
      .then(function (template) {
        console.log('ETag from server: ' + template.etag);
        var templateStr = JSON.stringify(template);
        fs.writeFileSync('config.json', templateStr);
      })
      .catch(function (err) {
        console.error('Unable to get template');
        console.error(err);
      });
}

Java

Template template = FirebaseRemoteConfig.getInstance().getTemplateAsync().get();
// See the ETag of the fetched template.
System.out.println("ETag from server: " + template.getETag());

Ändern Sie die Remote-Konfigurationsparameter

Sie können Remote Config-Parameter und Parametergruppen programmgesteuert ändern und hinzufügen. Beispielsweise können Sie einer vorhandenen Parametergruppe mit dem Namen "new_menu" einen Parameter hinzufügen, um die Anzeige von saisonalen Informationen zu steuern:

Node.js

function addParameterToGroup(template) {
  template.parameterGroups['new_menu'].parameters['spring_season'] = {
    defaultValue: {
      useInAppDefault: true
    },
    description: 'spring season menu visibility.',
  };
}

Java

template.getParameterGroups().get("new_menu").getParameters()
        .put("spring_season", new Parameter()
                .setDefaultValue(ParameterValue.inAppDefault())
                .setDescription("spring season menu visibility.")
        );

Mit der API können Sie neue Parameter und Parametergruppen erstellen oder Standardwerte, bedingte Werte und Beschreibungen ändern. In allen Fällen müssen Sie die Vorlage nach Änderungen explizit veröffentlichen.

Ändern Sie die Remote-Konfigurationsbedingungen

Sie können Remote Config-Bedingungen und bedingte Werte programmgesteuert ändern und hinzufügen. So fügen Sie beispielsweise eine neue Bedingung hinzu:

Node.js

function addNewCondition(template) {
  template.conditions.push({
    name: 'android_en',
    expression: 'device.os == \'android\' && device.country in [\'us\', \'uk\']',
    tagColor: 'BLUE',
  });
}

Java

template.getConditions().add(new Condition("android_en",
        "device.os == 'android' && device.country in ['us', 'uk']", TagColor.BLUE));

In allen Fällen müssen Sie die Vorlage nach Änderungen explizit veröffentlichen.

Die Remote Config-Backend-APIs bieten verschiedene Bedingungen und Vergleichsoperatoren, mit denen Sie das Verhalten und das Erscheinungsbild Ihrer App ändern können. Weitere Informationen zu Bedingungen und den für diese Bedingungen unterstützten Operatoren finden Sie in der Referenz zu bedingten Ausdrücken .

Überprüfen Sie die Remote Config-Vorlage

Optional können Sie Ihre Updates vor dem Veröffentlichen wie folgt überprüfen:

Node.js

function validateTemplate(template) {
  admin.remoteConfig().validateTemplate(template)
      .then(function (validatedTemplate) {
        // The template is valid and safe to use.
        console.log('Template was valid and safe to use');
      })
      .catch(function (err) {
        console.error('Template is invalid and cannot be published');
        console.error(err);
      });
}

Java

try {
  Template validatedTemplate = FirebaseRemoteConfig.getInstance()
          .validateTemplateAsync(template).get();
  System.out.println("Template was valid and safe to use");
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Template is invalid and cannot be published");
    System.out.println(rcError.getMessage());
  }
}

Dieser Validierungsprozess sucht nach Fehlern wie doppelten Schlüsseln für Parameter und Bedingungen, ungültigen Bedingungsnamen oder nicht vorhandenen Bedingungen oder falsch formatierten Etiketten. Beispielsweise würde eine Anforderung, die mehr als die zulässige Anzahl von Schlüsseln enthält (2000), die Fehlermeldung "Anzahl der Param count too large .

Veröffentlichen Sie die Remote Config-Vorlage

Nachdem Sie eine Vorlage abgerufen und mit den gewünschten Updates überarbeitet haben, können Sie sie veröffentlichen. Durch das Veröffentlichen einer Vorlage, wie in diesem Abschnitt beschrieben, wird die gesamte vorhandene Konfigurationsvorlage durch die aktualisierte Datei ersetzt, und der neuen aktiven Vorlage wird eine Versionsnummer 1 zugewiesen, die größer ist als die ersetzte Vorlage.

Bei Bedarf können Sie mithilfe der REST-API ein Rollback auf die vorherige Version durchführen . Um das Risiko von Fehlern in einem Update zu verringern, können Sie diese vor dem Veröffentlichen überprüfen .

Node.js

function publishTemplate() {
  var config = admin.remoteConfig();
  var template = config.createTemplateFromJSON(
      fs.readFileSync('config.json', 'UTF8'));
  config.publishTemplate(template)
      .then(function (updatedTemplate) {
        console.log('Template has been published');
        console.log('ETag from server: ' + updatedTemplate.etag);
      })
      .catch(function (err) {
        console.error('Unable to publish template.');
        console.error(err);
      });
}

Java

try {
  Template publishedTemplate = FirebaseRemoteConfig.getInstance()
          .publishTemplateAsync(template).get();
  System.out.println("Template has been published");
  // See the ETag of the published template.
  System.out.println("ETag from server: " + publishedTemplate.getETag());
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Unable to publish template.");
    System.out.println(rcError.getMessage());
  }
}

Ändern Sie die Remote-Konfiguration mithilfe der REST-API

In diesem Abschnitt werden die Hauptfunktionen der Remote Config REST-API unter https://firebaseremoteconfig.googleapis.com . Ausführliche Informationen finden Sie in der API-Referenz .

Holen Sie sich ein Zugriffstoken, um API-Anforderungen zu authentifizieren und zu autorisieren

Firebase-Projekte unterstützen Google- Dienstkonten , mit denen Sie Firebase-Server-APIs von Ihrem App-Server oder einer vertrauenswürdigen Umgebung aus aufrufen können. Wenn Sie Code lokal entwickeln oder Ihre Anwendung lokal bereitstellen, können Sie über dieses Dienstkonto erhaltene Anmeldeinformationen verwenden, um Serveranforderungen zu autorisieren.

Um ein Dienstkonto zu authentifizieren und es für den Zugriff auf Firebase-Dienste zu autorisieren, müssen Sie eine private Schlüsseldatei im JSON-Format generieren.

So generieren Sie eine private Schlüsseldatei für Ihr Dienstkonto:

  1. Öffnen Sie in der Firebase-Konsole Einstellungen> Dienstkonten .

  2. Klicken Sie auf Neuen privaten Schlüssel generieren und bestätigen Sie, indem Sie auf Schlüssel generieren klicken.

  3. Speichern Sie die JSON-Datei mit dem Schlüssel sicher.

Bei der Autorisierung über ein Dienstkonto haben Sie zwei Möglichkeiten, die Anmeldeinformationen für Ihre Anwendung bereitzustellen. Sie können entweder die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS oder den Pfad explizit an den Dienstkontoschlüssel im Code übergeben. Die erste Option ist sicherer und wird dringend empfohlen.

So legen Sie die Umgebungsvariable fest:

Setzen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS auf den Dateipfad der JSON-Datei, die Ihren Dienstkontoschlüssel enthält. Diese Variable gilt nur für Ihre aktuelle Shell-Sitzung. Wenn Sie also eine neue Sitzung öffnen, legen Sie die Variable erneut fest.

Linux oder MacOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

Windows

Mit PowerShell:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

Nachdem Sie die oben genannten Schritte ausgeführt haben, kann Application Default Credentials (ADC) Ihre Anmeldeinformationen implizit ermitteln, sodass Sie beim Testen oder Ausführen in Umgebungen, die nicht von Google stammen, die Anmeldeinformationen für das Dienstkonto verwenden können.

Verwenden Sie Ihre Firebase-Anmeldeinformationen zusammen mit der Google API-Clientbibliothek für Ihre bevorzugte Sprache, um ein kurzlebiges OAuth 2.0-Zugriffstoken abzurufen:

node.js

 function getAccessToken() {
  return admin.credential.applicationDefault().getAccessToken()
      .then(accessToken => {
        return accessToken.access_token;
      })
      .catch(err => {
        console.error('Unable to get access token');
        console.error(err);
      });
}

In diesem Beispiel authentifiziert die Google API-Clientbibliothek die Anforderung mit einem JSON-Web-Token oder JWT. Weitere Informationen finden Sie unter JSON-Web-Token .

Python

def _get_access_token():
  """Retrieve a valid access token that can be used to authorize requests.

  :return: Access token.
  """
  credentials = ServiceAccountCredentials.from_json_keyfile_name(
      'service-account.json', SCOPES)
  access_token_info = credentials.get_access_token()
  return access_token_info.access_token

Java

private static String getAccessToken() throws IOException {
  GoogleCredential googleCredential = GoogleCredential
      .fromStream(new FileInputStream("service-account.json"))
      .createScoped(Arrays.asList(SCOPES));
  googleCredential.refreshToken();
  return googleCredential.getAccessToken();
}

Nach Ablauf Ihres Zugriffstokens wird die Tokenaktualisierungsmethode automatisch aufgerufen, um ein aktualisiertes Zugriffstoken abzurufen.

Um den Zugriff auf Remote Config zu autorisieren, fordern Sie den Bereich https://www.googleapis.com/auth/firebase.remoteconfig .

Ändern Sie die Remote-Konfigurationsvorlage

Beachten Sie bei der Arbeit mit Remote Config-Vorlagen, dass diese versioniert sind und dass jede Version von der Erstellung bis zum Ersetzen durch ein Update eine begrenzte Lebensdauer hat: 90 Tage mit einem Gesamtlimit von 300 gespeicherten Versionen. Weitere Informationen finden Sie unter Vorlagen und Versionierung .

Rufen Sie die aktuelle Remote-Konfigurationsvorlage ab

Sie können die Backend-APIs verwenden, um die aktuell aktive Version der Remote Config-Vorlage im JSON-Format abzurufen. Verwenden Sie die folgenden Befehle:

cURL

curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename

Dieser Befehl gibt die JSON-Nutzdaten in eine Datei und die Header (einschließlich des Etag) in eine separate Datei aus.

Rohe HTTP-Anfrage

Host: firebaseremoteconfig.googleapis.com

GET /v1/projects/my-project-id/remoteConfig HTTP/1.1
Authorization: Bearer token
Accept-Encoding: gzip

Dieser API-Aufruf gibt den folgenden JSON zusammen mit einem separaten Header zurück, der ein ETag enthält , das Sie für die nachfolgende Anforderung verwenden.

Überprüfen Sie die Remote Config-Vorlage

Optional können Sie Ihre Updates überprüfen, bevor Sie sie veröffentlichen. Überprüfen Sie Vorlagenaktualisierungen, indem Sie an Ihre Veröffentlichungsanforderung den URL-Parameter ?validate_only=true Validate_only ?validate_only=true anhängen. In der Antwort bedeutet ein Statuscode 200 und ein aktualisiertes Etag mit dem Suffix -0 , dass Ihr Update erfolgreich validiert wurde. Jede Antwort, die nicht 200 ist, zeigt an, dass die JSON-Daten Fehler enthalten, die Sie vor dem Veröffentlichen korrigieren müssen.

Aktualisieren Sie die Remote Config-Vorlage

Nachdem Sie eine Vorlage abgerufen und den JSON-Inhalt mit den gewünschten Updates überarbeitet haben, können Sie ihn veröffentlichen. Durch das Veröffentlichen einer Vorlage, wie in diesem Abschnitt beschrieben, wird die gesamte vorhandene Konfigurationsvorlage durch die aktualisierte Datei ersetzt, und der neuen aktiven Vorlage wird eine Versionsnummer 1 zugewiesen, die größer ist als die ersetzte Vorlage.

Bei Bedarf können Sie mithilfe der REST-API ein Rollback auf die vorherige Version durchführen . Um das Risiko von Fehlern in einem Update zu verringern, können Sie diese vor dem Veröffentlichen überprüfen .

cURL

curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -d @filename

Für diesen curl Befehl können Sie den Inhalt mit dem Zeichen "@" gefolgt vom Dateinamen angeben.

Rohe HTTP-Anfrage

Host: firebaseremoteconfig.googleapis.com
PUT /v1/projects/my-project-id/remoteConfig HTTP/1.1
Content-Length: size
Content-Type: application/json; UTF8
Authorization: Bearer token
If-Match: expected ETag
Accept-Encoding: gzip
JSON_HERE

Da dies eine Schreibanforderung ist, wird das ETag durch diesen Befehl geändert und ein aktualisiertes ETag wird in den Antwortheadern des nächsten PUT Befehls bereitgestellt.

Ändern Sie die Remote-Konfigurationsbedingungen

Sie können Remote Config-Bedingungen und bedingte Werte programmgesteuert ändern. Bei der REST-API müssen Sie die Vorlage direkt bearbeiten, um die Bedingungen zu ändern, bevor Sie die Vorlage veröffentlichen.

{
  "conditions": [{
    "name": "android_english",
    "expression": "device.os == 'android' && device.country in ['us', 'uk']",
    "tagColor": "BLUE"
  }, {
    "name": "tenPercent",
    "expression": "percent <= 10",
    "tagColor": "BROWN"
  }],
  "parameters": {
    "welcome_message": {
      "defaultValue": {
        "value": "Welcome to this sample app"
      },
      "conditionalValues": {
        "tenPercent": {
          "value": "Welcome to this new sample app"
        }
      },
      "description": "The sample app's welcome message"
    },
    "welcome_message_caps": {
      "defaultValue": {
        "value": "false"
      },
      "conditionalValues": {
        "android_english": {
          "value": "true"
        }
      },
      "description": "Whether the welcome message should be displayed in all capital letters."
    }
  }
}

Die obigen Änderungen definieren zuerst eine Reihe von Bedingungen und definieren dann Standardwerte und bedingungsbasierte Parameterwerte ( bedingte Werte ) für jeden Parameter. Außerdem wird für jedes Element eine optionale Beschreibung hinzugefügt. Wie Codekommentare sind diese für Entwickler bestimmt und werden in der App nicht angezeigt. Zur Versionskontrolle wird auch ein ETag bereitgestellt.

Die Remote Config-Backend-APIs bieten verschiedene Bedingungen und Vergleichsoperatoren, mit denen Sie das Verhalten und das Erscheinungsbild Ihrer App ändern können. Weitere Informationen zu Bedingungen und den für diese Bedingungen unterstützten Operatoren finden Sie in der Referenz zu bedingten Ausdrücken .

HTTP-Fehlercodes

Statuscode Bedeutung
200 Erfolgreich aktualisiert
400 Ein Validierungsfehler ist aufgetreten. Beispielsweise würde eine Anforderung, die mehr als die zulässige Anzahl von Schlüsseln enthält (2000), 400 (fehlerhafte Anforderung) mit der Fehlermeldung "Anzahl der Param count too large . Dieser HTTPS-Statuscode kann auch in diesen beiden Situationen auftreten:
  • Ein Versionskonfliktfehler ist aufgetreten, weil die Werte und Bedingungen seit dem letzten Abrufen eines ETag-Werts aktualisiert wurden. Um dies zu beheben, sollten Sie einen GET Befehl verwenden, um eine neue Vorlage und einen neuen ETag-Wert abzurufen, die Vorlage zu aktualisieren und dann mit dieser Vorlage und dem neuen ETag-Wert zu senden.
  • Ein PUT Befehl (Update Remote Config Template Request) wurde ohne Angabe eines If-Match Headers ausgeführt.
401 Es ist ein Autorisierungsfehler aufgetreten (es wurde kein Zugriffstoken bereitgestellt oder die Firebase Remote Config-REST-API wurde Ihrem Projekt in der Cloud Developer Console nicht hinzugefügt.)
403 Ein Authentifizierungsfehler ist aufgetreten (das falsche Zugriffstoken wurde bereitgestellt).
500 Ein interner Fehler ist aufgetreten. Wenn dieser Fehler auftritt, reichen Sie ein Firebase-Support-Ticket ein

Ein Statuscode von 200 bedeutet, dass die Remote-Konfigurationsvorlage (Parameter, Werte und Bedingungen für das Projekt) aktualisiert wurde und jetzt für Apps verfügbar ist, die dieses Projekt verwenden. Andere Statuscodes zeigen an, dass die zuvor vorhandene Remote-Konfigurationsvorlage noch gültig ist.

Nachdem Sie Updates für Ihre Vorlage gesendet haben, rufen Sie die Firebase-Konsole auf, um zu überprüfen, ob Ihre Änderungen wie erwartet angezeigt werden. Dies ist wichtig, da die Reihenfolge der Bedingungen die Bewertung beeinflusst (die erste Bedingung, die true bewertet true wird wirksam).

ETag-Nutzung und erzwungene Updates

Die Remote Config REST-API verwendet ein Entity-Tag (ETag), um Race-Bedingungen und überlappende Aktualisierungen von Ressourcen zu verhindern. Weitere Informationen zu ETags finden Sie unter ETag - HTTP .

Für die REST-API empfiehlt Google, dass Sie das vom letzten GET Befehl bereitgestellte ETag zwischenspeichern und diesen ETag-Wert im If-Match Anforderungsheader verwenden, wenn Sie PUT Befehle ausgeben. Wenn Ihr PUT Befehl zu einem HTTPS-Statuscode 409 führt, sollten Sie einen neuen GET Befehl ausgeben, um ein neues ETag und eine neue Vorlage für Ihren nächsten PUT Befehl zu erhalten.

Sie können das ETag und den Schutz davor umgehen, indem Sie die Aktualisierung der Remote-Konfigurationsvorlage wie folgt erzwingen: If-Match: * Dieser Ansatz wird jedoch nicht empfohlen, da die Gefahr besteht, dass Aktualisierungen Ihrer Remote-Konfiguration verloren gehen Vorlage, wenn mehrere Clients die Remote Config-Vorlage aktualisieren. Diese Art von Konflikt kann bei mehreren Clients auftreten, die die API verwenden, oder bei widersprüchlichen Aktualisierungen von API-Clients und Firebase-Konsolenbenutzern.

Anleitungen zum Verwalten von Remote Config-Vorlagenversionen finden Sie unter Remote Config-Vorlagen und -Versionierung .