Automatycznie modyfikuj Zdalną konfigurację

Ten dokument opisuje sposób automatycznego odczytu i zmodyfikować zestaw parametrów i warunków w formacie JSON znanych jako Remote Config. Dzięki temu zmiany w szablonie które aplikacja kliencka może pobrać przy użyciu biblioteki klienta.

Za pomocą interfejsu API typu REST Remote Config lub Admin SDK opisane w tym przewodniku, możesz ominąć zarządzanie szablonem w konsoli Firebase, aby umożliwić bezpośrednią integrację Remote Config zmienia się w Twoje własne procesy. Na przykład Remote Config interfejs API backendu, możesz:

  • Planowanie aktualizacji Remote Config. Korzystając z wywołań interfejsu API w połączeniu z zadaniem cron, możesz regularnie zmieniać wartości Remote Config.
  • Zbiorczy import wartości konfiguracyjnych importu, aby umożliwić sprawne przejście z własnego zastrzeżonego systemu na system Firebase Remote Config.
  • Używając Remote Config z zasadą Cloud Functions for Firebase, zmieniaj wartości w aplikacji na podstawie zdarzeń zachodzących po stronie serwera. Możesz na przykład użyć Remote Config, aby promować nową funkcję w aplikacji, a potem automatycznie wyłączyć tę promocję, gdy wykryjesz, że wystarczająca liczba osób weszła w interakcję z nową funkcją.

    Schemat przedstawiający interakcję backendu Zdalnej konfiguracji z niestandardowymi narzędziami i serwerami

W poniższych sekcjach tego przewodnika opisaliśmy operacje, które można wykonywać interfejsów API backendu Remote Config. Aby sprawdzić kod, który je wykonuje: za pomocą interfejsu API REST, zobacz jedną z tych przykładowych aplikacji:

Modyfikowanie Zdalnej konfiguracji za pomocą pakietu Firebase Admin SDK

Admin SDK to zbiór bibliotek serwera, które umożliwiają interakcję z Firebase ze środowisk z podwyższonymi uprawnieniami. Oprócz przeprowadzania aktualizacji do Remote Config, Admin SDK umożliwia generowanie i weryfikację Tokeny uwierzytelniania Firebase, odczyt i zapis z Realtime Database itd. Więcej informacji o wymaganiach wstępnych i konfiguracji Admin SDK znajdziesz tutaj: Dodaj do serwera pakiet SDK Firebase Admin.

W typowym procesie Remote Config możesz pobrać bieżący szablon, zmodyfikować wybranych parametrów lub grup parametrów i warunków, sprawdź a następnie go opublikuj. Przed wykonaniem tych wywołań interfejsu API musisz autoryzować żądania z pakietu SDK.

Zainicjuj pakiet SDK i autoryzuj żądania do interfejsu API

Jeśli zainicjujesz Admin SDK bez parametrów, pakiet SDK użyje Domyślne dane uwierzytelniające aplikacji Google i odczytuje opcje ze zmiennej środowiskowej FIREBASE_CONFIG. Jeśli zawartość zmiennej FIREBASE_CONFIG zaczyna się od {, zostanie przekształcona analizowany jako obiekt JSON. W przeciwnym razie pakiet SDK zakłada, że ciąg znaków to nazwa pliku JSON zawierającego opcje.

Przykład:

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

Pobierz bieżący szablon Zdalnej konfiguracji

Podczas pracy z Remote Config szablonami pamiętaj, że mogą one są obsługiwane i że każda z nich ma ograniczony czas życia od utworzenia do momentu zastąpienia jej aktualizacją: 90 dni (z łącznym limitem) z 300 przechowywanych wersji. Zobacz Szablony i obsługa wersji .

Możesz użyć interfejsów API backendu, aby pobrać bieżącą aktywną wersję Szablon Remote Config w formacie JSON.

Parametry i ich wartości utworzone specjalnie jako warianty w parametrze A/B Testing eksperyment nie jest uwzględniony w eksportowanych szablonach.

Aby pobrać szablon:

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

Zmodyfikuj parametry Zdalnej konfiguracji

Możesz programowo modyfikować i dodawać parametry Remote Config oraz grup parametrów. Na przykład do dotychczasowej grupy parametrów o nazwie „nowe_menu” możesz dodać parametr, który kontroluje wyświetlanie informacji sezonowych:

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.")
        );

