Szablony Zdalnej konfiguracji i obsługa wersji


Remote Config szablony to zestawy parametrów i warunków w formacie JSON utworzonych w Twoim projekcie Firebase. Możesz tworzyć szablony klientów, z których aplikacja pobiera wartości, oraz szablony serwera, z których klienty serwera mogą pobierać wartości.

W tej sekcji omówione są szablony klientów. Aby dowiedzieć się więcej o szablonach na serwer, kliknij Szablony serwera.

Szablon możesz modyfikować i nim zarządzać za pomocą konsoli Firebase, która wyświetla zawartość szablonu w formacie graficznym na kartach Parametry i karty Warunki.

Do modyfikowania szablonu klienta i zarządzania nim możesz też użyć interfejsu API REST Remote Config i pakietu Admin SDK lub wiersza poleceń Firebase.

Oto przykład pliku szablonu serwera:

{
  "parameters": {
    "preamble_prompt": {
      "defaultValue": {
        "value": "You are a helpful assistant who knows everything there is to know about Firebase! "
      },
      "description": "Add this prompt to the user's prompt",
      "valueType": "STRING"
    },
    "model_name": {
      "defaultValue": {
        "value": "gemini-pro-test"
      },
      "valueType": "STRING"
    },
    "generation_config": {
      "defaultValue": {
        "value": "{\"temperature\": 0.9, \"maxOutputTokens\": 2048, \"topP\": 0.9, \"topK\": 20}"
      },
      "valueType": "JSON"
    },
  },
  "version": {
    "versionNumber": "19",
    "isLegacy": true
  }
}

W konsoli Firebase możesz wykonywać te czynności związane z zarządzaniem wersjami:

  • Wyświetlanie listy wszystkich zapisanych wersji szablonu
  • Pobieranie konkretnej wersji
  • Przywracanie do konkretnej wersji klienta
  • Usuń szablony Remote Config ze strony Historia zmian

Łączny limit liczby zapisanych wersji na typ szablonu (300 szablonów klienta i 300 szablonów serwera) wynosi 300 wersji, w tym wersji usuniętych szablonów. Jeśli w czasie trwania projektu opublikujesz więcej niż 300 wersji szablonów na typ szablonu, zostaną usunięte najstarsze wersje, zachowując przy tym maksymalnie 300 wersji danego typu.

Za każdym razem, gdy aktualizujesz parametry, Remote Config tworzy nową wersję szablonu Remote Config i przechowuje poprzednią wersję szablonu jako wersję, do której możesz wrócić w razie potrzeby. Numery wersji są zwiększane sekwencyjnie z wartości początkowej zapisanej przez funkcję Remote Config. Wszystkie szablony zawierają pole version, jak pokazano poniżej, zawierające metadane konkretnej wersji.

W razie potrzeby możesz usunąć szablony Remote Config ze strony Historia zmian w konsoli Remote Config.

Zarządzaj wersjami szablonu Remote Config

W tej sekcji opisaliśmy, jak zarządzać wersjami szablonu Remote Config.

Wyświetlanie listy wszystkich zapisanych wersji szablonu Remote Config

Możesz pobrać listę wszystkich zapisanych wersji szablonu Remote Config. Aby to zrobić:

Konsola Firebase

Na karcie Parametry kliknij ikonę zegara w prawym górnym rogu. Spowoduje to otwarcie strony Historia zmian, na której w menu po prawej stronie znajdziesz wszystkie przechowywane wersje szablonu.

Szczegóły wyświetlane w przypadku każdej zapisanej wersji obejmują informacje o tym, czy zmiany zostały wprowadzone za pomocą Konsoli, interfejsu REST API, cofnięcia zmian czy czy były to zmiany przyrostowe po wymuszeniu zapisania szablonu.

Interfejs wiersza poleceń Firebase

firebase remoteconfig:versions:list

Aby ograniczyć liczbę zwracanych wersji, użyj opcji --limit. Aby pobrać wszystkie wersje, prześlij wartość „0”.

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

Java

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

REST

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

Lista szablonów zawiera metadane wszystkich przechowywanych wersji, w tym czas aktualizacji, użytkownika, który ją utworzył, i sposób jej wykonania. Oto przykładowy element wersji:

```json
{
  "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"
  }]
}
```

Pobieranie konkretnej wersji szablonu Remote Config

Możesz pobrać dowolną zapisaną wersję szablonu Remote Config. Aby pobrać zapisaną wersję szablonu:

Konsola Firebase

Domyślnie w okienku szczegółów na karcie Historia zmian wyświetla się bieżący aktywny szablon. Aby wyświetlić szczegóły innej wersji na liście, wybierz ją w menu po prawej stronie.

