Vogliamo che le estensioni e le app vengano aggiornate automaticamente per alcuni degli stessi motivi per cui lo fa Google Chrome stesso: per incorporare correzioni di bug e sicurezza, aggiungere nuove funzionalità o miglioramenti delle prestazioni e migliorare le interfacce utente.
Se pubblichi utilizzando la Dashboard per sviluppatori di Chrome, devi ignorare questa pagina. I contenuti inviati al Chrome Web Store che superano l'anteprima vengono messi automaticamente a disposizione nella scheda dell'elemento del Chrome Web Store dell'estensione e implementati per gli utenti finali.
Se ospiti un file CRX su un server web e utilizzi i criteri aziendali per pusharlo sui dispositivi gestiti, continua a leggere. Ti consigliamo inoltre di leggere le sezioni Hosting e Pacchettizzazione.
In precedenza, quando le estensioni non in negozio erano supportate, era possibile aggiornare i file binari e l'estensione in modo sincrono. Tuttavia, le estensioni ospitate sul Chrome Web Store vengono aggiornate utilizzando il meccanismo di aggiornamento di Chrome, che non è sotto il controllo degli sviluppatori. Gli sviluppatori di estensioni devono essere cauti nell'aggiornare le estensioni che dipendono dal file binario (ad esempio le estensioni precedenti che utilizzano NPAPI).
Panoramica
- Un file manifest può contenere un campo "update_url" che rimanda a una posizione per eseguire i controlli degli aggiornamenti.
- I contenuti restituiti da un controllo dell'aggiornamento sono un documento XML manifest di aggiornamento che elenca la versione più recente di un'estensione.
Ogni poche ore, il browser controlla se le estensioni o le app installate hanno un URL di aggiornamento. Per ciascuno, invia una richiesta all'URL in questione cercando un file XML manifest di aggiornamento. Se il manifest
dell'aggiornamento menziona 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 installata.
Aggiorna l'URL
Se ospiti la tua estensione o app, devi aggiungere il campo "update_url" al file
manifest.json
, come segue:
{
"name": "My extension",
...
"update_url": "http://myhost.com/mytestextension/updates.xml",
...
}
Aggiorna il manifest
Il manifest di aggiornamento restituito dal server deve essere un documento XML simile al seguente (le parti evidenziate indicano le parti da 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 è ripreso da quello utilizzato da Omaha, l'infrastruttura di aggiornamento di Google. Per ulteriori dettagli, consulta la pagina
http://code.google.com/p/omaha/. Il sistema delle estensioni utilizza i seguenti attributi per gli elementi <app>
e <updatecheck>
del file manifest dell'aggiornamento:
- appid
L'ID estensione o app, generato in base a un hash della chiave pubblica, come descritto in Pacchettizzazione. Puoi trovare l'ID di un'estensione o di un'app di Chrome nella pagina Estensioni (chrome://extensions).
Le app in hosting, invece, 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. Per farlo, fai clic sull'icona a forma di 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 dacodebase
. Deve corrispondere al valore di "version" nel filemanifest.json
del file.crx
.
Il file XML del manifest dell'aggiornamento può contenere informazioni su più estensioni includendo più elementi<app>
.
Test
La frequenza di controllo degli aggiornamenti predefinita è di diverse ore, ma puoi forzare un aggiornamento utilizzando il pulsante Aggiorna ora le estensioni nella pagina Estensioni.
Utilizzo avanzato: parametri di richiesta
Il meccanismo di aggiornamento automatico di base è progettato per ridurre al minimo il lavoro lato server. Devi solo aggiungere un file XML statico a qualsiasi server web, ad esempio Apache, e aggiornarlo man mano che rilasci nuove versioni delle estensioni.
Gli sviluppatori più esperti possono trarre vantaggio dal fatto che aggiungiamo parametri alla richiesta del manifest di aggiornamento per indicare l'ID e la versione dell'estensione. In questo modo, possono utilizzare lo stesso URL di aggiornamento per tutte le estensioni, facendo riferimento a un URL che esegue codice lato server dinamico anziché un file XML statico.
Il formato dei parametri di richiesta è:
?x=_<extension_data>_
dove _<extension_data>_
è una stringa con codifica URL del seguente formato:
_id=<id>_&v=_<version>_
Ad esempio, supponiamo che tu abbia due estensioni, entrambe che rimandano allo stesso URL di aggiornamento
(http://test.com/extension_updates.php
):
- Estensione 1
- ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Versione: "1.1"
- Estensione 2
- ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- Versione: "0.4"
La richiesta di aggiornamento di ogni singola estensione sarà:
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 ogni URL di aggiornamento univoco. Ad esempio, se un utente ha installato entrambe le estensioni, le due richieste vengono unite in una singola 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 elevato da rendere un URL di richiesta GET troppo lungo (oltre 2000 caratteri circa), il controllo dell'aggiornamento invia richieste GET aggiuntive, se 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 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 di utenti abbia eseguito l'aggiornamento a una determinata nuova release. Per assicurarti che un determinato aggiornamento venga applicato solo alle versioni di Google Chrome uguali o successive a una versione specifica, aggiungi l'attributo "prodversionmin" all'elemento <app>
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 si aggiorneranno automaticamente alla versione 2 solo se utilizzano Google Chrome 3.0.193.0 o versioni successive.