Szablony zdalnej konfiguracji i wersjonowanie

Szablon zdalnej konfiguracji to zestaw parametrów i warunków w formacie JSON po stronie serwera, który utworzyłeś dla projektu Firebase. Możesz modyfikować szablon i zarządzać nim za pomocą konsoli Firebase, która wyświetla zawartość szablonu w formie graficznej w zakładkach Parametry i Warunki . Możesz także użyć interfejsu REST API Remote Config i pakietu Admin SDK lub interfejsu CLI Firebase, aby modyfikować konfigurację i zarządzać nią.

Oto przykład pliku szablonu:

  {
    "conditions": [
      {
        "name": "ios",
        "expression": "device.os == 'ios'"
      }
    ],
    "parameters": {
      "welcome_message": {
        "defaultValue": {
          "value": "Welcome to this sample app"
        },
        "conditionalValues": {
          "ios": {
            "value": "Welcome to this sample iOS app"
          }
        }
      },
      "welcome_message_caps": {
        "defaultValue": {
          "value": "false"
        }
      },
      "header_text": {
        "defaultValue": {
          "useInAppDefault": true
        }
      }
    },
    "version": {
      "versionNumber": "28",
      "updateTime": "2020-05-14T18:39:38.994Z",
      "updateUser": {
        "email": "user@google.com"
      },
      "updateOrigin": "CONSOLE",
      "updateType": "INCREMENTAL_UPDATE"
    }
  }

Za każdym razem, gdy aktualizujesz parametry, Remote Config tworzy nowy szablon Remote Config z nową wersją i zapisuje poprzedni szablon jako wersję, którą możesz odzyskać lub przywrócić w razie potrzeby. Numery wersji są zwiększane sekwencyjnie od wartości początkowej zapisanej przez Zdalną konfigurację. Wszystkie szablony zawierają pole version , jak pokazano, zawierające metadane dotyczące tej konkretnej wersji.

Za pomocą konsoli Firebase, interfejsu wiersza polecenia Firebase lub interfejsów API zaplecza Remote Config możesz wykonywać następujące zadania związane z zarządzaniem wersjami:

  • Lista wszystkich zapisanych wersji szablonów
  • Pobierz konkretną wersję
  • Przywróć określoną wersję

W razie potrzeby możesz usunąć szablony Zdalnej konfiguracji na stronie Historia zmian w konsoli Zdalnej konfiguracji. Istnieje całkowity limit przechowywanych wersji wynoszący 300, co obejmuje zapisane numery wersji usuniętych szablonów. Jeśli w trakcie trwania projektu opublikujesz więcej niż 300 wersji szablonów, najwcześniejsze wersje zostaną usunięte, zachowując maksymalnie 300 wersji.

Zarządzaj wersjami szablonów zdalnej konfiguracji

W tej sekcji opisano sposób zarządzania wersjami szablonu zdalnej konfiguracji. Aby uzyskać więcej informacji na temat programowego tworzenia, modyfikowania i zapisywania szablonów, zobacz Programowe modyfikowanie zdalnej konfiguracji .

Wyświetl listę wszystkich zapisanych wersji szablonu zdalnej konfiguracji

Możesz pobrać listę wszystkich zapisanych wersji szablonu Remote Config. Na przykład:

Node.js

function listAllVersions() {
  admin.remoteConfig().listVersions()
    .then((listVersionsResult) => {
      console.log("Successfully fetched the list of versions");
      listVersionsResult.versions.forEach((version) => {
        console.log('version', JSON.stringify(version));
      });
    })
    .catch((error) => {
      console.log(error);
    });
}

Jawa

ListVersionsPage page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
while (page != null) {
  for (Version version : page.getValues()) {
    System.out.println("Version: " + version.getVersionNumber());
  }
  page = page.getNextPage();
}

// Iterate through all versions. This will still retrieve versions in batches.
page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
for (Version version : page.iterateAll()) {
  System.out.println("Version: " + version.getVersionNumber());
}

ODPOCZYNEK

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

Konsola Firebase

W zakładce Parametry wybierz ikonę „zegara” wyświetloną w prawym górnym rogu. Spowoduje to otwarcie strony Historia zmian zawierającej listę wszystkich zapisanych wersji szablonów w menu listy po prawej stronie.

Szczegóły wyświetlane dla każdej zapisanej wersji obejmują informację, czy zmiany pochodzą z Konsoli, z API REST, z wycofania, czy też były to zmiany przyrostowe z wymuszonego zapisu szablonu.

Interfejs wiersza polecenia Firebase

firebase remoteconfig:versions:list

Użyj opcji --limit , aby ograniczyć liczbę zwracanych wersji. Przekaż „0”, aby pobrać wszystkie wersje.

