Queremos que las extensiones y las apps se actualicen automáticamente por algunos de los mismos motivos que Google Chrome: incorporar correcciones de errores y seguridad, agregar funciones nuevas 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 pasan la vista previa se ponen a disposición 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 que leas Hosting y Empaquetado.
Anteriormente, cuando se admitían extensiones fuera de la tienda, era posible que los objetos binarios y la extensión se actualizaran de forma simultánea. Sin embargo, las extensiones alojadas en Chrome Web Store se actualizan con el mecanismo de actualización de Chrome, que los desarrolladores no controlan. Los desarrolladores de extensiones deben tener cuidado cuando actualizan extensiones que dependen del binario (por ejemplo, extensiones heredadas que usan NPAPI).
Descripción general
- Un manifiesto puede contener un campo "update_url" que apunta a una ubicación para realizar verificaciones de actualización.
- 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 una, realiza una solicitud a esa URL en busca de un archivo XML de manifiesto de actualización. Si el manifiesto de actualización menciona una versión más reciente que la instalada, el navegador descarga e instala la versión nueva. Al igual que con las actualizaciones manuales, el nuevo archivo .crx
debe estar firmado con la misma clave privada que la versión instalada.
Actualiza la URL
Si alojas tu propia extensión o app, debes agregar el campo "update_url" a tu archivo manifest.json
de la siguiente manera:
{
"name": "My extension",
...
"update_url": "http://myhost.com/mytestextension/updates.xml",
...
}
Actualiza el manifiesto
El manifiesto de actualización que devuelve el servidor debe ser un documento XML que se vea de la siguiente manera (las partes destacadas 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 prestado 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 <app>
y <updatecheck>
del manifiesto de actualización:
- appid
El ID de la extensión o app, que se genera en función 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. Puedes encontrar el ID de cualquier app siguiendo estos pasos:
- Abre la app. Para ello, haz clic en su ícono en la página Nueva pestaña.
- Abre la consola de JavaScript. Para ello, haz clic en el ícono de llave inglesa y elige Tools > Console de JavaScript.
- Ingresa la siguiente expresión en la consola de JavaScript:
chrome.app.getDetails().id
. La consola muestra el ID de la app como una cadena entre comillas.
- base de código
Una URL al archivo
.crx
.- versión
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 en formato XML del manifiesto de actualización puede contener información sobre varias extensiones, ya que incluye varios elementos <app>
.
Prueba
La frecuencia predeterminada de la 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 minimizar el trabajo del servidor. Solo debes agregar un archivo en formato XML estático a cualquier servidor web, como Apache, y actualizarlo a medida que lanzas versiones nuevas de tus extensiones.
Los desarrolladores más avanzados pueden 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, que dirige a una URL que ejecuta código dinámico del servidor en lugar de un archivo en formato XML estático.
El formato de los parámetros de la solicitud es el siguiente:
?x=_<extension_data>_
En el ejemplo anterior, _<extension_data>_
es una cadena codificada como URL con el siguiente formato:
_id=<id>_&v=_<version>_
Por ejemplo, supongamos que tienes dos extensiones, ambas dirigidas a la misma URL de actualización
(http://test.com/extension_updates.php
):
- Extensión 1
- ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Versión: “1.1”
- Extensión 2
- ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- 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, si un usuario tiene ambas extensiones instaladas, 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 envía 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 desees lanzar una versión actualizada de una extensión o app que solo funcione con versiones más recientes del navegador. Si bien Google Chrome se actualiza automáticamente, pueden transcurrir algunos días hasta que la mayoría de la base de usuarios actualice a una versión nueva determinada. Para asegurarte de que una actualización determinada se aplique solo a versiones de Google Chrome iguales o superiores a una versión específica, agrega el atributo "prodversionmin" al elemento <app>
de 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.