Możesz wyświetlić szczegółowe różnice między obecnie wybraną wersją a każdą inną zapisaną wersją. Aby to zrobić, najedź kursorem na menu kontekstowe dowolnej niewybranej wersji i kliknij Porównaj z wybraną wersją.

Firebase CLI

firebase remoteconfig:get -v VERSION_NUMBER

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

Node.js

Aby pobrać najnowszą wersję szablonu, prześlij getTemplate() bez żadnych argumentów. 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);
  });

Java

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

REST

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 prawidłowy tylko w przypadku operacji GET. Nie możesz go używać do określania numerów wersji aktualizacji. Podobne żądanie bez parametru ?version_number pobiera aktualny aktywny szablon.

Przywróć określoną zapisaną wersję szablonu Remote Config

Możesz przywrócić dowolną zapisaną wersję szablonu. Aby cofnąć zmianę szablonu:

Konsola Firebase

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

Firebase CLI

firebase remoteconfig:rollback -v VERSION_NUMBER

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

Java

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

REST

Aby przywrócić zapisany szablon Remote Config, wyślij żądanie HTTP POST z metodą niestandardową :rollback, a w sekcji treści żądania podaj wersję, której chcesz użyć. 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 jego nowej wersji.

Pamiętaj, że ta operacja przywracania spowoduje utworzenie nowej wersji z numerem. Na przykład powrót z wersji 10 do wersji 6 powoduje utworzenie nowej kopii wersji 6, która różni się od oryginału tylko tym, że numer wersji to 11. Pierwotna wersja 6 jest nadal przechowywana, o ile nie minął jej okres ważności, a wersja 11 staje się aktywnym szablonem.

Usuwanie szablonu Remote Config

Szablony Remote Config możesz usuwać w konsoli Firebase. Aby usunąć szablon Remote Config:

1. Na stronie Remote Config Parametry kliknij Historia zmian.
  1. Przejdź do szablonu, który chcesz usunąć, kliknij Więcej, a następnie wybierz Usuń.

  2. Gdy pojawi się prośba o potwierdzenie usunięcia, kliknij Usuń.

Pobieranie i publikowanie Remote Config szablonów

Pobieraj i publikuj szablony Remote Config, aby integrować je z systemami kontroli źródła i kompilacji, automatyzować aktualizacje konfiguracji oraz utrzymywać parametry i wartości w zsynchronizowanym stanie w wielu projektach.

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

Załóżmy, że masz wiele projektów, które reprezentują różne etapy cyklu życia rozwoju oprogramowania, takie jak środowisko programistyczne, testowe, przejściowe i produkcyjne. W takim przypadku możesz przenieść w środowisku produkcyjnym szablon, który został w pełni przetestowany w środowisku testowym. Aby to zrobić, pobierz go z projektu testowego i opublikuj w projekcie produkcyjnym.

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

Parametry i ich wartości utworzone jako warianty w eksperymencie A/B Testing nie są uwzględniane w eksportowanych szablonach.

Aby eksportować i importować szablony Remote Config:

  1. Pobierz aktualny szablon konfiguracji Remote Config.
  2. Sprawdź szablon Remote Config.
  3. Opublikuj szablon Remote Config.

Pobieranie bieżącego szablonu Zdalnej konfiguracji

Aby pobrać aktywny szablon Remote Config w formacie JSON, użyj tych instrukcji:

Konsola Firebase

  1. Na karcie Remote ConfigParametry lub warunki otwórz menu i wybierz Pobierz bieżący plik konfiguracyjny.
  2. Gdy pojawi się odpowiedni komunikat, kliknij Pobierz plik konfiguracji, wybierz lokalizację, w której chcesz zapisać plik, a następnie kliknij Zapisz.

Firebase CLI

firebase remoteconfig:get -o filename

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

REST

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 oddzielnego pliku headers.

Weryfikowanie szablonu Zdalnej konfiguracji

Zmiany w szablonach możesz zweryfikować przed opublikowaniem, korzystając z interfejsu Firebase Admin SDK lub interfejsu API REST. Szablony są też weryfikowane, gdy próbujesz opublikować je za pomocą wiersza poleceń Firebase lub konsoli Firebase.

Proces sprawdzania szablonu wykrywa błędy, takie jak zduplikowane klucze parametrów i warunków, nieprawidłowe nazwy warunków lub nieistniejące warunki oraz nieprawidłowo sformatowane tagi ETag. Na przykład żądanie zawierające więcej niż dozwoloną liczbę 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);
      });
}

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

