Aggiornamento automatico

Desideriamo che le estensioni e le app vengano aggiornate automaticamente per alcuni degli stessi motivi di Google Chrome: incorporare correzioni di bug e sicurezza, aggiungere nuove funzioni o miglioramenti delle prestazioni e migliorare le interfacce utente.

Se pubblichi utilizzando la Dashboard per sviluppatori di Chrome, devi ignorare questa pagina. Gli invii sul Chrome Web Store che superano l'anteprima vengono resi automaticamente disponibili nella scheda dell'elemento nel Chrome Web Store dell'estensione e distribuiti agli utenti finali.

Se ospiti un file CRX su un server web e utilizzi criteri aziendali per eseguirne il push sui dispositivi gestiti, continua a leggere. Dovresti leggere anche Hosting e Packaging.

In precedenza, quando erano supportate le estensioni esterne allo store, era possibile che i programmi binari nativi e l'estensione venissero aggiornati nel passaggio di blocco. Tuttavia, le estensioni ospitate sul Chrome Web Store vengono aggiornate tramite il meccanismo di aggiornamento di Chrome che gli sviluppatori non controllano. Gli sviluppatori di estensioni devono fare attenzione all'aggiornamento delle estensioni che hanno una dipendenza dal programma binario nativo (ad esempio, estensioni legacy che utilizzano NPAPI).

Panoramica

  • Un file manifest potrebbe contenere un campo "update_url" che rimanda a una posizione in cui eseguire i controlli degli aggiornamenti.
  • I contenuti restituiti da un controllo degli aggiornamenti sono un documento XML manifest di aggiornamento che elenca la versione più recente di un'estensione.

A intervalli di alcune ore, il browser controlla se sono presenti estensioni o app installate con un URL di aggiornamento. Per ciascun URL, invia una richiesta a quell'URL cercando un file XML manifest di aggiornamento. Se il manifest di aggiornamento fa riferimento a una versione più recente di quella installata, il browser scarica e installa la nuova versione. Come per gli aggiornamenti manuali, il nuovo file .crx deve essere firmato con la stessa chiave privata della versione attualmente installata.

Aggiorna URL

Se ospiti la tua estensione o app, devi aggiungere il campo "update_url" al file manifest.json in questo modo:

{
  "name": "My extension",
  ...
  "update_url": "http://myhost.com/mytestextension/updates.xml",
  ...
}

Aggiorna manifest

Il manifest di aggiornamento restituito dal server deve essere un documento XML simile al seguente (i punti salienti indicano le parti che devi modificare):

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
  </app>
</gupdate>

Questo formato XML è stato preso in prestito da quello utilizzato da Omaha, l'infrastruttura di aggiornamento di Google. Per maggiori dettagli, visita la pagina http://code.google.com/p/omaha/. Il sistema delle estensioni utilizza i seguenti attributi per gli elementi e del file manifest dell'aggiornamento:

appid

L'ID dell'estensione o dell'app, generato in base a un hash della chiave pubblica, come descritto nella sezione Packaging. Puoi trovare l'ID di un'estensione o di un'app di Chrome nella pagina Estensioni (chrome://extensions).

Le app ospitate, tuttavia, non sono elencate nella pagina Estensioni. Per trovare l'ID di qualsiasi app, segui questi passaggi:

  • Apri l'app facendo clic sulla relativa icona nella pagina Nuova scheda.
  • Apri la console JavaScript. A tale scopo, fai clic sull'icona della chiave inglese e scegli Strumenti > Console JavaScript.
  • Inserisci la seguente espressione nella console JavaScript: chrome.app.getDetails().id. La console mostra l'ID dell'app come stringa tra virgolette.
codebase

Un URL che rimanda al file .crx.

versione

Utilizzato dal client per determinare se deve scaricare il file .crx specificato da codebase. Deve corrispondere al valore di "version" nel file manifest.json del file .crx.

Il file XML manifest di aggiornamento può contenere informazioni su più estensioni includendo più elementi.

Test

La frequenza predefinita del controllo degli aggiornamenti è di diverse ore, ma puoi forzare un aggiornamento utilizzando il pulsante Aggiorna le estensioni ora della pagina Estensioni.

Utilizzo avanzato: parametri di richiesta

Il meccanismo di aggiornamento automatico di base è progettato per semplificare il lavoro lato server tanto quanto è sufficiente trasferire un file XML statico su un server web semplice, ad esempio Apache, e aggiornare il file XML man mano che vengono rilasciate nuove versioni delle estensioni.

Gli sviluppatori più esperti potrebbero sfruttare il fatto che aggiungiamo parametri alla richiesta del file manifest di aggiornamento per indicare l'ID e la versione dell'estensione. Possono quindi utilizzare lo stesso URL di aggiornamento per tutte le estensioni, puntando a un URL che esegue un codice dinamico lato server anziché a un file XML statico.

Il formato dei parametri della richiesta è:

?x=_<extension_data>_

Dove _<extension_data>_ è una stringa con codifica URL del formato:

_id=<id>_&v=_<version>_

Ad esempio, supponiamo che tu abbia due estensioni, che puntano entrambe allo stesso URL di aggiornamento (http://test.com/extension_updates.php):

  • Estensione 1
    • ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    • Versione: "1.1"
  • Estensione 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Versione: "0.4"

La richiesta di aggiornamento di ogni singola estensione sarebbe:

  • http://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
  • http://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

È possibile elencare più estensioni in una singola richiesta per ciascun URL di aggiornamento univoco. Nell'esempio precedente, se un utente ha installato entrambe le estensioni, le due richieste vengono unite in un'unica richiesta:

http://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

Se il numero di estensioni installate che utilizzano lo stesso URL di aggiornamento è sufficientemente lungo da rendere l'URL di una richiesta GET troppo lungo (oltre 2000 caratteri circa), il controllo degli aggiornamenti emette richieste GET aggiuntive come necessario.

Utilizzo avanzato: versione minima del browser

Man mano che aggiungiamo altre API al sistema di estensioni, è possibile che tu voglia rilasciare una versione aggiornata di un'estensione o di un'app che funzioni solo con le versioni più recenti del browser. Anche se Google Chrome viene aggiornato automaticamente, possono essere necessari alcuni giorni prima che la maggior parte della base utenti venga aggiornata a una determinata nuova release. Per assicurarti che un determinato aggiornamento venga applicato solo alle versioni di Google Chrome corrispondenti o successive a una versione specifica, aggiungi l'attributo "prodversionmin" all'elemento nel file manifest dell'aggiornamento. Ad esempio:

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
  </app>
</gupdate>

In questo modo gli utenti eseguono l'aggiornamento automatico alla versione 2 solo se eseguono Google Chrome 3.0.193.0 o versioni successive.