Modelli e controllo delle versioni di Remote Config


I modelli Remote Config sono insiemi di parametri e condizioni in formato JSON che hai creato per il tuo progetto Firebase. Puoi creare modelli client, da cui la tua app recupera i valori, e modelli server, da cui i client server possono recuperare i valori.

Questa sezione illustra i modelli di client. Per scoprire di più sui modelli specifici del server, fai clic su Modelli di server.

Modifichi e gestisci il modello utilizzando la console Firebase, che mostra i contenuti del modello in formato grafico nelle SchedeParametri e Condizioni.

Puoi anche utilizzare l' API Remote Config REST e l'SDK Admin o la Firebase interfaccia a riga di comando per modificare e gestire il modello client.

Ecco un esempio di file di modello server:

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

Puoi eseguire queste attività di gestione delle versioni con la Firebase console:

  • Elencare tutte le versioni del modello archiviate
  • Recuperare una versione specifica
  • Eseguire il rollback a una versione client specifica
  • Eliminare i modelli Remote Config dalla pagina Cronologia delle modifiche

È previsto un limite totale di 300 versioni archiviate a vita per tipo di modello (300 modelli client e 300 modelli server), che include i numeri di versione archiviati per i modelli eliminati. Se pubblichi più di 300 versioni di modelli per tipo di modello durante il ciclo di vita di un progetto, le versioni precedenti vengono eliminate, mantenendo un massimo di 300 versioni di quel tipo.

Ogni volta che aggiorni i parametri, Remote Config crea un nuovo modello Remote Config con controllo delle versioni e archivia il modello precedente come versione a cui puoi recuperare o eseguire il rollback, se necessario. I numeri di versione vengono incrementati in sequenza dal valore iniziale memorizzato da Remote Config. Tutti i modelli includono un campo version come mostrato, contenente i metadati relativi a quella versione specifica.

Puoi eliminare i modelli Remote Config in base alle esigenze dalla pagina Cronologia delle modifiche della console Remote Config.

Gestire le versioni dei modelli Remote Config

Questa sezione descrive come gestire le versioni del modello di Remote Config template.

Elencare tutte le versioni archiviate del modello Remote Config

Puoi recuperare un elenco di tutte le versioni archiviate del Remote Config modello. A tal fine:

Firebase console

Nella scheda Parametri, seleziona l'icona "orologio" visualizzata in alto a destra. Si apre la pagina Cronologia delle modifiche che elenca tutte le versioni del modello archiviate in un menu di elenco a destra.

I dettagli visualizzati per ogni versione archiviata includono informazioni sull'origine delle modifiche (console, API REST, rollback) o se si tratta di modifiche incrementali da un salvataggio forzato del modello.

Firebase interfaccia a riga di comando

firebase remoteconfig:versions:list

Utilizza l'opzione --limit per limitare il numero di versioni restituite. Trasmetti "0" per recuperare tutte le versioni.

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

L'elenco dei modelli include i metadati per tutte le versioni archiviate, inclusi l'ora dell'aggiornamento, l'utente che l'ha eseguito e la modalità di esecuzione. Ecco un esempio di elemento versione:

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

Recuperare una versione specifica del modello Remote Config

Puoi recuperare qualsiasi versione specifica archiviata del modello Remote Config. Per recuperare una versione del modello archiviata:

Firebase console

Per impostazione predefinita, il riquadro dei dettagli nella scheda Cronologia delle modifiche mostra il modello attivo corrente. Per visualizzare i dettagli di un'altra versione nell'elenco, selezionala dal menu a destra.

Puoi visualizzare una differenza dettagliata della versione attualmente selezionata e di qualsiasi altra versione archiviata passando il mouse sopra il menu contestuale di qualsiasi versione non selezionata e selezionando Confronta con la versione selezionata.

Firebase interfaccia a riga di comando

firebase remoteconfig:get -v VERSION_NUMBER

Facoltativamente, puoi scrivere l'output in un file specificato con -o, FILENAME.

Node.js

Trasmetti getTemplate() senza argomenti per recuperare l'ultima versione del modello oppure utilizza getTemplateAtVersion() per recuperare una versione specifica.

// 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

Il parametro URL ?version_number è valido solo per le operazioni GET; non puoi utilizzarlo per specificare i numeri di versione per gli aggiornamenti. Una richiesta get simile senza il parametro ?version_number recupererebbe il modello attivo corrente.

Eseguire il rollback a una versione specifica archiviata del modello Remote Config

Puoi eseguire il rollback a qualsiasi versione archiviata del modello. Per eseguire il rollback di un modello:

