自動更新

我們希望擴充功能和應用程式能自動更新,原因與 Google Chrome 本身相同:納入錯誤和安全性修正、新增功能或提升效能,以及改善使用者介面。

如果您使用 Chrome 開發人員資訊主頁發布應用程式,請略過這個頁面。通過預覽的 Chrome 線上應用程式商店提交內容,會自動顯示在擴充功能的 Chrome 線上應用程式商店項目清單中,並部署給最終使用者。

如果您在網路伺服器上代管 CRX 檔案,並使用企業政策將檔案推送至受管理的裝置,請繼續閱讀。您也應參閱「代管」和「封裝」相關文章。

先前在支援商店外擴充功能時,可以讓二進位檔和擴充功能在鎖定步驟中更新。不過,Chrome 線上應用程式商店代管的擴充功能會使用 Chrome 更新機制進行更新,而這項機制並非由開發人員控管。擴充功能開發人員應謹慎更新對二進位檔有依附元件的擴充功能 (例如使用 NPAPI 的舊版擴充功能)。

總覽

  • 資訊清單可能包含「update_url」欄位,指向用於執行更新檢查的位置。
  • 更新檢查作業傳回的內容是更新資訊清單 XML 文件,其中列出擴充功能的最新版本。

瀏覽器會每隔幾小時檢查一次,看看是否有任何已安裝的擴充功能或應用程式有更新網址。針對每個網址,它會向該網址提出要求,尋找更新資訊清單 XML 檔案。如果更新資訊清單提及的版本比已安裝的版本新,瀏覽器就會下載並安裝新版本。如同手動更新,新版 .crx 檔案必須使用與已安裝版本相同的私密金鑰進行簽署。

更新網址

如果您要自行代管擴充功能或應用程式,請在 manifest.json 檔案中新增「update_url」欄位,如下所示:

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

更新資訊清單

伺服器傳回的更新資訊清單應為 XML 文件,如下所示 (醒目顯示部分代表您應修改的部分):

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

這個 XML 格式是借用 Google 更新基礎架構 Omaha 所使用的格式。詳情請參閱 http://code.google.com/p/omaha/。擴充功能系統會針對更新資訊清單的 <app><updatecheck> 元素使用下列屬性:

appid

擴充功能或應用程式 ID,根據公開金鑰的雜湊產生,如封裝一文所述。如要查看擴充功能或 Chrome 應用程式的 ID,請前往「擴充功能」頁面 (chrome://extensions)。

不過,代管應用程式不會列在「擴充功能」頁面中。您可以按照下列步驟查看任何應用程式的 ID:

  • 開啟應用程式。只要點選新分頁頁面上的圖示即可。
  • 開啟 JavaScript 控制台。方法是按一下扳手圖示,然後依序選擇「工具」>「JavaScript 控制台」
  • 在 JavaScript 控制台中輸入以下運算式:chrome.app.getDetails().id。主控台會以引號字串的形式顯示應用程式 ID。
程式碼集

.crx 檔案的網址。

版本

用於用戶端判斷是否應下載 codebase 指定的 .crx 檔案。這個值應與 .crx 檔案 manifest.json 檔案中的「version」值相符。

更新資訊清單 XML 檔案可能會包含多個擴充功能的資訊,因為它會納入多個 <app> 元素。

測試

更新檢查的預設頻率為數小時,但您可以使用「Extensions」頁面的「Update extensions now」按鈕強制更新。

進階用法:要求參數

基本自動更新機制旨在盡量減少伺服器端的工作。只要將靜態 XML 檔案新增至 Apache 等任何網路伺服器,並在發布擴充功能的新版本時更新該 XML 檔案即可。

較進階的開發人員可以利用我們在更新資訊清單的請求中加入參數,用來指出擴充功能 ID 和版本。接著,他們可以為所有擴充功能使用相同的更新網址,指向執行動態伺服器端程式碼的網址,而非靜態 XML 檔案。

要求參數的格式如下:

?x=_<extension_data>_

其中 _<extension_data>_ 是網址編碼字串,格式如下:

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

舉例來說,假設您有兩個額外資訊,兩者都指向相同的更新網址 (http://test.com/extension_updates.php):

  • 擴充功能 1
    • ID:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • 版本:「1.1」
  • 擴充功能 2
    • ID:"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • 版本:「0.4」

更新各個擴充功能的要求如下:

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

每個獨特的更新網址可在單一要求中列出多個擴充功能。舉例來說,如果使用者安裝了兩個擴充功能,這兩個要求就會合併為單一要求:

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

如果使用相同更新網址的已安裝擴充功能數量過多,導致 GET 要求網址過長 (超過 2000 個字元左右),更新檢查作業會視需要發出額外的 GET 要求。

進階用法:最低瀏覽器版本

隨著我們在擴充功能系統中新增更多 API,您可能會想要發布更新版的擴充功能或應用程式,以便與較新版本的瀏覽器搭配使用。雖然 Google Chrome 會自動更新,但大多數使用者可能需要幾天的時間,才能更新至任何新版本。為確保特定更新只套用至 Google Chrome 特定版本或更高版本,請在更新資訊清單的 <app> 元素中加入「prodversionmin」屬性。例如:

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

這可確保使用者只有在執行 Google Chrome 3.0.193.0 以上版本時,才會自動更新至 2 版。