Lista szablonów zawiera metadane dla wszystkich przechowywanych wersji, w tym czas aktualizacji, użytkownika, który ją wykonał oraz to, czy została ona dokonana za pośrednictwem konsoli czy API REST. Oto przykład elementu wersji:

{
  "versions": [{
    "version_number": "6",
    "update_time": "2022-05-12T02:38:54Z",
    "update_user": {
      "name": "Jane Smith",
      "email": "jane@developer.org",
      "imageUrl": "https://lh3.googleusercontent.com/a-/..."
    },
    "description": "One small change on the console",
    "origin": "CONSOLE",
    "update_type": "INCREMENTAL_UPDATE"
  }]

Pobierz określoną wersję szablonu zdalnej konfiguracji

Można pobrać dowolną określoną zapisaną wersję szablonu zdalnej konfiguracji. Na przykład:

Node.js

Przekaż getTemplate() bez żadnych argumentów, aby pobrać najnowszą wersję szablonu lub aby pobrać konkretną wersję, użyj getTemplateAtVersion() .

// Get template version: 6
admin.remoteConfig().getTemplateAtVersion('6')
  .then((template) => {
    console.log("Successfully fetched the template with ETag: " + template.etag);
  })
  .catch((error) => {
    console.log(error);
  });

Jawa

Template template = FirebaseRemoteConfig.getInstance().getTemplateAtVersionAsync(versionNumber).get();
// See the ETag of the fetched template.
System.out.println("Successfully fetched the template with ETag: " + template.getETag());

ODPOCZYNEK

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig?version_number=6

Parametr URL ?version_number obowiązuje tylko dla operacji GET ; nie można go używać do określania numerów wersji aktualizacji. Podobne żądanie pobrania bez parametru ?version_number spowodowałoby pobranie bieżącego aktywnego szablonu.

Konsola Firebase

Domyślnie w panelu szczegółów na karcie Historia zmian wyświetlany jest bieżący aktywny szablon. Aby wyświetlić szczegóły innej wersji na liście, wybierz ją z prawego menu.

Możesz wyświetlić szczegółowe porównanie aktualnie wybranej wersji i dowolnej innej zapisanej wersji, najeżdżając kursorem na menu kontekstowe dowolnej niewybranej wersji i wybierając Porównaj z wybraną wersją.

Interfejs wiersza polecenia Firebase

firebase remoteconfig:get -v VERSION_NUMBER

Opcjonalnie możesz zapisać dane wyjściowe do określonego pliku za pomocą -o, FILENAME .

Przywróć określoną przechowywaną wersję szablonu zdalnej konfiguracji

Możesz przywrócić dowolną zapisaną wersję szablonu. Na przykład:

Node.js

// Roll back to template version: 6
admin.remoteConfig().rollback('6')
  .then((template) => {
    console.log("Successfully rolled back to template version 6.");
    console.log("New ETag: " + template.etag);
  })
  .catch((error) => {
    console.log('Error trying to rollback:', e);
  })

Jawa

try {
  Template template = FirebaseRemoteConfig.getInstance().rollbackAsync(versionNumber).get();
  System.out.println("Successfully rolled back to template version: " + versionNumber);
  System.out.println("New ETag: " + template.getETag());
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Error trying to rollback template.");
    System.out.println(rcError.getMessage());
  }
}

ODPOCZYNEK

Aby przywrócić przechowywany szablon zdalnej konfiguracji, wyślij polecenie HTTP POST z niestandardową metodą :rollback i w treści żądania podaj konkretną wersję do zastosowania. Na przykład:

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -H "Content-Type: application/json" -X POST https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:rollback -d '{"version_number": 6}'

Odpowiedź zawiera zawartość aktualnie aktywnego przechowywanego szablonu wraz z metadanymi jego nowej wersji.

Konsola Firebase

W przypadku poprzednich wersji szablonu, które można przywrócić, w prawym górnym rogu strony Historia zmian wyświetlany jest przycisk opcji umożliwiający przywrócenie tej wersji. Kliknij i potwierdź to tylko wtedy, gdy masz pewność, że chcesz przywrócić tę wersję i natychmiast użyć tych wartości dla wszystkich aplikacji i użytkowników.

Interfejs wiersza polecenia Firebase

firebase remoteconfig:rollback -v VERSION_NUMBER

Należy pamiętać, że ta operacja wycofania skutecznie tworzy nową numerowaną wersję. Na przykład wycofanie się z wersji 10 do wersji 6 skutecznie tworzy nową kopię wersji 6, różniącą się od oryginału jedynie tym, że ma numer wersji 11. Oryginalna wersja 6 jest nadal przechowywana, zakładając, że nie minęła jej data wygaśnięcia, i wersja 11 staje się aktywnym szablonem.