Firebase console

Per le versioni precedenti del modello idonee per il rollback, viene visualizzato un pulsante delle opzioni per eseguire il rollback a quella versione in alto a destra nella pagina Cronologia delle modifiche. Fai clic e conferma solo se sei sicuro di voler eseguire il rollback a quella versione e utilizzare questi valori immediatamente per tutte le app e tutti gli utenti.

Firebase interfaccia a riga di comando

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

Per eseguire il rollback a un modello Remote Config archiviato, invia una richiesta HTTP POST con il metodo personalizzato :rollback e, nel corpo della richiesta, la versione specifica da applicare. Ad esempio:

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}'

La risposta contiene i contenuti del modello archiviato ora attivo, con i relativi nuovi metadati della versione.

Tieni presente che questa operazione di rollback crea effettivamente una nuova versione numerata. Ad esempio, l'esecuzione del rollback dalla versione 10 alla versione 6 crea effettivamente una nuova copia della versione 6, che differisce dall'originale solo per il fatto che il suo numero di versione è 11. La versione originale 6 è ancora archiviata, a condizione che non abbia raggiunto la scadenza, e la versione 11 diventa il modello attivo.

Eliminare un modello Remote Config

Puoi eliminare i modelli Remote Config dalla console Firebase. Per eliminare un Remote Config modello:

1. Nella pagina Remote Config Parametri, fai clic su Cronologia delle modifiche.
  1. Passa al modello che vuoi eliminare, fai clic su Altro, quindi seleziona Elimina.

  2. Quando ti viene chiesto di confermare l'eliminazione, fai clic su Elimina.

Scaricare e pubblicare i modelli Remote Config

Scarica e pubblica i modelli Remote Config per integrarli nei sistemi di controllo della sorgente e di build , automatizzare gli aggiornamenti della configurazione e mantenere sincronizzati parametri e valori in più progetti.

Puoi scaricare il modello Remote Config attualmente attivo dalla console Firebase. Quindi, puoi aggiornare il file JSON esportato e pubblicarlo nello stesso progetto oppure in un progetto nuovo o esistente.

Supponiamo che tu abbia più progetti che rappresentano diverse fasi del ciclo di vita dello sviluppo software, come ambienti di sviluppo, test, gestione temporanea e produzione. In questo caso, potresti promuovere un modello completamente testato dall'ambiente di gestione temporanea all'ambiente di produzione scaricandolo dal progetto di gestione temporanea e pubblicandolo nel progetto di produzione.

Puoi anche utilizzare questo metodo per eseguire la migrazione delle configurazioni da un progetto a un altro o per popolare un nuovo progetto con parametri e valori di un progetto stabilito.

I parametri e i valori dei parametri creati specificamente come varianti in un A/B Testing esperimento non sono inclusi nei modelli esportati.

Per esportare e importare i modelli Remote Config:

  1. Scarica il modello di configurazione Remote Config corrente.
  2. Convalida il modelloRemote Config.
  3. Pubblica il modello Remote Config.

Scaricare il modello di Remote Config corrente

Utilizza quanto segue per scaricare il modello Remote Config attivo in formato JSON:

Firebase console

  1. Nella scheda Remote Config Parametri o Condizioni , apri il menu e seleziona Scarica il file di configurazione attuale.
  2. Quando ti viene chiesto, fai clic su Scarica il file di configurazione, scegli la posizione in cui vuoi salvare il file, quindi fai clic su Salva.

Firebase interfaccia a riga di comando

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