Interfejs API umożliwia tworzenie nowych parametrów grup oraz modyfikować wartości domyślne, wartości warunkowe i opisy. We wszystkich przypadkach musisz jednoznacznie opublikować szablon po wprowadzania zmian.

Zmodyfikuj warunki Zdalnej konfiguracji

Możesz automatycznie modyfikować i dodawać warunki Remote Config oraz wartości warunkowych. Aby na przykład dodać nowy warunek:

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

We wszystkich przypadkach musisz jednoznacznie opublikować szablon po wprowadzania zmian.

Interfejsy API backendu Remote Config zapewniają kilka warunków i porównań operatorów, których możesz użyć do zmiany działania i wyglądu aplikacji. Do więcej informacji o warunkach i operatorach obsługiwanych w przypadku tych warunków, zobacz odwołanie do wyrażeń warunkowych.

Weryfikowanie szablonu Zdalnej konfiguracji

Opcjonalnie możesz sprawdzić aktualizacje przed ich opublikowaniem w ten sposób:

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

Proces weryfikacji sprawdza, czy nie występują błędy, takie jak zduplikowane klucze parametrów i warunków; nieprawidłowe nazwy warunków, nieistniejące warunki lub niewłaściwie sformatowane znaczniki. Na przykład żądanie zawierające więcej niż dozwoloną liczbę Klucze – 2000 – zwracają komunikat o błędzie: Param count too large.

Opublikuj szablon Zdalnej konfiguracji.

Po pobraniu szablonu i poprawieniu go z uwzględnieniem pożądanego aktualizacje, możesz je opublikować. Publikowanie szablonu w sposób opisany w zastępuje cały istniejący szablon konfiguracji zaktualizowanym plikiem, nowy aktywny szablon otrzyma wersję o 1 numerze większą niż który zastąpił szablon.

W razie potrzeby możesz użyć interfejsu API REST, aby przywrócić poprzednią wersję. Aby ograniczyć ryzyko błędów aktualizacji, możesz: weryfikacji przed opublikowaniem.

Remote Config personalizacji i warunków są uwzględnione w pobranych szablonów. Pamiętaj o tych kwestiach: podczas próby opublikowania w innym projekcie:

  • Nie można importować personalizacji z projektu do projektu.

    Jeśli na przykład w projekcie masz włączone personalizacje pobrać i edytować szablon, można go opublikować projektu, ale nie możesz go opublikować w innym projekcie, chyba że go usuniesz personalizacje z szablonu.

  • Warunki można importować z projektu do projektu, ale pamiętaj, że każdy określonych wartości warunkowych (np. identyfikatory aplikacji lub listy odbiorców) powinny występować w projektu docelowego przed opublikowaniem.

    Jeśli np. masz parametr Remote Config, który korzysta z warunku określające wartość platformy iOS, szablon może zostać opublikowany do innego projektu, ponieważ wartości platformy są dla każdego projektu takie same. Jeśli jednak zawiera warunek, który zależy od określonego identyfikatora aplikacji lub użytkownika odbiorcy, których nie ma w projekcie docelowym, weryfikacja się nie powiedzie.

  • Jeśli szablon, który zamierzasz opublikować, zawiera warunki oparte na W środowisku docelowym musi być włączona funkcja Google Analytics, Analytics w projektach AI.

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

Modyfikowanie Zdalnej konfiguracji przy użyciu interfejsu API REST

W tej sekcji opisano główne funkcje Interfejs API typu REST Remote Config w witrynie https://firebaseremoteconfig.googleapis.com. Szczegółowe informacje znajdziesz w dokumentacji interfejsu API.

Uzyskiwanie tokena dostępu w celu uwierzytelniania i autoryzowania żądań do interfejsu API

Projekty Firebase obsługują Google kont usługi, które można wykorzystać do wywołania Firebase interfejsy API serwera z serwera aplikacji lub zaufanego środowiska. Jeśli tworzysz lokalnie lub lokalnie wdrażając aplikację, możesz korzystać z uzyskanych danych logowania za pośrednictwem tego konta usługi, aby autoryzować żądania serwera.

Uwierzytelnienie i autoryzacja konta usługi aby uzyskać dostęp do usług Firebase, musisz wygenerować plik klucza prywatnego w formacie JSON .

Aby wygenerować plik klucza prywatnego dla konta usługi:

  1. Otwórz konsolę Firebase Ustawienia > Konta usługi.

  2. Kliknij Wygeneruj nowy klucz prywatny, a następnie potwierdź, klikając Wygeneruj klucz.

  3. Bezpiecznie przechowuj plik JSON zawierający klucz.

.

Podczas autoryzacji za pomocą konta usługi masz 2 opcje udostępniania dane logowania do Twojej aplikacji. Możesz ustawić GOOGLE_APPLICATION_CREDENTIALS. Możesz też bezpośrednio przekazywać w kodzie ścieżkę do klucza konta usługi. Pierwsza opcja jest bezpieczniejsza i zdecydowanie zalecana.

Aby ustawić zmienną środowiskową:

Ustaw zmienną środowiskową GOOGLE_APPLICATION_CREDENTIALS do ścieżki pliku JSON zawierającego klucz konta usługi. Ta zmienna ma zastosowanie tylko do bieżącej sesji powłoki, więc jeśli otworzysz w nowej sesji, ustaw zmienną ponownie.

Linux lub macOS

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

Windows

Za pomocą PowerShell:

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

Gdy wykonasz powyższe czynności, domyślne dane uwierzytelniające aplikacji (ADC) może niejawnie określić Twoje dane logowania, dzięki czemu możesz korzystać dane logowania do konta podczas testowania lub uruchamiania w środowiskach innych niż Google.

Używaj danych logowania Firebase w połączeniu z: Biblioteka uwierzytelniania Google wybierz preferowany język, aby pobrać token dostępu OAuth 2.0 o ograniczonym czasie ważności:

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

W tym przykładzie biblioteka klienta interfejsu API Google uwierzytelnia żądanie za pomocą token sieciowy JSON, czyli JWT. Więcej informacji: Tokeny sieciowe JSON.

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

public static String getAccessToken() throws IOException {
  GoogleCredentials googleCredentials = GoogleCredentials
          .fromStream(new FileInputStream("service-account.json"))
          .createScoped(Arrays.asList(SCOPES));
  googleCredentials.refreshAccessToken();
  return googleCredentials.getAccessToken().getTokenValue();
}

Po wygaśnięciu tokena dostępu wywoływana jest metoda odświeżania tokena automatycznie pobierze zaktualizowany token dostępu.

Aby autoryzować dostęp do usługi Remote Config, poproś o zakres https://www.googleapis.com/auth/firebase.remoteconfig

Modyfikowanie szablonu Zdalnej konfiguracji

Podczas pracy z Remote Config szablonami pamiętaj, że mogą one są obsługiwane i że każda z nich ma ograniczony czas życia od utworzenia do momentu zastąpienia jej aktualizacją: 90 dni (z łącznym limitem) z 300 przechowywanych wersji. Zobacz Szablony i obsługa wersji .

Pobierz bieżący szablon Zdalnej konfiguracji

Możesz użyć interfejsów API backendu, aby pobrać bieżącą aktywną wersję Szablon Remote Config w formacie JSON.

