Atualização automática

Queremos que as extensões e os apps sejam atualizados automaticamente por alguns dos mesmos motivos do próprio Google Chrome: para incorporar correções de bugs e segurança, adicionar novos recursos ou melhorias de desempenho e melhorar as interfaces do usuário.

Se você publicar usando o Painel de controle do desenvolvedor do Google Chrome, ignore esta página. Os envios da Chrome Web Store que passam na visualização são disponibilizados automaticamente na página de detalhes de itens da Chrome Web Store e implantados para os usuários finais.

Se você estiver hospedando um arquivo CRX em um servidor da Web e usando políticas corporativas para enviá-lo para dispositivos gerenciados, continue lendo. Leia também Hosting e Empacotamento.

Antes, quando as extensões fora da loja eram compatíveis, era possível ter os binários nativos e a extensão ser atualizada na etapa de bloqueio. No entanto, as extensões hospedadas na Chrome Web Store são atualizadas pelo mecanismo de atualização do Chrome, que os desenvolvedores não controlam. Os desenvolvedores precisam ter cuidado ao atualizar extensões que têm uma dependência no binário nativo (por exemplo, extensões legadas que usam NPAPI).

Informações gerais

  • Um manifesto pode conter um campo "update_url", apontando para um local para realizar verificações de atualização.
  • O conteúdo retornado por uma verificação de atualização é um documento XML de manifesto de atualização que lista a versão mais recente de uma extensão.

Em intervalos de algumas horas, o navegador verifica se alguma extensão ou app instalado tem um URL de atualização. Para cada uma delas, ele faz uma solicitação ao URL em busca de um arquivo XML de manifesto de atualização. Se o manifesto de atualização mencionar uma versão mais recente do que a instalada, o navegador fará o download e vai instalar a nova versão. Assim como nas atualizações manuais, o novo arquivo .crx precisa ser assinado com a mesma chave privada da versão instalada atualmente.

Atualizar URL

Se você estiver hospedando seu próprio app ou extensão, adicione o campo "update_url" ao arquivo manifest.json, desta forma:

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

Atualizar o manifesto

O manifesto de atualização retornado pelo servidor deve ser um documento XML semelhante a este (os destaques indicam as partes que você precisa modificar):

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

Esse formato XML é emprestado do usado pelo Omaha, a infraestrutura de atualização do Google. Consulte http://code.google.com/p/omaha/ para ver mais detalhes. O sistema de extensões usa os seguintes atributos para os elementos e do manifesto de atualização:

appid

O ID da extensão ou do app, gerado com base em um hash da chave pública, conforme descrito em Empacotamento. Para encontrar o ID de uma extensão ou de um app do Chrome, acesse a página "Extensões" (chrome://extensions).

No entanto, os aplicativos hospedados não são listados na página "Extensões". Para encontrar o ID de qualquer app, siga estas etapas:

  • Abra o aplicativo clicando no ícone dele na página "Nova guia".
  • Abra o Console JavaScript. Para isso, clique no ícone de chave inglesa e selecione Tools > JavaScript Console.
  • Digite a seguinte expressão no Console JavaScript: chrome.app.getDetails().id. O console mostra o ID do aplicativo como uma string entre aspas.
codebase

Um URL para o arquivo .crx.

version

Usado pelo cliente para determinar se ele precisa fazer o download do arquivo .crx especificado por codebase. Ele precisa corresponder ao valor de "version" no arquivo manifest.json do arquivo .crx.

O arquivo XML do manifesto de atualização pode conter informações sobre várias extensões incluindo vários elementos .

Teste

A frequência padrão de verificação de atualização é de várias horas, mas é possível forçar uma atualização usando o botão Atualizar extensões agora da página "Extensões".

Uso avançado: parâmetros de solicitação

O mecanismo básico de atualização automática foi projetado para fazer com que o servidor funcione da mesma forma: simplesmente soltar um arquivo XML estático em qualquer servidor da Web simples, como o Apache, e atualizar esse arquivo XML à medida que você lança novas versões das suas extensões.

Desenvolvedores mais avançados podem querer aproveitar o fato de que adicionamos parâmetros à solicitação do manifesto de atualização para indicar o ID e a versão da extensão. Em seguida, eles podem usar o mesmo URL de atualização para todas as extensões, apontando para um URL que executa o código dinâmico do lado do servidor, em vez de um arquivo XML estático.

O formato dos parâmetros de solicitação é:

?x=_<extension_data>_

Em que _<extension_data>_ é uma string codificada por URL do formato:

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

Por exemplo, digamos que você tenha duas extensões, ambas apontam para o mesmo URL de atualização (http://test.com/extension_updates.php):

  • Extensão 1
    • Código: "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • Versão: "1.1"
  • Extensão 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Versão: "0.4"

O pedido para atualizar cada extensão individual seria:

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

Várias extensões podem ser listadas em uma única solicitação para cada URL de atualização exclusivo. No exemplo acima, se um usuário tiver as duas extensões instaladas, as duas solicitações serão mescladas em uma única solicitação:

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

Se o número de extensões instaladas que usam o mesmo URL de atualização for grande o suficiente para que um URL de solicitação GET seja muito longo (mais de 2.000 caracteres), a verificação de atualização emitirá outras solicitações GET conforme necessário.

Uso avançado: versão mínima do navegador

À medida que adicionamos mais APIs ao sistema de extensões, é possível que você queira lançar uma versão atualizada de uma extensão ou um app que funcione apenas com versões mais recentes do navegador. Embora o próprio Google Chrome seja atualizado automaticamente, pode levar alguns dias até que a maior parte da base de usuários seja atualizada para uma nova versão. Para garantir que uma determinada atualização seja aplicada somente a versões do Google Chrome com uma versão específica ou mais recentes, adicione o atributo "prodversionmin" ao elemento no seu manifesto de atualização. Por exemplo:

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

Isso garante que os usuários façam a atualização automática para a versão 2 somente se estiverem executando o Google Chrome 3.0.193.0 ou mais recente.