Automatische Aktualisierung

Wir möchten, dass Erweiterungen und Apps aus den gleichen Gründen wie Google Chrome automatisch aktualisiert werden: um Fehler- und Sicherheitskorrekturen zu integrieren, neue Funktionen oder Leistungsverbesserungen hinzuzufügen und die Benutzeroberflächen zu verbessern.

Wenn Sie Inhalte über das Entwickler-Dashboard von Google Chrome veröffentlichen, sollten Sie diese Seite ignorieren. Chrome Web Store-Einreichungen, die die Vorschau bestehen, werden automatisch im Chrome Web Store-Artikeleintrag der Erweiterung zur Verfügung gestellt und den Endnutzern bereitgestellt.

Wenn Sie eine CRX-Datei auf einem Webserver hosten und Unternehmensrichtlinien verwenden, um sie auf verwaltete Geräte zu übertragen, lesen Sie weiter. Weitere Informationen finden Sie auch unter Hosting und Verpackung.

Wenn bisher Erweiterungen außerhalb des Stores unterstützt wurden, konnten die nativen Binärprogramme und die Erweiterung im Sperrschritt aktualisiert werden. Im Chrome Web Store gehostete Erweiterungen werden jedoch über den Chrome-Update-Mechanismus aktualisiert, den Entwickler nicht kontrollieren können. Entwickler von Erweiterungen sollten bei der Aktualisierung von Erweiterungen vorsichtig sein, die eine Abhängigkeit von der nativen Binärdatei haben (z. B. alte Erweiterungen, die NPAPI verwenden).

Überblick

  • Ein Manifest kann das Feld "update_url" enthalten, das auf einen Speicherort für Updateprüfungen verweist.
  • Der von einer Updateprüfung zurückgegebene Inhalt ist ein XML-Dokument mit dem Update-Manifest, das die neueste Version einer Erweiterung auflistet.

Alle paar Stunden prüft der Browser, ob installierte Erweiterungen oder Apps eine Update-URL haben. Für jede Anfrage wird eine Anfrage an diese URL gestellt und nach einer Manifest-XML-Datei für die Aktualisierung gesucht. Wenn im Updatemanifest eine neuere Version als installiert angegeben ist, lädt der Browser die neue Version herunter und installiert sie. Wie bei manuellen Updates muss die neue .crx-Datei mit demselben privaten Schlüssel wie die aktuell installierte Version signiert werden.

URL aktualisieren

Wenn Sie eine eigene Erweiterung oder App hosten, müssen Sie das Feld „update_url“ so in die Datei manifest.json einfügen:

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

Manifest aktualisieren

Das vom Server zurückgegebene Aktualisierungsmanifest sollte ein XML-Dokument sein, das in etwa so aussieht. Die Hervorhebungen weisen auf Teile hin, die geändert werden sollten:

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

Dieses XML-Format wurde von Omaha übernommen, der Update-Infrastruktur von Google. Weitere Informationen finden Sie unter http://code.google.com/p/omaha/. Das Erweiterungssystem verwendet die folgenden Attribute für die Elemente und des Updatemanifests:

appid

Die Erweiterung oder App-ID, die anhand eines Hashwerts des öffentlichen Schlüssels generiert wird, wie unter Paketerstellung beschrieben. Die ID einer Erweiterung oder Chrome-App finden Sie auf der Seite „Erweiterungen“ (chrome://extensions).

Gehostete Anwendungen werden jedoch nicht auf der Seite "Erweiterungen" aufgeführt. So finden Sie die ID einer Anwendung:

  • Öffnen Sie die App. Klicken Sie dazu auf das entsprechende Symbol auf der Seite „Neuer Tab“.
  • Öffnen Sie die JavaScript-Konsole. Klicken Sie dazu auf das Schraubenschlüssel-Symbol und wählen Sie Tools > JavaScript-Konsole aus.
  • Geben Sie den folgenden Ausdruck in die JavaScript-Konsole ein: chrome.app.getDetails().id. In der Console wird die Anwendungs-ID als String in Anführungszeichen angezeigt.
Codebasis

Eine URL zur Datei .crx.

Version

Wird vom Client verwendet, um zu bestimmen, ob die durch codebase angegebene Datei .crx heruntergeladen werden soll. Er sollte dem Wert unter „Version“ in der Datei manifest.json der Datei .crx entsprechen.

Die XML-Datei des Aktualisierungsmanifests kann durch die Verwendung mehrerer -Elemente Informationen zu mehreren Erweiterungen enthalten.

Testen

Standardmäßig wird nach Updates geprüft: Sie können ein Update auf der Seite „Erweiterungen“ über die Schaltfläche Erweiterungen jetzt aktualisieren erzwingen.

Fortgeschrittene Verwendung: Anfrageparameter

Der grundlegende Mechanismus zur automatischen Aktualisierung wurde so konzipiert, dass die serverseitige Arbeit genauso einfach ist wie das Ablegen einer statischen XML-Datei auf einem einfachen Webserver wie Apache und das Aktualisieren dieser XML-Datei, sobald Sie neue Versionen Ihrer Erweiterungen veröffentlichen.

Fortgeschrittene Entwickler können die Tatsache nutzen, dass wir Parameter zur Anfrage für das Update-Manifest hinzufügen, um die Erweiterungs-ID und -Version anzugeben. Dann können sie dieselbe Update-URL für alle ihre Erweiterungen verwenden und auf eine URL verweisen, auf der dynamischer serverseitiger Code anstatt auf eine statische XML-Datei ausgeführt wird.

Das Format der Anfrageparameter lautet:

?x=_<extension_data>_

Dabei ist _<extension_data>_ ein URL-codierter String im folgenden Format:

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

Angenommen, Sie haben zwei Erweiterungen, die beide auf dieselbe Update-URL verweisen (http://test.com/extension_updates.php):

  • Erweiterung 1
    • ID: „aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa“
    • Version: „1.1“
  • Erweiterung 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Version: „0.4“

Die Anfrage zum Aktualisieren der einzelnen Erweiterungen lautet wie folgt:

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

In einer Anfrage können für jede eindeutige Update-URL mehrere Erweiterungen aufgelistet werden. Wenn im obigen Beispiel ein Nutzer beide Erweiterungen installiert hat, werden die beiden Anfragen zu einer einzigen Anfrage zusammengeführt:

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

Wenn die Anzahl der installierten Erweiterungen mit derselben Update-URL groß genug ist, sodass eine GET-Anfrage-URL zu lang ist (mehr als 2.000 Zeichen), gibt die Updateprüfung bei Bedarf zusätzliche GET-Anfragen aus.

Erweiterte Nutzung: Mindestversion des Browsers

Wenn wir dem Erweiterungssystem weitere APIs hinzufügen, möchten Sie möglicherweise eine aktualisierte Version einer Erweiterung oder App veröffentlichen, die nur mit neueren Versionen des Browsers funktioniert. Google Chrome selbst wird zwar automatisch aktualisiert, es kann jedoch einige Tage dauern, bis die meisten Nutzer auf eine neue Version aktualisiert sind. Damit ein bestimmtes Update nur für Google Chrome-Versionen gilt, die mindestens einer bestimmten Version entsprechen, fügen Sie dem Element in Ihrem Update-Manifest das Attribut "prodversionmin" hinzu. Beispiel:

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

Dadurch wird sichergestellt, dass Nutzer nur dann automatisch auf Version 2 aktualisiert werden, wenn sie Google Chrome 3.0.193.0 oder höher ausführen.