Parametry i ich wartości utworzone specjalnie jako warianty w parametrze A/B Testing eksperyment nie jest uwzględniony w eksportowanych szablonach.

Użyj tych poleceń:

cURL

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

Wywołuje ono ładunek JSON do jednego pliku, a nagłówki (wraz z Etag) do osobnego pliku.

Nieprzetworzone żądanie HTTP

Host: firebaseremoteconfig.googleapis.com

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

To wywołanie interfejsu API zwraca następujący kod JSON, wraz z osobnym nagłówkiem, który zawiera tag elektroniczny, który służy do kolejne żądanie.

Weryfikowanie szablonu Zdalnej konfiguracji

Opcjonalnie możesz sprawdzić wprowadzone zmiany przed ich opublikowaniem. Zweryfikuj aktualizacje szablonu, dołączając do do żądania publikacji parametru adresu URL ?validate_only=true. W odpowiedzi kod stanu 200 i zaktualizowany tag z sufiksem -0 oznacza, że aktualizacja została zweryfikowana. Dowolna odpowiedź inna niż 200 wskazuje, że dane JSON zawierają błędy, które należy poprawić, zanim do publikacji.

Aktualizacja szablonu Zdalnej konfiguracji

Po pobraniu szablonu i poprawieniu zawartości JSON aktualizacje, możesz je opublikować. Publikowanie szablonu w sposób opisany w zastępuje cały istniejący szablon konfiguracji zaktualizowanym plikiem, nowy aktywny szablon otrzyma wersję o 1 numerze większą niż który zastąpił szablon.

W razie potrzeby możesz użyć interfejsu API REST, aby przywrócić poprzednią wersję. Aby ograniczyć ryzyko błędów aktualizacji, możesz: weryfikacji przed opublikowaniem.

Remote Config personalizacji i warunków są uwzględnione w pobranych szablonów. Pamiętaj o tych kwestiach: podczas próby opublikowania w innym projekcie:

  • Nie można importować personalizacji z projektu do projektu.

    Jeśli na przykład w projekcie masz włączone personalizacje pobrać i edytować szablon, można go opublikować projektu, ale nie możesz go opublikować w innym projekcie, chyba że go usuniesz personalizacje z szablonu.

  • Warunki można importować z projektu do projektu, ale pamiętaj, że każdy określonych wartości warunkowych (np. identyfikatory aplikacji lub listy odbiorców) powinny występować w projektu docelowego przed opublikowaniem.

    Jeśli np. masz parametr Remote Config, który korzysta z warunku określające wartość platformy iOS, szablon może zostać opublikowany do innego projektu, ponieważ wartości platformy są dla każdego projektu takie same. Jeśli jednak zawiera warunek, który zależy od określonego identyfikatora aplikacji lub użytkownika odbiorcy, których nie ma w projekcie docelowym, weryfikacja się nie powiedzie.

  • Jeśli szablon, który zamierzasz opublikować, zawiera warunki oparte na W środowisku docelowym musi być włączona funkcja Google Analytics, Analytics w projektach AI.

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

W przypadku tego polecenia curl treść możesz określić za pomocą znaku „@” znak, z nazwą pliku.

Nieprzetworzone żądanie HTTP

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

Jest to żądanie zapisu, więc funkcja ETag zostanie zmodyfikowana przez to polecenie, a zaktualizowany tag ETag zostanie przesłany nagłówki odpowiedzi następnego polecenia PUT.

Zmodyfikuj warunki Zdalnej konfiguracji

Możesz automatycznie modyfikować warunki Remote Config i warunkowe . W przypadku interfejsu API typu REST musisz edytować szablon bezpośrednio przed opublikowaniem szablonu.

{
  "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."
    }
  }
}

Powyższe modyfikacje najpierw definiują zestaw warunków, a następnie definiuje wartości domyślne i parametry zależne od warunków (wartości warunkowe) wartości poszczególnych parametrów. Dodaje też opcjonalny opis do każdej z nich, element; np. komentarze do kodu, są przeznaczone dla programistów i nie są wyświetlane. w aplikacji. ETag to są też udostępniane na potrzeby kontroli wersji.

