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
- 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 especificacodebase
. Debe coincidir con el valor de “version” en el archivomanifest.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
<?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.