Automatyczna aktualizacja

Chcemy, aby rozszerzenia i aplikacje aktualizowały się automatycznie z takich samych powodów, jak sama przeglądarka Google Chrome: aby obejmowały poprawki błędów i zabezpieczeń, nowe funkcje lub ulepszenia w zakresie wydajności oraz ulepszenia interfejsu.

Jeśli publikujesz za pomocą Panelu dewelopera Chrome, zignoruj tę stronę. Przesłane pliki przesłane do sklepu Chrome Web Store, które przejdą do wersji przedpremierowej, są automatycznie udostępniane na stronie produktu w Chrome Web Store i wdrażane u użytkowników.

Jeśli przechowujesz plik CRX na serwerze WWW i używasz zasad przedsiębiorstwa do przekazywania go na urządzenia zarządzane, czytaj dalej. Przeczytaj też artykuł Hosting i Pakowanie.

Wcześniej, gdy obsługiwane były rozszerzenia spoza sklepu, można było mieć natywne pliki binarne i zaktualizować rozszerzenie na etapie blokady. Jednak rozszerzenia hostowane w Chrome Web Store są aktualizowane w ramach mechanizmu aktualizacji Chrome, nad którym deweloperzy nie mają kontroli. Deweloperzy rozszerzeń powinni zachować ostrożność podczas aktualizowania rozszerzeń, które zależą od natywnego pliku binarnego (np. rozszerzeń starszego typu korzystających z interfejsu NPAPI).

Opis

  • Plik manifestu może zawierać pole „update_url” wskazujące lokalizację, w której sprawdzamy dostępność aktualizacji.
  • Podczas sprawdzania dostępności aktualizacji zwracana jest zawartość dokumentu XML manifestu aktualizacji, który zawiera najnowszą wersję rozszerzenia.

Co kilka godzin przeglądarka sprawdza, czy zainstalowane rozszerzenia lub aplikacje mają adres URL aktualizacji. W przypadku każdego z nich wysyła na ten adres żądanie w poszukiwaniu pliku XML manifestu aktualizacji. Jeśli plik manifestu aktualizacji zawiera nowszą wersję niż zainstalowana, przeglądarka pobierze i zainstaluje nową wersję. Tak jak w przypadku aktualizacji ręcznych, nowy plik .crx musi być podpisany tym samym kluczem prywatnym co obecnie zainstalowana wersja.

Zaktualizuj URL

Jeśli hostujesz własne rozszerzenie lub aplikację, do pliku manifest.json musisz dodać pole „update_url”:

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

Zaktualizuj plik manifestu

Plik manifestu aktualizacji zwrócony przez serwer powinien być dokumentem XML podobnym do tego (zaznaczenia wskazują części, które należy zmodyfikować):

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

Ten format XML pochodzi z formatu używanego przez Omaha – infrastrukturę aktualizacji Google. Więcej informacji znajdziesz na stronie http://code.google.com/p/omaha/. System rozszerzeń wykorzystuje te atrybuty elementów i w manifeście aktualizacji:

appid

Identyfikator rozszerzenia lub aplikacji wygenerowany na podstawie skrótu klucza publicznego, zgodnie z opisem w sekcji Pakowanie. Identyfikator rozszerzenia lub aplikacji Chrome znajdziesz na stronie Rozszerzenia (chrome://extensions).

Hostowane aplikacje nie są jednak wymienione na stronie Rozszerzenia. Aby znaleźć identyfikator dowolnej aplikacji, wykonaj te czynności:

  • Otwórz aplikację. Aby to zrobić, kliknij jej ikonę na stronie Nowa karta.
  • Otwórz konsolę JavaScript. Aby to zrobić, kliknij ikonę klucza i wybierz Narzędzia > Konsola JavaScript.
  • W konsoli JavaScript wpisz następujące wyrażenie: chrome.app.getDetails().id. Konsola wyświetli identyfikator aplikacji w postaci ciągu znaków w cudzysłowie.
baza kodu

Adres URL pliku .crx.

Wersja

Używana przez klienta do określenia, czy należy pobrać plik .crx określony przez codebase. Powinna ona odpowiadać wartości parametru „version” w pliku manifest.json w pliku .crx.

Plik XML manifestu aktualizacji może zawierać informacje o wielu rozszerzeniach dzięki wielu elementom .

Testowanie

Domyślna częstotliwość sprawdzania dostępności aktualizacji wynosi kilka godzin, ale możesz wymusić aktualizację, klikając przycisk Zaktualizuj rozszerzenia teraz na stronie Rozszerzenia.

Zaawansowane użycie: parametry żądania

Podstawowy mechanizm automatycznych aktualizacji został zaprojektowany tak, aby praca po stronie serwera była tak prosta, jak to było w przypadku upuszczania statycznego pliku XML na zwykłym serwerze WWW, np. Apache, i aktualizowania tego pliku w miarę udostępniania nowych wersji rozszerzeń.

Bardziej zaawansowani deweloperzy mogą skorzystać z tego, że do żądania pliku manifestu aktualizacji dodaliśmy parametry umożliwiające wskazanie identyfikatora i wersji rozszerzenia. Dzięki temu mogą użyć tego samego adresu URL aktualizacji dla wszystkich rozszerzeń, wskazując URL z dynamicznym kodem po stronie serwera zamiast statycznego pliku XML.

Format parametrów żądania jest następujący:

?x=_<extension_data>_

Gdzie _<extension_data>_ to zakodowany adres URL ciąg w formacie:

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

Załóżmy na przykład, że masz 2 rozszerzenia, z których oba kierują na ten sam adres URL aktualizacji (http://test.com/extension_updates.php):

  • Rozszerzenie 1
    • Identyfikator: „aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”
    • Wersja: „1.1”
  • Rozszerzenie 2
    • Identyfikator: „bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb”
    • Wersja: „0.4”

Prośba o zaktualizowanie każdego z pojedynczych rozszerzeń mogłaby wyglądać tak:

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

W jednym żądaniu można umieścić wiele rozszerzeń dla każdego unikalnego adresu URL aktualizacji. W podanym wyżej przykładzie, jeśli użytkownik ma zainstalowane oba rozszerzenia, żądania te zostaną scalone w jedno żądanie:

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

Jeśli liczba zainstalowanych rozszerzeń korzystających z tego samego adresu URL aktualizacji jest dostatecznie duża, że URL żądania GET jest za długi (około 2000 znaków), sprawdzanie aktualizacji wysyła w razie potrzeby dodatkowe żądania GET.

Zaawansowane użycie: minimalna wersja przeglądarki

W miarę dodawania do systemu rozszerzeń kolejnych interfejsów API może się zdarzyć, że zechcesz opublikować zaktualizowaną wersję rozszerzenia lub aplikacji, które działają tylko z nowszymi wersjami przeglądarki. Sama przeglądarka Google Chrome jest automatycznie aktualizowana, ale aktualizacja wszystkich wersji przez większość użytkowników może potrwać kilka dni. Aby mieć pewność, że dana aktualizacja zostanie zastosowana tylko do Google Chrome w wersjach konkretnych lub wyższych, dodaj atrybut „prodversionmin” do elementu w pliku manifestu aktualizacji. Na przykład:

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

Dzięki temu użytkownicy korzystający z przeglądarki Google Chrome 3.0.193.0 lub nowszej będą automatycznie aktualizowali ją do wersji 2.