Ändern Sie Remote Config programmgesteuert

Dieses Dokument beschreibt , wie Sie programmatisch lesen und den Satz von JSON-Format Parametern und Bedingungen wie die bekannten ändern Remote - Config - Vorlage . Auf diese Weise können Sie Vorlagenänderungen am Back-End vornehmen, die die Client-App mithilfe der Clientbibliothek abrufen kann.

Mit Hilfe der Remote - Config - REST - API oder die Admin - SDKs in diesem Handbuch beschrieben, können Sie Bypass die Vorlage in der Konsole die Verwaltung von Firebase direkt integrieren Remote - Config in eigene Prozesse verändert. Mit Remote Config-Back-End-APIs könnten Sie beispielsweise:

  • Planen Remote - Config - Updates. Durch die Verwendung von API-Aufrufen in Verbindung mit einem Cron-Job können Sie die Remote Config-Werte regelmäßig ändern.
  • Batch - Import Config - Wert , um Übergang effizient von Ihrem eigenen proprietären System auf Firebase Fern Config.
  • Verwenden Sie Remote - Config mit Cloud - Funktionen für die Firebase, Wertewandel in der App basierend auf Ereignissen , die serverseitige passieren. Sie können beispielsweise Remote Config verwenden, um eine neue Funktion in Ihrer App zu bewerben, und diese Werbung 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-Back-End-APIs ausführen können. Um Code zu überprüfen, der diese Aufgaben über die REST-API ausführt, sehen Sie sich eine dieser Beispiel-Apps an:

Remote Config mit dem Firebase Admin SDK ändern

Das Admin SDK besteht aus einer Reihe von Serverbibliotheken, mit denen Sie von privilegierten Umgebungen aus mit Firebase interagieren können. Neben der Durchführung von Updates für Remote Config ermöglicht das Admin-SDK die Generierung und Überprüfung von Firebase-Authentifizierungstoken, das Lesen und Schreiben aus der Echtzeitdatenbank usw. Um mehr zu erfahren über Admin SDK Voraussetzungen und Installation finden Sie die Firebase Admin SDK zu Ihrem Server hinzufügen .

In einem typischen Remote Config-Flow können Sie die aktuelle Vorlage abrufen, einige der Parameter oder Parametergruppen und Bedingungen ändern, die Vorlage validieren und dann veröffentlichen. Bevor Sie diese API-Aufrufe ausführen, müssen Sie Anfragen vom SDK autorisieren.

SDK initialisieren und API-Anfragen autorisieren

Wenn Sie das Admin SDK ohne Parameter initialisieren, verwendet das SDK Standardanmeldeinformationen Google - FIREBASE_CONFIG Anwendung und liest Optionen aus dem FIREBASE_CONFIG Umgebungsvariable. Wenn der Inhalt des FIREBASE_CONFIG Variable mit einem beginnt { wird es als JSON - Objekt analysiert werden. 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);

Holen Sie sich die aktuelle Remote-Konfigurationsvorlage

Beachten Sie bei der Arbeit mit Remote Config-Vorlagen, dass diese versioniert sind und dass jede Version eine begrenzte Lebensdauer vom Zeitpunkt der Erstellung bis zu dem Zeitpunkt hat, an dem Sie sie durch ein Update ersetzen: 90 Tage, mit einer Gesamtbeschränkung von 300 gespeicherten Versionen. Siehe Vorlagen und Versioning für weitere Informationen.

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

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 Config-Parameter

Sie können Remote Config-Parameter und Parametergruppen programmgesteuert ändern und hinzufügen. Beispielsweise können Sie zu einer bestehenden Parametergruppe namens "new_menu" einen Parameter hinzufügen, um die Anzeige von Saisoninformationen 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 Bedingungen für die Remote-Konfiguration

Sie können Remote Config-Bedingungen und -Bedingungswerte 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 Back-End-APIs von Remote Config bieten mehrere Bedingungen und Vergleichsoperatoren, mit denen Sie das Verhalten und die Darstellung Ihrer App ändern können. Um mehr über die Bedingungen und die Betreiber zu lernen für diese Bedingungen unterstützt werden , finden Sie in der Bedingungsausdruck Referenz .

Validieren Sie die Remote Config-Vorlage

Optional können Sie Ihre Updates vor der Veröffentlichung validieren, wie gezeigt:

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 prüft auf Fehler wie doppelte Schlüssel für Parameter und Bedingungen, ungültige Bedingungsnamen oder nicht vorhandene Bedingungen oder falsch formatierte E-Tags. Zum Beispiel kann eine Anforderung mehr als die erlaubte Anzahl von Tasten-2000-zurückkehren würde die Fehlermeldung enthält, Param count too large .