Interfejsy API backendu Remote Config zapewniają kilka warunków i porównań operatorów, których możesz użyć do zmiany działania i wyglądu aplikacji. Do więcej informacji o warunkach i operatorach obsługiwanych w przypadku tych warunków, zobacz odwołanie do wyrażeń warunkowych.

Kody błędów HTTP

Kod stanu Znaczenie
200 Zaktualizowano
400 Podczas weryfikacji wystąpił błąd. Na przykład żądanie zawierające więcej niż dozwolona liczba kluczy – 2000 – zwraca wartość 400 (Nieprawidłowe żądanie) z argumentem komunikat o błędzie: Param count too large. Kod stanu HTTPS może też wystąpić w tych 2 sytuacjach:
  • Wystąpił błąd niezgodności wersji, ponieważ zbiór wartości i warunków został zaktualizowany od czasu ostatniego pobrania wartości ETag. Aby rozwiązać ten problem, użyj polecenia GET, aby pobrać nowy szablon i wartość ETag, zaktualizuj szablon, a następnie prześlij go za pomocą tego szablonu z nową wartością ETag.
  • Polecenie PUT (żądanie aktualizacji szablonu Remote Config) zostało wykonane bez określania nagłówka If-Match.
401 Wystąpił błąd autoryzacji (nie podano tokena dostępu lub Interfejs API typu REST Firebase Remote Config nie został dodany do Twojego projektu w konsola programisty Google Cloud)
403 Wystąpił błąd uwierzytelniania (podano nieprawidłowy token dostępu)
500 Wystąpił błąd wewnętrzny. Jeśli wystąpi ten błąd, wyślij zgłoszenie do zespołu pomocy Firebase

Kod stanu 200 oznacza, że szablon Remote Config (parametry, wartości i warunków projektu) została zaktualizowana i jest teraz dostępna dla aplikacji używający tego projektu. Inne kody stanu wskazują, że Remote Config istniejący wcześniej szablon nadal obowiązuje.

Po przesłaniu aktualizacji szablonu otwórz konsolę Firebase, aby sprawdź, czy zmiany są wyświetlane zgodnie z oczekiwaniami. Ma to kluczowe znaczenie, ponieważ kolejność warunków wpływa na sposób ich oceny (pierwszy warunek, sprawdza zastosowanie true).

Wykorzystanie ETag i wymuszone aktualizacje

Interfejs API typu REST Remote Config używa tagu encji (ETag) do zapobiegania warunkom wyścigu i pokrywających się aktualizacji zasobów. Więcej informacji o tagach ETag znajdziesz w artykule ETag – HTTP.

W przypadku interfejsu API typu REST Google zaleca zapisywanie w pamięci podręcznej użyj parametru ETag dostarczonego w najnowszym poleceniu GET i użyj tej wartości ETag, w nagłówku żądania If-Match podczas uruchamiania poleceń PUT. Jeśli PUT zwraca kod stanu HTTPS 409, musisz wysłać nowe GET w celu uzyskania nowego tagu ETag i szablonu do użycia w następnym poleceniu PUT.

Możesz obejść ETag i zapewniane przez nie zabezpieczenia, wymusza aktualizację szablonu Remote Config w następujący sposób: If-Match: * Nie jest to jednak zalecane, ponieważ może spowodować utratę aktualizacje szablonu Remote Config, jeśli wielu klientów aktualizuje Szablon Remote Config. Tego rodzaju konflikt może wystąpić, gdy klientów używających interfejsu API albo z sprzecznymi aktualizacjami z klientów API Firebase użytkowników konsoli.

Wskazówki dotyczące zarządzania wersjami szablonu Remote Config znajdziesz w artykule Szablony Zdalnej konfiguracji i obsługa wersji.