REST

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

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 przez Ciebie szablon JSON, a w zapisanym pliku headers znajdziesz kod stanu HTTP/2 200 i zaktualizowany ETag z sufiksem -0. Jeśli Twój szablon nie został zweryfikowany, w odpowiedzi JSON zobaczysz błąd weryfikacji, a plik headers będzie zawierał odpowiedź inną niż 200 (i nie będzie zawierać ETag).

Publikowanie szablonu Remote Config

Po pobraniu szablonu, wprowadzeniu w nim niezbędnych zmian i sprawdzeniu go możesz opublikować go w projekcie.

Publikowanie szablonu powoduje zastąpienie całego dotychczasowego szablonu konfiguracji zaktualizowanym plikiem i zwiększenie wersji szablonu o 1. Ponieważ cała konfiguracja zostaje zastąpiona, 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ą od razu dostępne dla aplikacji i użytkowników. W razie potrzeby możesz przywrócić poprzednią wersję.

Aby opublikować szablon, użyj tych poleceń:

Konsola Firebase

  1. Na karcie Remote ConfigParametry lub Warunki kliknij Menu i wybierz Opublikuj z pliku.
  2. Gdy pojawi się odpowiedni komunikat, kliknij Przeglądaj, przejdź do pliku Remote Config, który chcesz opublikować, i kliknij Wybierz.
  3. Plik zostanie zweryfikowany. Jeśli weryfikacja się powiedzie, możesz kliknąć Opublikuj, aby konfiguracja była natychmiast dostępna dla aplikacji i użytkowników.

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

REST

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 tym poleceniu curl możesz określić zawartość, używając znaku „@”, a następnie nazwy pliku.

Pobierane szablony i warunki usługi Remote Config są zawarte w pobranych szablonach, dlatego pamiętaj o tych ograniczeniach, które obowiązują podczas publikowania w innym projekcie:

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

    Jeśli na przykład masz w projekcie włączoną personalizację i pobierasz oraz edytujesz szablon, możesz go opublikować w tym samym projekcie, ale nie możesz opublikować go w innym projekcie, chyba że usuniesz z niego personalizację.

  • Warunki można importować z jednego projektu do drugiego, ale pamiętaj, że przed opublikowaniem w projekcie docelowym powinny znajdować się określone wartości warunkowe (np. identyfikatory aplikacji lub listy odbiorców).

    Jeśli np. masz parametr Remote Config, który używa warunku określającego wartość platformy iOS, możesz opublikować szablon w innym projekcie, ponieważ wartości platformy są takie same w przypadku każdego projektu. Jeśli jednak zawiera on warunek, który zależy od określonego identyfikatora aplikacji lub listy odbiorców, która nie istnieje w docelowym projekcie, weryfikacja się nie powiedzie.

  • Jeśli szablon, który planujesz opublikować, zawiera warunki oparte na atrybucie Google Analytics, w projekcie docelowym musisz włączyć atrybut Analytics.

Pobierz domyślne szablony Remote Config

Aplikacja nie zawsze ma połączenie z internetem, dlatego musisz skonfigurować domyślne wartości aplikacji po stronie klienta dla wszystkich parametrów Remote Config. Co jakiś czas synchronizuj domyślne wartości klienta aplikacji i domyślne wartości parametrów backendu Remote Config, ponieważ z czasem mogą się one zmieniać.

Zgodnie z opisem w linkach na poszczególnych platformach na końcu tej sekcji możesz ręcznie ustawić te wartości domyślne w aplikacji lub możesz uprościć ten proces, pobierając pliki zawierające tylko pary klucz-wartość wszystkich parametrów i ich wartości domyślne w aktywnym szablonie Remote Config. Następnie możesz uwzględnić ten plik w projekcie i skonfigurować aplikację tak, aby importowała te wartości.

Pliki te możesz pobrać w formacie XML (aplikacje na Androida), plist (aplikacje na iOS) lub JSON (aplikacje internetowe).

Zalecamy okresowe pobieranie domyślnych wartości Remote Config przed każdą nową wersją aplikacji, aby mieć pewność, że aplikacja i back-end Remote Config są zsynchronizowane.

Aby pobrać plik z domyślnymi ustawieniami szablonu:

REST

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

Jako wartość parametru format wpisz XML, PLIST lub JSON, w zależności od tego, jaki format pliku chcesz pobrać.

Konsola Firebase

  1. Na karcie Parametry otwórz Menu i wybierz Pobierz wartości domyślne.
  2. Gdy pojawi się taka opcja, kliknij przycisk opcji odpowiadający formatowi pliku, który chcesz pobrać, a następnie kliknij Pobierz plik.

Więcej informacji o importowaniu domyślnych wartości Remote Config do aplikacji znajdziesz w tych artykułach: