Automatische updates

We willen dat extensies en apps automatisch worden bijgewerkt om dezelfde redenen als Google Chrome zelf: om bug- en beveiligingsoplossingen op te nemen, nieuwe functies of prestatieverbeteringen toe te voegen en de gebruikersinterfaces te verbeteren.

Als u publiceert via het Chrome Developer Dashboard , kunt u deze pagina negeren . Inzendingen uit de Chrome Web Store die de preview doorstaan, worden automatisch beschikbaar gemaakt in de itemlijst van de Chrome Web Store en geïmplementeerd voor eindgebruikers.

Als u een CRX-bestand op een webserver host en bedrijfsbeleid gebruikt om het naar beheerde apparaten te pushen, lees dan verder. Lees ook Hosting en verpakking .

Voorheen, toen extensies buiten de winkel werden ondersteund, was het mogelijk om de native binaire bestanden en de extensie in lock-step te laten bijwerken. Extensies die in de Chrome Web Store worden gehost, worden echter bijgewerkt via het Chrome-updatemechanisme, waarover ontwikkelaars geen controle hebben. Ontwikkelaars van extensies moeten voorzichtig zijn met het updaten van extensies die afhankelijk zijn van het native binaire bestand (bijvoorbeeld oudere extensies die NPAPI gebruiken).

Overzicht

  • Een manifest kan een veld 'update_url' bevatten, dat verwijst naar een locatie waar updatecontroles kunnen worden uitgevoerd.
  • De inhoud die door een updatecontrole wordt geretourneerd, is een XML-document met een updatemanifest waarin de nieuwste versie van een extensie wordt vermeld.

Elke paar uur controleert de browser of geïnstalleerde extensies of apps een update-URL hebben. Voor elke URL wordt een verzoek ingediend bij de URL, op zoek naar een XML-updatemanifestbestand. Als het updatemanifest een versie vermeldt die recenter is dan de geïnstalleerde versie, downloadt en installeert de browser de nieuwe versie. Net als bij handmatige updates moet het nieuwe .crx bestand worden ondertekend met dezelfde privésleutel als de momenteel geïnstalleerde versie.

Update-URL

Als u uw eigen extensie of app host, moet u het veld 'update_url' als volgt toevoegen aan uw manifest.json -bestand:

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

Update manifest

Het updatemanifest dat door de server wordt geretourneerd, moet een XML-document zijn dat er als volgt uitziet (highlights geven onderdelen aan die u moet wijzigen):

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

Dit XML-formaat is ontleend aan het formaat dat wordt gebruikt door Omaha, de update-infrastructuur van Google. Zie http://code.google.com/p/omaha/ voor meer details. Het extensiesysteem gebruikt de volgende attributen voor de En elementen van het updatemanifest:

appid

De extensie of app-ID, gegenereerd op basis van een hash van de openbare sleutel, zoals beschreven in Packaging . U kunt de ID van een extensie of Chrome-app vinden door naar de pagina Extensies te gaan ( chrome://extensions ).

Gehoste apps worden echter niet vermeld op de pagina Extensies. U kunt de ID van elke app vinden door de volgende stappen te volgen:

  • Open de app. U kunt dit doen door op het pictogram op de pagina Nieuw tabblad te klikken.
  • Open de JavaScript-console. U kunt dit doen door op het moersleutelpictogram te klikken en Extra > JavaScript-console te kiezen.
  • Voer de volgende expressie in de JavaScript-console in: chrome.app.getDetails().id . De console toont de ID van de app als een tekenreeks tussen aanhalingstekens.
codebasis

Een URL naar het .crx bestand.

versie

Wordt door de client gebruikt om te bepalen of het door codebase gespecificeerde .crx bestand moet worden gedownload. Het moet overeenkomen met de waarde van 'version' in het manifest.json bestand van het .crx bestand.

Het XML-bestand van het updatemanifest kan informatie bevatten over meerdere extensies door er meerdere op te nemen elementen.

Testen

De standaardfrequentie voor updatecontrole is enkele uren, maar u kunt een update forceren via de knop Extensies nu bijwerken op de pagina Extensies.

Geavanceerd gebruik: parameters opvragen

Het basismechanisme voor automatisch bijwerken is ontworpen om het werk op de server net zo eenvoudig te maken als het plaatsen van een statisch XML-bestand op een gewone webserver zoals Apache, en het bijwerken van dat XML-bestand zodra u nieuwe versies van uw extensies vrijgeeft.

Meer geavanceerde ontwikkelaars willen wellicht profiteren van het feit dat we parameters toevoegen aan het verzoek om het updatemanifest om de extensie-ID en -versie aan te geven. Vervolgens kunnen ze voor al hun extensies dezelfde update-URL gebruiken, die verwijst naar een URL met dynamische server-side code in plaats van naar een statisch XML-bestand.

Het formaat van de aanvraagparameters is:

?x=_<extension_data>_

Waarbij _<extension_data>_ een URL-gecodeerde tekenreeks is met de indeling:

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

Stel dat u bijvoorbeeld twee extensies heeft, die beide naar dezelfde update-URL verwijzen ( http://test.com/extension_updates.php ):

  • Uitbreiding 1
    • ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • Versie: "1.1"
  • Uitbreiding 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Versie: "0.4"

Het verzoek om elke individuele extensie bij te werken zou zijn:

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

Voor elke unieke update-URL kunnen meerdere extensies in één verzoek worden vermeld. Als in het bovenstaande voorbeeld een gebruiker beide extensies heeft geïnstalleerd, worden de twee verzoeken samengevoegd tot één verzoek:

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

Als het aantal geïnstalleerde extensies dat dezelfde update-URL gebruikt zo groot is dat een GET-verzoek-URL te lang is (meer dan 2000 tekens of zo), geeft de updatecontrole zo nodig aanvullende GET-verzoeken uit.

Geavanceerd gebruik: minimale browserversie

Naarmate we meer API's aan het extensiesysteem toevoegen, is het mogelijk dat u een bijgewerkte versie van een extensie of app wilt uitbrengen die alleen met nieuwere versies van de browser werkt. Hoewel Google Chrome zelf automatisch wordt bijgewerkt, kan het een paar dagen duren voordat het merendeel van het gebruikersbestand is bijgewerkt naar een bepaalde nieuwe release. Om ervoor te zorgen dat een bepaalde update alleen van toepassing is op Google Chrome-versies van of hoger dan een specifieke versie, voegt u het kenmerk 'prodversionmin' toe aan de element in uw updatemanifest. Bijvoorbeeld:

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

Dit zou ervoor zorgen dat gebruikers alleen automatisch naar versie 2 zouden updaten als ze Google Chrome 3.0.193.0 of hoger gebruiken.