Actualización automática

Queremos que las extensiones y apps se actualicen automáticamente por algunas de las mismas razones que Google Chrome: incorporar correcciones de errores y seguridad, agregar nuevas funciones o mejoras de rendimiento y mejorar las interfaces de usuario.

Si publicas con el Panel del desarrollador de Chrome, debes ignorar esta página. Los envíos de Chrome Web Store que aprueban la vista previa están disponibles automáticamente en la ficha del elemento de Chrome Web Store de la extensión y se implementan para los usuarios finales.

Si alojas un archivo CRX en un servidor web y usas políticas empresariales para enviarlo a dispositivos administrados, sigue leyendo. También te recomendamos leer Hosting y Empaquetado.

Anteriormente, cuando se admitían extensiones fuera de la tienda, era posible tener los objetos binarios nativos y la extensión en el paso de bloqueo. Sin embargo, las extensiones alojadas en Chrome Web Store se actualizan mediante el mecanismo de actualización de Chrome que los desarrolladores no controlan. Los desarrolladores de extensiones deben tener cuidado cuando actualicen extensiones que dependen del objeto binario nativo (por ejemplo, extensiones heredadas con NPAPI).

Descripción general

  • Un manifiesto puede contener un campo "update_url" que dirija a una ubicación para realizar comprobaciones de actualizaciones.
  • El contenido que muestra una verificación de actualización es un documento XML del manifiesto de actualización que enumera la versión más reciente de una extensión.

Cada pocas horas, el navegador verifica si las extensiones o apps instaladas tienen una URL de actualización. Para cada uno, envía una solicitud a esa URL en busca de un archivo en formato XML de manifiesto de actualización. Si el manifiesto de actualización menciona una versión más reciente que la que se instaló, el navegador descargará e instalará la versión nueva. Al igual que con las actualizaciones manuales, el nuevo archivo .crx debe firmarse con la misma clave privada que la versión instalada actualmente.

URL de actualización

Si alojas tu propia extensión o app, debes agregar el campo "update_url" al archivo manifest.json de la siguiente manera:

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

Actualizar manifiesto

El manifiesto de actualización que muestra el servidor debe ser un documento XML similar al siguiente (los puntos destacados indican las partes que debes 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>

Este formato XML se toma del que usa Omaha, la infraestructura de actualización de Google. Consulta http://code.google.com/p/omaha/ para obtener más detalles. El sistema de extensiones usa los siguientes atributos para los elementos y del manifiesto de actualización:

appid

Es la extensión o el ID de la app, generado a partir de un hash de la clave pública, como se describe en Empaquetado. Para encontrar el ID de una extensión o app de Chrome, ve a la página Extensiones (chrome://extensions).

Sin embargo, las aplicaciones alojadas no aparecen en la página Extensiones. Para encontrar el ID de cualquier app, sigue estos pasos:

  • Abre la app. Para ello, haz clic en el ícono correspondiente en la página Nueva pestaña.
  • Abre la Consola de JavaScript. Para ello, haz clic en el ícono de llave inglesa y selecciona Herramientas > Consola de JavaScript.
  • Ingresa la siguiente expresión en la Consola de JavaScript: chrome.app.getDetails().id. En la consola, se muestra el ID de la app como una string entre comillas.
base de código

Una URL al archivo .crx.

version

El cliente lo usa para determinar si debe descargar el archivo .crx que especifica codebase. Debe coincidir con el valor de “version” en el archivo manifest.json del archivo .crx.

El archivo XML del manifiesto de actualización puede contener información sobre varias extensiones, ya que incluye varios elementos .

Prueba

La frecuencia predeterminada de verificación de actualizaciones es de varias horas, pero puedes forzar una actualización con el botón Actualizar extensiones ahora de la página Extensiones.

Uso avanzado: parámetros de solicitud

El mecanismo básico de actualización automática está diseñado para que el funcionamiento del servidor sea tan fácil como colocar un archivo XML estático en cualquier servidor web simple, como Apache, o actualizar ese archivo XML cuando lances nuevas versiones de tus extensiones.

Es posible que los desarrolladores más avanzados quieran aprovechar el hecho de que agregamos parámetros a la solicitud del manifiesto de actualización para indicar el ID y la versión de la extensión. Luego, pueden usar la misma URL de actualización para todas sus extensiones y dirigir a una URL que ejecute un código dinámico del servidor en lugar de un archivo en formato XML estático.

El formato de los parámetros de solicitud es el siguiente:

?x=_<extension_data>_

Donde _<extension_data>_ es una string codificada como URL del formato:

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

Por ejemplo, supongamos que tienes dos extensiones, que dirigen a la misma URL de actualización (http://test.com/extension_updates.php):

  • Extensión 1
    • ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • Versión: “1.1”
  • Extensión 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Versión: “0.4”

La solicitud para actualizar cada extensión individual sería la siguiente:

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

Se pueden enumerar varias extensiones en una sola solicitud para cada URL de actualización única. En el ejemplo anterior, si un usuario tiene instaladas las dos extensiones, las dos solicitudes se combinan en una sola:

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

Si la cantidad de extensiones instaladas que usan la misma URL de actualización es lo suficientemente grande como para que una URL de solicitud GET sea demasiado larga (más de 2,000 caracteres), la verificación de actualización emitirá solicitudes GET adicionales según sea necesario.

Uso avanzado: versión mínima del navegador

A medida que agregamos más APIs al sistema de extensiones, es posible que quieras lanzar una versión actualizada de una extensión o app que funcione solo con versiones más recientes del navegador. Si bien Google Chrome se actualiza automáticamente, pueden pasar algunos días antes de que la mayor parte de la base de usuarios se actualice a una versión nueva. Para asegurarte de que una actualización determinada se aplique solo a las versiones de Google Chrome que sean iguales o posteriores a una versión específica, agrega el atributo "prodversionmin" al elemento en tu manifiesto de actualización. Por ejemplo:

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

Esto garantizaría que los usuarios se actualicen automáticamente a la versión 2 solo si ejecutan Google Chrome 3.0.193.0 o una versión posterior.