Questo comando genera il payload JSON in un file e le intestazioni (incluso l'ETag) in un file headers separato.

Convalidare il modello di Remote Config

Puoi convalidare gli aggiornamenti dei modelli prima di pubblicarli utilizzando l' Firebase Admin SDK o l'API REST. I modelli vengono convalidati anche quando tenti di pubblicarli dall'interfaccia a riga di comando Firebase o dalla console Firebase.

La procedura di convalida del modello verifica la presenza di errori come chiavi duplicate per parametri e condizioni, nomi di condizioni non validi o condizioni inesistenti o ETag con formato errato. Ad esempio, una richiesta contenente un numero di chiavi superiore al numero consentito (2000) restituirebbe il messaggio di errore 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

Convalida gli aggiornamenti dei modelli aggiungendo il parametro URL ?validate_only=true alla richiesta di pubblicazione:

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

Se il modello è stato convalidato correttamente, il comando curl restituisce il modello JSON che hai inviato e, nel file headers salvato, troverai uno stato HTTP/2 200 e un ETag aggiornato con il suffisso -0. Se il modello non è stato convalidato, riceverai l'errore di convalida nella risposta JSON e il file headers conterrà una risposta non 200 (e nessun ETag).

Pubblicare il modello Remote Config

Dopo aver scaricato un modello, apportato le modifiche necessarie ai contenuti JSON e averlo convalidato, puoi pubblicarlo in un progetto.

La pubblicazione di un modello sostituisce l'intero modello di configurazione esistente con il file aggiornato e incrementa di uno la versione del modello. Poiché l'intera configurazione viene sostituita, se elimini un parametro dal file JSON e lo pubblichi, il parametro viene eliminato dal server e non è più disponibile per i client.

Dopo la pubblicazione, le modifiche ai parametri e ai valori sono disponibili immediatamente per le app e gli utenti. Se necessario, puoi eseguire il rollback a una versione precedente.

Utilizza i seguenti comandi per pubblicare il modello:

Firebase console

  1. Nella scheda Remote Config Parametri o Condizioni, apri il Menu, e seleziona Pubblica da un file.
  2. Quando ti viene chiesto, fai clic su Sfoglia, individua e seleziona il Remote Config file che vuoi pubblicare, quindi fai clic su Seleziona.
  3. Il file verrà convalidato e, se l'operazione va a buon fine, puoi fare clic su Pubblica per rendere la configurazione immediatamente disponibile per le app e gli utenti.

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

Per questo comando curl, puoi specificare i contenuti utilizzando il carattere "@", seguito dal nome del file.

Remote Config personalizzazioni e condizioni sono incluse nei modelli scaricati, quindi è importante tenere presente le seguenti limitazioni quando tenti di pubblicare in un progetto diverso:

  • Le personalizzazioni non possono essere importate da un progetto all'altro.

    Ad esempio, se hai attivato le personalizzazioni nel tuo progetto e scarichi e modifichi un modello, puoi pubblicarlo nello stesso progetto, ma non puoi pubblicarlo in un progetto diverso a meno che non elimini le personalizzazioni dal modello.

  • Le condizioni possono essere importate da un progetto all'altro, ma tieni presente che tutti i valori condizionali specifici (come ID app o segmenti di pubblico) devono esistere nel progetto di destinazione prima della pubblicazione.

    Ad esempio, se hai un parametro Remote Config che utilizza una condizione che specifica un valore della piattaforma iOS, il modello può essere pubblicato in un altro progetto, perché i valori della piattaforma sono gli stessi per qualsiasi progetto. Tuttavia, se contiene una condizione che si basa su un ID app o un segmento di pubblico utente specifico che non esiste nel progetto di destinazione, la convalida non andrà a buon fine.

  • Se il modello che prevedi di pubblicare contiene condizioni che si basano su Google Analytics, Analytics deve essere attivato nel progetto di destinazione.

Scaricare i valori predefiniti dei modelli Remote Config

Poiché la tua app potrebbe non essere sempre connessa a internet, devi configurare i valori predefiniti dell'app lato client per tutti i Remote Config parametri. Dovresti anche sincronizzare periodicamente i valori predefiniti del client dell'app e i valori dei parametri predefiniti del backend di Remote ConfigRemote Config, perché potrebbero cambiare nel tempo.

Come descritto nei link specifici della piattaforma alla fine di questa sezione, puoi impostare manualmente questi valori predefiniti nella tua app oppure puoi semplificare questa procedura scaricando i file che contengono solo le coppie chiave-valore per tutti i parametri e i relativi valori predefiniti nel modello Remote Config attivo. Puoi quindi includere questo file nel tuo progetto e configurare l'app per importare questi valori.

Puoi scaricare questi file in formato XML per le app Android, in formato elenco di proprietà (plist) per le app iOS e in formato JSON per le app web.

Ti consigliamo di scaricare periodicamente i valori predefiniti di Remote Config prima di ogni nuova release dell'app per assicurarti che l'app e il backend di Remote Config rimangano sincronizzati.

Firebase

Per scaricare un file contenente i valori predefiniti del modello:

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'

Utilizza XML, PLIST o JSON come valore format, a seconda del formato di file che vuoi scaricare.

Firebase console

  1. Nella scheda Parametri, apri il Menu e seleziona Scarica i valori predefiniti.
  2. Quando ti viene chiesto, fai clic sul pulsante di opzione corrispondente al formato di file che vuoi scaricare, quindi fai clic su Scarica file.

Per maggiori informazioni sull'importazione dei valori predefiniti Remote Config nella tua app, consulta: