Atualização automática

Queremos que as extensões e os apps sejam atualizados automaticamente pelos mesmos motivos que o Google Chrome: incorporar correções de bugs e de 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 Chrome, ignore esta página. Os envios da Chrome Web Store que passam na visualização são disponibilizados automaticamente na listagem de itens da Chrome Web Store da extensão 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 enviar o arquivo a dispositivos gerenciados, continue lendo. Leia também Hospedagem e Embalagem.

Anteriormente, quando as extensões fora da loja eram compatíveis, era possível atualizar os binários e a extensão em um único passo. No entanto, as extensões hospedadas na Chrome Web Store são atualizadas usando o mecanismo de atualização do Chrome, que os desenvolvedores não controlam. Os desenvolvedores de extensões precisam ter cuidado ao atualizar extensões que têm dependência do binário (por exemplo, extensões legadas que usam o NPAPI).

Visão geral

  • Um manifesto pode conter um campo "update_url", que aponta para um local para fazer 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.

A cada poucas horas, o navegador verifica se as extensões ou os apps instalados têm um URL de atualização. Para cada um, ele faz uma solicitação para esse 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 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.

Atualizar URL

Se você estiver hospedando sua própria extensão ou app, adicione o campo "update_url" ao arquivo manifest.json, como este:

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

Atualizar o manifesto

O manifesto de atualização retornado pelo servidor precisa ser um documento XML parecido com 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 por Omaha, a infraestrutura de atualização do Google. Acesse http://code.google.com/p/omaha/ para mais detalhes. O sistema de extensões usa os seguintes atributos para os elementos <app> e <updatecheck> do manifesto de atualização:

appid

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

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

  • Abra o app clicando no ícone dele na página "Nova guia".
  • Abra o console JavaScript. Para fazer isso, clique no ícone de chave inglesa e escolha Tools > JavaScript Console.
  • Digite a seguinte expressão no console JavaScript: chrome.app.getDetails().id. O console mostra o ID do app 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 ao incluir vários elementos <app>.

Teste

A frequência padrão da verificação de atualização é de várias horas, mas você pode 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 minimizar o trabalho do servidor. Basta adicionar um arquivo XML estático a qualquer servidor da Web, como o Apache, e atualizar esse arquivo XML conforme você lança novas versões das extensões.

Os desenvolvedores mais avançados podem 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 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 em URL com o formato:

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

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

  • Extensão 1
    • ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • Versão: "1.1"
  • Extensão 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Versão: "0.4"

A solicitação para atualizar cada extensão 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. Por exemplo, se um usuário tiver as duas extensões instaladas, as duas solicitações serão mescladas em uma só:

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 usando 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á solicitações GET adicionais, 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 app que funcione apenas com versões mais recentes do navegador. Embora o Google Chrome seja atualizado automaticamente, pode levar alguns dias até que a maioria da base de usuários seja atualizada para uma nova versão. Para garantir que uma determinada atualização seja aplicada apenas a versões do Google Chrome igual ou mais recente que uma versão específica, adicione o atributo "prodversionmin" ao elemento <app> no manifesto de atualização. 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 garantiria que os usuários atualizassem automaticamente para a versão 2 somente se estivessem usando o Google Chrome 3.0.193.0 ou mais recente.