拡張機能とアプリが自動的に更新される理由は、Google Chrome 自体と同じです。バグやセキュリティの修正、新機能やパフォーマンスの向上、ユーザー インターフェースの改善を組み込むためです。
Chrome デベロッパー ダッシュボードを使用して公開する場合は、このページは無視してください。プレビューに合格した Chrome ウェブストアへの送信は、拡張機能の Chrome ウェブストア アイテムのリスティングで自動的に公開され、エンドユーザーにデプロイされます。
ウェブサーバーで CRX ファイルをホストし、エンタープライズ ポリシーを使用して管理対象デバイスにプッシュする場合は、読み進めてください。また、ホスティングとパッケージ化についても確認してください。
以前、ストア外の拡張機能がサポートされていたときは、バイナリと拡張機能を同時に更新できました。ただし、Chrome ウェブストアでホストされている拡張機能は、デベロッパーが制御できない Chrome 更新メカニズムを使用して更新されます。拡張機能のデベロッパーは、バイナリに依存する拡張機能(NPAPI を使用する以前の拡張機能など)の更新に注意する必要があります。
概要
- マニフェストには、更新チェックを行う場所を指す「update_url」フィールドを含めることができます。
- 更新チェックによって返されるコンテンツは、拡張機能の最新バージョンを一覧表示する更新マニフェスト XML ドキュメントです。
ブラウザは数時間ごとに、インストールされている拡張機能やアプリに更新 URL があるかどうかを確認します。それぞれについて、その URL にリクエストを送信して更新マニフェスト XML ファイルを探します。更新マニフェストに、インストールされているバージョンよりも新しいバージョンが記載されている場合、ブラウザは新しいバージョンをダウンロードしてインストールします。手動アップデートと同様に、新しい .crx
ファイルは、インストールされているバージョンと同じ秘密鍵で署名する必要があります。
URL を更新
独自の拡張機能またはアプリをホストしている場合は、次のように 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 またはアプリ ID。拡張機能または Chrome アプリの ID を確認するには、拡張機能ページ(chrome://extensions)に移動します。
ただし、ホスト型アプリは [Extensions] ページに表示されません。アプリの ID を確認する手順は次のとおりです。
- アプリを開きます。新しいタブページでアプリのアイコンをクリックします。
- JavaScript コンソールを開きます。レンチアイコンをクリックし、[ツール] > [JavaScript コンソール] を選択します。
- JavaScript コンソールに次の式
chrome.app.getDetails().id
を入力します。コンソールには、アプリの ID が引用符付きの文字列として表示されます。
- コードベース
.crx
ファイルの URL。- version
クライアントが
codebase
で指定された.crx
ファイルをダウンロードするかどうかを判断するために使用されます。これは、.crx
ファイルのmanifest.json
ファイルの「version」の値と一致している必要があります。
更新マニフェスト XML ファイルには、複数の <app>
要素を含めることで、複数の拡張機能に関する情報を含めることができます。
テスト
デフォルトの更新チェック頻度は数時間ですが、[広告表示オプション] ページの [広告表示オプションを今すぐ更新] ボタンを使用して強制的に更新できます。
高度な使用: リクエスト パラメータ
基本的な自動更新メカニズムは、サーバーサイドの作業を最小限に抑えるように設計されています。Apache などのウェブサーバーに静的 XML ファイルを追加し、拡張機能の新しいバージョンをリリースするときにその XML ファイルを更新するだけです。
上級の開発者は、更新マニフェストのリクエストにパラメータを追加して、拡張機能 ID とバージョンを示すことができます。その後、すべての拡張機能で同じ更新 URL を使用できます。この URL は、静的 XML ファイルではなく、動的なサーバーサイド コードを実行する URL を参照します。
リクエスト パラメータの形式は次のとおりです。
?x=_<extension_data>_
ここで、_<extension_data>_
は次の形式の URL エンコードされた文字列です。
_id=<id>_&v=_<version>_
たとえば、2 つの拡張機能があり、どちらも同じ更新 URL(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
1 つのリクエストで、一意の更新 URL ごとに複数の拡張機能を指定できます。たとえば、ユーザーが両方の拡張機能をインストールしている場合、2 つのリクエストは 1 つのリクエストに統合されます。
http://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
同じ更新 URL を使用するインストール済み拡張機能の数が多く、GET リクエスト URL が長すぎる(2,000 文字を超える)場合、更新チェックは必要に応じて追加の 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 に自動更新されるようになります。