Automatyczna aktualizacja

Chcemy, aby rozszerzenia i aplikacje były aktualizowane automatycznie z tych samych powodów co sam Google Chrome: aby wprowadzać poprawki błędów i poprawki zabezpieczeń, dodawać nowe funkcje lub ulepszenia wydajności oraz ulepszać interfejsy użytkownika.

Jeśli publikujesz za pomocą panelu dewelopera w Chrome, pomiń tę stronę. Przesłane do Chrome Web Store elementy, które przeszły weryfikację, są automatycznie udostępniane w karcie rozszerzenia w Chrome Web Store i wdrażane u użytkowników.

Jeśli plik CRX jest hostowany na serwerze internetowym i przesyłasz go na zarządzane urządzenia za pomocą zasad firmy, czytaj dalej. Zapoznaj się też z informacjami na temat hostingupakowania.

Wcześniej, gdy obsługiwane były rozszerzenia spoza sklepu, binarny kod i rozszerzenie mogły być aktualizowane w tym samym czasie. Rozszerzenia hostowane w sklepie Chrome Web Store są jednak aktualizowane za pomocą mechanizmu aktualizacji Chrome, nad którym deweloperzy nie mają kontroli. Deweloperzy rozszerzeń powinni z uwagą aktualizować rozszerzenia, które są zależne od plików binarnych (np. starsze rozszerzenia korzystające z NPAPI).

Omówienie

  • Manifest może zawierać pole „update_url”, które wskazuje lokalizację do sprawdzania aktualizacji.
  • Treść zwrócona przez sprawdzanie aktualizacji to dokument 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 żądanie do tego adresu URL, aby znaleźć plik XML manifestu aktualizacji. Jeśli w pliku manifestu aktualizacji jest wymieniona nowsza wersja niż ta zainstalowana, przeglądarka pobiera i instaluje nową wersję. Podobnie jak w przypadku ręcznych aktualizacji nowy plik .crx musi być podpisany tym samym kluczem prywatnym co zainstalowana wersja.

Adres URL aktualizacji

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

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

Aktualizacja pliku manifestu

Manifest aktualizacji zwracany przez serwer powinien być dokumentem XML o takim wyglądzie (zaznaczone na żółto elementy 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 został zapożyczony z Omaha, czyli infrastruktury aktualizacji Google. Więcej informacji znajdziesz na stronie http://code.google.com/p/omaha/. System rozszerzeń używa tych atrybutów w przypadku elementów <app><updatecheck> w pliku manifestu aktualizacji:

appid

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

Aplikacje hostowane nie są jednak widoczne na stronie Rozszerzenia. Aby znaleźć identyfikator dowolnej aplikacji, wykonaj te czynności:

  • Otwórz aplikację. Możesz to zrobić, klikając jej ikonę na stronie Nowa karta.
  • Otwórz konsolę JavaScript. Aby to zrobić, kliknij ikonę młotka i klucza, a następnie wybierz Narzędzia > Konsola JavaScriptu.
  • Wpisz w konsoli JavaScriptu wyrażenie chrome.app.getDetails().id. Konsola wyświetla identyfikator aplikacji jako cudzysłów.
baza kodu

Adres URL pliku .crx.

wersja

Służy do określenia, czy klient ma pobrać plik .crx określony przez codebase. Powinna być zgodna z wartością „version” w pliku .crx w pliku manifest.json.

Plik XML pliku MANIFEST_UPDATE może zawierać informacje o kilku rozszerzeniach, ponieważ zawiera wiele elementów <app>.

Testowanie

Domyślna częstotliwość sprawdzania aktualizacji wynosi kilka godzin, ale możesz wymusić aktualizację, używając przycisku Zaktualizuj rozszerzenia teraz na stronie Rozszerzenia.

Zaawansowane korzystanie z usługi: parametry żądania

Podstawowy mechanizm automatycznej aktualizacji został zaprojektowany tak, aby zminimalizować obciążenie po stronie serwera. Wystarczy, że dodasz statyczny plik XML do dowolnego serwera WWW, np. Apache, i zaktualizujesz ten plik XML wraz z wydaniem nowych wersji rozszerzeń.

Bardziej zaawansowani deweloperzy mogą skorzystać z tego, że dodaliśmy do żądania pliku manifestu aktualizacji parametry, które wskazują identyfikator i wersję rozszerzenia. Następnie mogą używać tego samego adresu URL aktualizacji dla wszystkich swoich rozszerzeń, wskazując adres URL z dynamicznym kodem po stronie serwera zamiast statycznego pliku XML.

Format parametrów żądania:

?x=_<extension_data>_

Gdzie _<extension_data>_ to ciąg znaków zakodowany na potrzeby adresu URL w formacie:

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

Załóżmy, że masz 2 rozszerzenia, które wskazują ten sam adres URL aktualizacji (http://test.com/extension_updates.php):

  • Rozszerzenie 1
    • Identyfikator: „aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”
    • Wersja: „1.1”.
  • Rozszerzenie 2
    • Identyfikator: „bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb”
    • Wersja: „0.4”

Prośba o zaktualizowanie każdego rozszerzenia:

  • 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 podać wiele rozszerzeń dla każdego unikalnego adresu URL aktualizacji. Jeśli na przykład użytkownik ma zainstalowane oba rozszerzenia, 2 żądania są łączone w jedno:

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 wystarczająco duża, aby adres URL żądania GET był zbyt długi (ponad 2000 znaków), sprawdzanie aktualizacji w razie potrzeby wysyła dodatkowe żądania GET.

Zaawansowane użycie: minimalna wersja przeglądarki

W miarę dodawania do systemu rozszerzeń kolejnych interfejsów API możesz chcieć opublikować zaktualizowaną wersję rozszerzenia lub aplikacji, która będzie działać tylko z nowszymi wersjami przeglądarki. Chociaż sama przeglądarka Google Chrome jest aktualizowana automatycznie, może minąć kilka dni, zanim większość użytkowników zaktualizuje ją do danej nowej wersji. Aby mieć pewność, że dana aktualizacja będzie dotyczyć tylko wersji Google Chrome, które są równe lub nowsze od określonej wersji, dodaj atrybut „prodversionmin” do elementu <app> 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 będą mogli automatycznie aktualizować się do wersji 2 tylko wtedy, gdy korzystają z Google Chrome w wersji 3.0.193.0 lub nowszej.