Veröffentlichen Sie die Remote Config-Vorlage

Nachdem Sie eine Vorlage abgerufen und mit Ihren gewünschten Aktualisierungen überarbeitet haben, können Sie sie anschließend 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 zugewiesen, die um eine Nummer größer ist als die der Vorlage, die sie ersetzt hat.

Bei Bedarf können Sie das REST - API verwenden Rolle zurück auf die vorherige Version . Um das Risiko von Fehlern in einem Update zu mildern, können Sie überprüfen , vor der Veröffentlichung .

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 Remote Config mithilfe der REST-API

In diesem Abschnitt werden die wichtigsten Funktionen des Remote Config REST API auf https://firebaseremoteconfig.googleapis.com . Für alle Einzelheiten finden Sie in die API - Referenz .

Erhalten Sie ein Zugriffstoken, um API-Anfragen zu authentifizieren und zu autorisieren

Firebase Projekte unterstützen Google Dienstkonten , die Sie Firebase Server aufrufen APIs von Ihrem App - Server oder vertrauenswürdigen Umgebung verwenden können. Wenn Sie Code lokal entwickeln oder Ihre Anwendung lokal bereitstellen, können Sie die über dieses Dienstkonto abgerufenen 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. In der Firebase Konsole, öffnen Sie Einstellungen> Dienstkonten .

  2. Generieren Klicken Sie auf Neu Private Key, dann bestätigen Sie Schlüssel generieren.

  3. Speichern Sie die JSON-Datei, die den Schlüssel enthält, sicher.

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

So legen Sie die Umgebungsvariable fest:

Legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS auf den Dateipfad der JSON - Datei , die Ihr Dienstkonto Schlü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"

Fenster

Mit PowerShell:

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

Nachdem Sie die obigen Schritte ausgeführt haben, kann Application Default Credentials (ADC) Ihre Anmeldeinformationen implizit ermitteln, sodass Sie die Anmeldeinformationen für Dienstkonten beim Testen oder Ausführen in Umgebungen außerhalb von Google verwenden können.

Verwenden Sie Ihre Firebase Anmeldeinformationen zusammen mit der Google Auth - Bibliothek für die gewünschte Sprache Token einen kurzlebigen OAuth 2.0 Zugang zu erhalten:

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 Anfrage mit einem JSON-Webtoken oder JWT. Weitere Informationen finden Sie 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 {
  GoogleCredentials googleCredentials = GoogleCredentials
          .fromStream(new FileInputStream("service-account.json"))
          .createScoped(Arrays.asList(SCOPES));
  googleCredentials.refreshAccessToken();
  return googleCredentials.getAccessToken().getTokenValue();
}

Nachdem Ihr Zugriffstoken abgelaufen ist, wird die Tokenaktualisierungsmethode automatisch aufgerufen, um ein aktualisiertes Zugriffstoken abzurufen.

So autorisiert den Zugriff auf Remote - Config, fordert den Umfang https://www.googleapis.com/auth/firebase.remoteconfig .

Ändern Sie die Remote Config-Vorlage

Beachten Sie bei der Arbeit mit Remote Config-Vorlagen, dass diese versioniert sind und dass jede Version eine begrenzte Lebensdauer von der Erstellung bis zum Ersetzen durch ein Update hat: 90 Tage mit einer Gesamtbegrenzung von 300 gespeicherten Versionen. Siehe Vorlagen und Versioning für weitere Informationen.

Holen Sie sich die aktuelle Remote-Konfigurationsvorlage

Sie können die Back-End-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-Nutzlast 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 die folgende JSON, zusammen mit einem separaten Header , die eine beinhaltet ETag , dass Sie für die nachfolgende Anforderung verwenden.

Validieren Sie die Remote Config-Vorlage

Optional können Sie Ihre Updates validieren, bevor Sie sie veröffentlichen. Validate Template - Updates durch die URL - Parameter auf Ihre Anfrage anhängen veröffentlichen ?validate_only=true . In der Antwort wird ein Statuscode 200 und ein aktualisierter etag mit der Endung -0 bedeutet , dass das Update erfolgreich validiert. Jede Antwort, die nicht 200 ist, weist darauf hin, dass die JSON-Daten Fehler enthalten, die Sie vor der Veröffentlichung korrigieren müssen.

Aktualisieren Sie die Remote Config-Vorlage

Nachdem Sie eine Vorlage abgerufen und den JSON-Inhalt mit Ihren gewünschten Updates überarbeitet haben, können Sie ihn anschließend 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 zugewiesen, die um eine Nummer größer ist als die der Vorlage, die sie ersetzt hat.

