Automatycznie modyfikuj Zdalną konfigurację

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

za pomocą interfejsu Remote Config API REST API lub pakietów Admin SDK opisanych w tym przewodniku, możesz pominąć zarządzanie szablonem w konsoli Firebase, aby umożliwić bezpośrednią integrację Zdalna konfiguracja zmienia się w Twoje własne procesy. Na przykład API backendu Zdalnej konfiguracji możesz:

  • Planowanie aktualizacji Zdalnej konfiguracji Korzystając z wywołań interfejsu API w połączeniu z zadaniem cron, możesz regularnie zmieniać wartości Zdalnej konfiguracji.
  • Zbiorcze importowanie wartości konfiguracyjnych, aby sprawnie przejść z własnego zastrzeżonego systemu na Zdalną konfigurację Firebase.
  • Używaj Zdalnej konfiguracji z Cloud Functions dla Firebase, aby zmieniać wartości w aplikacji na podstawie zdarzeń występujących po stronie serwera. Za pomocą Zdalnej konfiguracji możesz na przykład 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ć z interfejsów API backendu Zdalnej konfiguracji. 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

Pakiet Admin SDK to zestaw bibliotek serwera, które umożliwiają korzystanie z interfejsów Firebase ze środowisk z podwyższonymi uprawnieniami. Oprócz przeprowadzania aktualizacji do Zdalnej konfiguracji, pakiet Admin SDK umożliwia generowanie i weryfikację Tokeny uwierzytelniania Firebase, odczyt i zapis z Bazy danych czasu rzeczywistego itp. Aby dowiedzieć się więcej o wymaganiach wstępnych i konfiguracji pakietu Admin SDK, zobacz Dodaj do serwera pakiet SDK Firebase Admin.

W typowym procesie Zdalnej konfiguracji 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 pakiet Admin SDK bez parametrów, będzie on używać: 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 szablonami Zdalnej konfiguracji 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 Zdalnej konfiguracji w formacie JSON.

Parametry i ich wartości utworzone specjalnie jako warianty w parametrze Eksperyment z testami A/B nie jest uwzględniany 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 Zdalnej konfiguracji 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 programowo modyfikować i dodawać warunki Zdalnej konfiguracji 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 Zdalnej konfiguracji 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 dokumentację 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.

Personalizacje i warunki Zdalnej konfiguracji 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 na przykład masz parametr Zdalnej konfiguracji, który korzysta z warunku określające wartość platformy wynoszącą 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 Google Analytics należy włączyć w kampanii docelowej 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 Zdalnej konfiguracji jest dostępny na stronie 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. W konsoli Firebase otwórz 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 Zdalnej konfiguracji, poproś o zakres https://www.googleapis.com/auth/firebase.remoteconfig

Modyfikowanie szablonu Zdalnej konfiguracji

Podczas pracy z szablonami Zdalnej konfiguracji 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 Zdalnej konfiguracji w formacie JSON.

Parametry i ich wartości utworzone specjalnie jako warianty w parametrze Eksperyment z testami A/B nie jest uwzględniany 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.

Personalizacje i warunki Zdalnej konfiguracji 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 na przykład masz parametr Zdalnej konfiguracji, który korzysta z warunku określające wartość platformy wynoszącą 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 Google Analytics należy włączyć w kampanii docelowej 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 programowo modyfikować warunki Zdalnej konfiguracji 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 Zdalnej konfiguracji 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 dokumentację 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 Zdalnej konfiguracji) 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 Zdalnej konfiguracji Firebase 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 Zdalnej konfiguracji (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 Zdalna konfiguracja 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 Zdalnej konfiguracji używa tagu encji (ETag), aby zapobiegać 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 Zdalnej konfiguracji w ten sposób: If-Match: * Nie jest to jednak zalecane, ponieważ może spowodować utratę do szablonu Zdalnej konfiguracji, jeśli wiele klientów aktualizuje Szablon Zdalnej konfiguracji. Tego rodzaju konflikt może wystąpić, gdy klientów używających interfejsu API albo z sprzecznymi aktualizacjami z klientów API użytkowników konsoli Firebase.

Wskazówki dotyczące zarządzania wersjami szablonów Zdalnej konfiguracji znajdziesz tu: Szablony Zdalnej konfiguracji i obsługa wersji.