Usuń szablon zdalnej konfiguracji

Możesz usunąć szablony Remote Config z konsoli Firebase. Aby usunąć szablon Zdalnej konfiguracji:

  1. Na stronie Parametry zdalnej konfiguracji kliknij Zmień historię .

  2. Przejdź do szablonu, który chcesz usunąć, kliknij Więcej , a następnie wybierz Usuń .

  3. Po wyświetleniu monitu o potwierdzenie usunięcia kliknij Usuń .

Pobierz i opublikuj szablony zdalnej konfiguracji

Pobieraj i publikuj szablony zdalnej konfiguracji, aby zintegrować je z systemami kontroli źródła i kompilacji, zautomatyzować aktualizacje konfiguracji oraz zapewnić synchronizację parametrów i wartości w wielu projektach.

Możesz pobrać aktualnie aktywny szablon Remote Config programowo lub z konsoli Firebase. Następnie możesz zaktualizować wyeksportowany plik JSON i opublikować go w tym samym projekcie lub opublikować go w nowym lub istniejącym projekcie.

Załóżmy, że masz wiele projektów reprezentujących różne etapy cyklu życia oprogramowania, takie jak środowiska programistyczne, testowe, testowe i produkcyjne. W takim przypadku możesz wypromować w pełni przetestowany szablon ze środowiska pomostowego do środowiska produkcyjnego, pobierając go z projektu pomostowego i publikując w projekcie produkcyjnym.

Możesz także użyć tej metody do migracji konfiguracji z jednego projektu do drugiego lub do wypełnienia nowego projektu parametrami i wartościami z już istniejącego projektu.

Parametry i wartości parametrów utworzone specjalnie jako warianty w eksperymencie testu A/B nie są uwzględniane w eksportowanych szablonach.

Aby wyeksportować i zaimportować szablony zdalnej konfiguracji:

  1. Pobierz aktualny szablon konfiguracji zdalnej konfiguracji .
  2. Sprawdź poprawność szablonu zdalnej konfiguracji .
  3. Opublikuj szablon Zdalnej konfiguracji .

Pobierz aktualny szablon zdalnej konfiguracji

Aktualny i aktywny szablon Remote Config możesz pobrać programowo lub za pomocą konsoli Firebase.

Użyj następujących poleceń, aby pobrać aktywny szablon zdalnej konfiguracji w formacie JSON:

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

Jawa

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

ODPOCZYNEK

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

To polecenie wysyła ładunek JSON do jednego pliku, a nagłówki (w tym ETag) do osobnego pliku headers .

Konsola Firebase

  1. Na karcie Parametry lub Warunki zdalnej konfiguracji otwórz menu i wybierz opcję Pobierz bieżący plik konfiguracyjny .
  2. Po wyświetleniu monitu kliknij Pobierz plik konfiguracyjny , wybierz lokalizację, w której chcesz zapisać plik, a następnie kliknij Zapisz .

Interfejs wiersza polecenia Firebase

firebase remoteconfig:get -o filename

Sprawdź szablon zdalnej konfiguracji

Możesz sprawdzić aktualizacje szablonów przed ich opublikowaniem, korzystając z pakietu Firebase Admin SDK lub interfejsu API REST. Szablony są również sprawdzane podczas próby opublikowania z poziomu interfejsu wiersza polecenia Firebase lub konsoli Firebase.

Proces sprawdzania poprawności szablonu sprawdza błędy, takie jak zduplikowane klucze parametrów i warunków, nieprawidłowe nazwy warunków lub nieistniejące warunki lub błędnie sformatowane znaczniki ETag. Na przykład żądanie zawierające więcej niż dozwolona liczba kluczy — 2000 — zwróci komunikat o błędzie: Param count too large .

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

Jawa

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

ODPOCZYNEK

Zweryfikuj aktualizacje szablonu, dołączając parametr adresu URL ?validate_only=true do żądania publikacji:

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?validate_only=true -d @filename

Jeśli Twój szablon został pomyślnie zweryfikowany, polecenie curl zwróci przesłany szablon JSON, a w zapisanym pliku headers znajdziesz status HTTP/2 200 i zaktualizowany ETag z przyrostkiem -0 . Jeśli Twój szablon nie został zweryfikowany, w odpowiedzi JSON pojawi się błąd sprawdzania poprawności, a Twój plik headers będzie zawierał odpowiedź inną niż 200 (i nie będzie zawierał znacznika ETag).

Opublikuj szablon zdalnej konfiguracji

Po pobraniu szablonu, wprowadzeniu wszelkich niezbędnych zmian w treści JSON i sprawdzeniu jego poprawności, możesz opublikować go w projekcie.

