Catch up on highlights from Firebase at Google I/O 2023. Learn more

Szablony zdalnej konfiguracji i wersjonowanie

Szablon zdalnej konfiguracji to zestaw parametrów i warunków w formacie JSON po stronie serwera, które utworzyłeś dla swojego projektu Firebase. Szablon można modyfikować i zarządzać nim za pomocą konsoli Firebase, która wyświetla zawartość szablonu w formacie graficznym na kartach Parametry i Warunki . Możesz także użyć interfejsów API zaplecza Remote Config lub Firebase CLI , aby zmodyfikować 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, Zdalna konfiguracja tworzy nowy wersjonowany szablon Zdalnej konfiguracji i przechowuje 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 przechowywanej przez Zdalną konfigurację. Wszystkie szablony zawierają pole version , jak pokazano, zawierające metadane dotyczące tej konkretnej wersji.

Za pomocą konsoli Firebase, Firebase CLI lub interfejsów API zaplecza Remote Config możesz wykonywać te zadania związane z zarządzaniem wersjami:

  • Wyświetl listę wszystkich przechowywanych wersji szablonów
  • Pobierz określoną wersję
  • Przywróć określoną wersję

Zarządzając szablonami zdalnej konfiguracji, pamiętaj o progu wygaśnięcia: Bieżący aktywny szablon zdalnej konfiguracji używany przez Twoją aplikację nie wygasa; jeśli jednak zostanie zastąpiona aktualizacją, poprzednia wersja będzie przechowywana tylko przez 90 dni, po czym wygaśnie i nie będzie można jej odzyskać. Istnieje również całkowity limit 300 przechowywanych wersji. Jeśli chcesz zapisać lub przywrócić szablon poza tymi limitami, zapisz go i zapisz ręcznie.

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 programistycznego tworzenia, modyfikowania i zapisywania szablonów, zobacz Programowe modyfikowanie zdalnej konfiguracji .

Wyświetl listę wszystkich przechowywanych wersji szablonu Zdalnej konfiguracji

Możesz pobrać listę wszystkich przechowywanych wersji szablonu Zdalnej konfiguracji. 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

Na karcie Parametry wybierz ikonę „zegar” wyświetlaną w prawym górnym rogu. Spowoduje to otwarcie strony Historia zmian z listą wszystkich przechowywanych wersji szablonów w menu listy po prawej stronie.

Szczegóły wyświetlane dla każdej przechowywanej wersji obejmują informacje o tym, czy zmiany pochodzą z konsoli, z interfejsu 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. Podaj „0”, aby pobrać wszystkie wersje.

Lista szablonów zawiera metadane dla wszystkich przechowywanych wersji, w tym czas aktualizacji, użytkownika, który jej dokonał oraz czy została ona wykonana przez konsolę, czy przez REST API. 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żesz pobrać dowolną przechowywaną wersję szablonu Zdalnej konfiguracji. Na przykład:

Node.js

Przekaż getTemplate() bez żadnych argumentów, aby pobrać najnowszą wersję szablonu lub aby pobrać określoną 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 adresu URL ?version_number jest ważny tylko dla operacji GET ; nie można go użyć do określenia numerów wersji dla aktualizacji. Podobne żądanie get bez parametru ?version_number pobrałoby bieżący aktywny szablon.

Konsola Firebase

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

Możesz wyświetlić szczegółową różnicę aktualnie wybranej wersji i dowolnej innej zapisanej wersji, najeżdżając kursorem na menu kontekstowe dowolnej niewybranej wersji i wybierając opcję 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ć do dowolnej zapisanej wersji 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ć zapisany szablon zdalnej konfiguracji, wykonaj żądanie HTTP POST z niestandardową metodą :rollback oraz w treści żądania 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ść obecnie aktywnego przechowywanego szablonu wraz z metadanymi nowej wersji.

Konsola Firebase

W przypadku poprzednich wersji szablonów, które kwalifikują się do wycofania zmian, w prawym górnym rogu strony Historia zmian jest wyświetlany 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 zauważyć, że ta operacja wycofywania skutecznie tworzy nową numerowaną wersję. Na przykład wycofanie z wersji 10 do wersji 6 skutecznie tworzy nową kopię wersji 6, różniącą się od oryginału tylko tym, że jej numer wersji to 11. Oryginalna wersja 6 jest nadal przechowywana, zakładając, że nie wygasła, i wersja 11 staje się aktywnym szablonem.

Pobierz i opublikuj szablony zdalnej konfiguracji

Pobierz i opublikuj szablony zdalnej konfiguracji, aby zintegrować je z systemami kontroli źródła i budowania, zautomatyzować aktualizacje konfiguracji oraz zachować synchronizację parametrów i wartości w wielu projektach.

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

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

Tej metody można również użyć do migracji konfiguracji z jednego projektu do innego lub wypełnienia nowego projektu parametrami i wartościami z istniejącego projektu.

Parametry i wartości parametrów utworzone specjalnie jako warianty w eksperymencie testów 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

Bieżący i aktywny szablon zdalnej konfiguracji 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 wyprowadza ł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ź poprawność szablonu Zdalnej konfiguracji

Możesz sprawdzić poprawność aktualizacji szablonów przed ich opublikowaniem za pomocą pakietu Firebase Admin SDK lub interfejsu API REST. Szablony są również sprawdzane podczas próby opublikowania z interfejsu Firebase CLI 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 źle 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

Sprawdź poprawność aktualizacji 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 szablon został pomyślnie zweryfikowany, polecenie curl zwróci przesłany szablon JSON, a w zapisanym pliku headers znajdziesz stan HTTP/2 200 i zaktualizowany tag ET z sufiksem -0 . Jeśli Twój szablon nie został zweryfikowany, w odpowiedzi JSON pojawi się błąd sprawdzania poprawności, a plik headers będzie zawierał odpowiedź inną niż 200 (i bez znacznika ETag).

Opublikuj szablon Zdalnej konfiguracji

Po pobraniu szablonu, wprowadzeniu niezbędnych zmian w zawartości JSON i sprawdzeniu go, 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ż cała konfiguracja jest zastępowana, 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. W razie potrzeby możesz przywrócić poprzednią wersję .

Użyj następujących poleceń, aby opublikować swój szablon:

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ć zawartość, 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 Przeglądaj , przejdź do i wybierz plik Zdalnej konfiguracji, który chcesz opublikować, a następnie kliknij Wybierz .
  3. Plik zostanie zweryfikowany i jeśli się powiedzie, możesz kliknąć Opublikuj , aby natychmiast udostępnić konfigurację swoim aplikacjom i użytkownikom.

Personalizacja i warunki usługi Remote Config są zawarte w pobranych szablonach, dlatego podczas próby opublikowania w innym projekcie należy pamiętać o następujących ograniczeniach:

  • Personalizacja nie może być importowana z projektu do projektu.

    Na przykład, jeśli masz włączone personalizacje w swoim projekcie oraz pobierzesz i edytujesz szablon, możesz opublikować go w tym samym projekcie, ale nie możesz go opublikować 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 Remote Config, który używa warunku, który określa 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, który opiera się na określonym identyfikatorze aplikacji lub grupie odbiorców, która nie istnieje w projekcie docelowym, weryfikacja zakończy się niepowodzeniem.

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

Pobierz ustawienia domyślne szablonu Zdalnej konfiguracji

Ponieważ Twoja 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ć wartości domyślne klienta aplikacji i domyślne wartości parametrów zaplecza zdalnej konfiguracji, ponieważ mogą one zmieniać się w czasie.

Jak opisano w linkach dotyczących platformy 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, które zawierają 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ę do importowania tych 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 ustawień domyślnych usługi Remote Config przed każdą nową wersją aplikacji, aby mieć pewność, że Twoja aplikacja i zaplecze usługi Remote Config pozostają 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. W zakładce Parametry otwórz menu i wybierz Pobierz wartości domyślne .
  2. Po wyświetleniu monitu kliknij przycisk radiowy odpowiadający formatowi pliku, który chcesz pobrać, a następnie kliknij Pobierz plik .

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