Bei Bedarf können Sie das REST - API verwenden Rolle zurück auf die vorherige Version . Um das Risiko von Fehlern in einem Update zu mildern, können Sie überprüfen , vor der Veröffentlichung .

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 angeben , indem Sie das Zeichen „@“, gefolgt vom Dateinamen.

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, der ETag wird durch diesen Befehl modifiziert und eine aktualisierter ETag wird in der Antwort - Header des nächsten vorgesehen PUT - Befehls.

Ändern Sie die Bedingungen für die Remote-Konfiguration

Sie können Remote Config-Bedingungen und Bedingungswerte programmgesteuert ändern. Mit 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 Modifikationen , die oben zuerst eine Reihe von Bedingungen definieren und definiert dann die Standardwerte und zustandsabhängige Parameter (Bedingungswerte) Werte für jeden Parameter. Es fügt auch eine optionale Beschreibung für jedes Element hinzu; Diese sind wie Codekommentare für Entwickler gedacht und werden nicht in der App angezeigt. Ein ETag wird auch für die Versionskontrolle zur Verfügung gestellt.

Die Back-End-APIs von Remote Config bieten mehrere Bedingungen und Vergleichsoperatoren, mit denen Sie das Verhalten und die Darstellung Ihrer App ändern können. Um mehr über die Bedingungen und die Betreiber zu lernen für diese Bedingungen unterstützt werden , finden Sie in der Bedingungsausdruck Referenz .

HTTP-Fehlercodes

Statuscode Bedeutung
200 Erfolgreich aktualisiert
400 Ein Validierungsfehler ist aufgetreten. Zum Beispiel kann eine Anforderung mehr als die erlaubte Anzahl von Tasten-2000-zurückkehren würde 400 (Bad Request) mit der Fehlermeldung enthält, Param count too large . Außerdem kann dieser HTTPS-Statuscode in diesen beiden Situationen auftreten:
  • Es ist ein Versionskonfliktfehler aufgetreten, weil der Satz von Werten und Bedingungen aktualisiert wurde, seit Sie das letzte Mal einen ETag-Wert abgerufen haben. Um dies zu beheben, sollten Sie einen verwenden GET - Befehl eine neue Vorlage und ETag - Wert zu erhalten, aktualisieren Sie die Vorlage, und senden Sie diese Vorlage verwenden und den frischen ETag - Wert.
  • Ein PUT - Befehl (Update Remote - Config Anfragevorlage) wurde ohne Angabe eines gemacht If-Match - Header.
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, eine Firebase Support - Ticket - Datei

Ein Statuscode von 200 bedeutet, dass die Remote Config-Vorlage (Parameter, Werte und Bedingungen für das Projekt) aktualisiert wurde und jetzt für Apps verfügbar ist, die dieses Projekt verwenden. Andere Statuscodes weisen darauf hin, dass die zuvor vorhandene Remote Config-Vorlage noch in Kraft ist.

Nachdem Sie Ihre Vorlage aktualisiert haben, rufen Sie die Firebase-Konsole auf, um zu überprüfen, ob Ihre Änderungen wie erwartet angezeigt werden. Dies ist entscheidend , weil die Reihenfolge der Bedingungen beeinflusst , wie sie ausgewertet werden (die erste Bedingung , die auswertet true Wirkung nimmt).

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. Um mehr zu erfahren über ETags finden ETag - HTTP .

Für den REST - API, empfiehlt Google , dass Sie die ETag - Cache durch den jüngsten zur Verfügung gestellt GET - Befehl, und verwendet , die ETag - Wert in der If-Match - Header Anfrage bei der Ausgabe von PUT - Befehlen. Wenn Ihr PUT - Befehl führt zu einem HTTPS - Statuscode 409, sollten Sie einen neuen Ausgabe von GET - Befehl einen neuen ETag und Vorlage der Verwendung mit dem nächsten zu erwerben PUT - Befehl.

Sie können von dem ETag und den Schutz zu umgehen , die es bietet, durch die Remote - Config - Vorlage zwingt aktualisiert werden , wie folgt: If-Match: * Allerdings ist dieser Ansatz nicht zu empfehlen , da riskiert sie den Verlust von Aktualisierungen Ihre Remote - Config verursacht -Vorlage, wenn mehrere Clients die Remote Config-Vorlage aktualisieren. Diese Art von Konflikt kann auftreten, wenn mehrere Clients die API verwenden, oder bei widersprüchlichen Updates von API-Clients und Firebase-Konsolenbenutzern.

Für Hinweise zur Verwaltung von Remote - Config Template - Versionen finden Sie Remote - Config - Vorlagen und Versionierung .