Opublikowanie szablonu zastępuje cały istniejący szablon konfiguracji zaktualizowanym plikiem i zwiększa wersję szablonu o jeden. Ponieważ zastępowana jest cała konfiguracja, jeśli usuniesz parametr z pliku JSON i opublikujesz go, parametr zostanie usunięty z serwera i nie będzie już dostępny dla klientów.

Po opublikowaniu zmiany parametrów i wartości są natychmiast dostępne dla Twoich aplikacji i użytkowników. Jeśli to konieczne, możesz przywrócić poprzednią wersję .

Aby opublikować szablon, użyj następujących poleceń:

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

Jawa

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

ODPOCZYNEK

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

W przypadku tego polecenia curl możesz określić treść, używając znaku „@”, po którym następuje nazwa pliku.

Konsola Firebase

  1. Na karcie Parametry lub Warunki zdalnej konfiguracji otwórz menu i wybierz opcję Publikuj z pliku .
  2. Po wyświetleniu monitu kliknij przycisk Przeglądaj , przejdź i wybierz plik Remote Config, który chcesz opublikować, a następnie kliknij przycisk Wybierz .
  3. Plik zostanie zweryfikowany i, jeśli się powiedzie, możesz kliknąć Opublikuj , aby natychmiast udostępnić konfigurację aplikacjom i użytkownikom.

Personalizacje i warunki Remote Config są zawarte w pobranych szablonach, dlatego przy próbie publikowania w innym projekcie należy pamiętać o następujących ograniczeniach:

  • Personalizacji nie można importować z projektu do projektu.

    Na przykład, jeśli w projekcie masz włączoną personalizację oraz pobrałeś i edytowałeś szablon, możesz opublikować go w tym samym projekcie, ale nie możesz opublikować go w innym projekcie, chyba że usuniesz personalizacje z szablonu.

  • Warunki można importować z projektu do projektu, ale należy pamiętać, że wszelkie określone wartości warunkowe (takie jak identyfikatory aplikacji lub odbiorcy) powinny istnieć w projekcie docelowym przed opublikowaniem.

    Na przykład, jeśli masz parametr Zdalnej konfiguracji, który używa warunku określającego wartość platformy iOS , szablon można opublikować w innym projekcie, ponieważ wartości platformy są takie same dla każdego projektu. Jeśli jednak zawiera warunek zależny od konkretnego identyfikatora aplikacji lub odbiorców użytkownika, którzy nie istnieją w projekcie docelowym, weryfikacja zakończy się niepowodzeniem.

  • Jeśli szablon, który planujesz opublikować, zawiera warunki bazujące na Google Analytics, Analytics musi być włączony w docelowym projekcie.

Pobierz domyślne szablony szablonu zdalnej konfiguracji

Ponieważ aplikacja może nie zawsze być połączona z Internetem, należy skonfigurować domyślne wartości aplikacji po stronie klienta dla wszystkich parametrów Zdalnej konfiguracji. Należy również okresowo synchronizować domyślne wartości klienta aplikacji i domyślne wartości parametrów zaplecza usługi Remote Config, ponieważ mogą one z czasem ulegać zmianie.

Jak opisano w linkach do poszczególnych platform na końcu tej sekcji, możesz ręcznie ustawić te wartości domyślne w swojej aplikacji lub usprawnić ten proces, pobierając pliki zawierające tylko pary klucz-wartość dla wszystkich parametrów i ich wartości domyślne w aktywny szablon zdalnej konfiguracji. Następnie możesz dołączyć ten plik do swojego projektu i skonfigurować aplikację tak, aby importowała te wartości.

Możesz pobrać te pliki w formacie XML dla aplikacji na Androida, w formacie listy właściwości (plist) dla aplikacji na iOS i JSON dla aplikacji internetowych.

Zalecamy okresowe pobieranie domyślnych ustawień Remote Config przed wydaniem nowej aplikacji, aby mieć pewność, że Twoja aplikacja i zaplecze Remote Config pozostaną zsynchronizowane.

Aby pobrać plik zawierający domyślne ustawienia szablonu:

ODPOCZYNEK

curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=file_format'

Użyj XML , PLIST lub JSON jako wartości format , w zależności od formatu pliku, który chcesz pobrać.

Konsola Firebase

  1. Na karcie Parametry otwórz menu i wybierz opcję Pobierz wartości domyślne .
  2. Po wyświetleniu monitu kliknij przycisk opcji odpowiadający formatowi pliku, który chcesz pobrać, a następnie kliknij opcję Pobierz plik .

Aby uzyskać więcej informacji na temat importowania domyślnych wartości funkcji Remote Config do aplikacji, zobacz: