Google では、バグやセキュリティの修正、新機能やパフォーマンスの改善、ユーザー インターフェースの改善など、Google Chrome 自体と同様の理由から、拡張機能とアプリの自動更新を求めています。
Chrome デベロッパー ダッシュボードを使用して公開している場合は、このページを無視してください。Chrome ウェブストアで送信されたプレビューがプレビューに合格すると、その拡張機能の Chrome ウェブストアのアイテムリストで自動的に利用可能になり、エンドユーザーにデプロイされます。
ウェブサーバーで CRX ファイルをホストし、エンタープライズ ポリシーを使用して管理対象デバイスにプッシュする場合は、引き続きお読みください。ホスティングとパッケージングもあわせてお読みください。
これまでストア外の拡張機能がサポートされていた場合、ネイティブ バイナリと拡張機能をロックステップで更新できました。ただし、Chrome ウェブストアでホストされている拡張機能は、デベロッパーが管理していない Chrome 更新メカニズムで更新されます。拡張機能のデベロッパーは、ネイティブ バイナリに依存する拡張機能(NPAPI を使用する以前の拡張機能など)の更新に注意する必要があります。
概要
- マニフェストには、アップデート チェックを行う場所を示す「update_url」フィールドを含めることができます。
- アップデート チェックによって返されるコンテンツは、拡張機能の最新バージョンがリストされたアップデート マニフェストの XML ドキュメントです。
ブラウザは、インストール済みの拡張機能やアプリに更新 URL があるかどうかを数時間ごとにチェックします。それぞれについて、アップデート マニフェストの XML ファイルを探すようその URL にリクエストを行います。アップデート マニフェストに、インストールされているバージョンより新しいバージョンが記述されている場合、ブラウザは新しいバージョンをダウンロードしてインストールします。手動更新の場合と同様に、新しい .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/ をご覧ください。拡張機能システムは、アップデート マニフェストの
- appid
公開鍵のハッシュに基づいて生成される拡張機能またはアプリ ID(パッケージ化を参照)。拡張機能または Chrome アプリの ID は、拡張機能ページ(chrome://extensions)で確認できます。
ただし、ホストされているアプリは [拡張機能] ページに表示されません。アプリの ID を確認する手順は次のとおりです。
- アプリを開きます。新しいタブページでアプリのアイコンをクリックします。
- JavaScript コンソールを開きます。これを行うには、レンチアイコンをクリックして、[Tools] > [JavaScript Console] を選択します。
- JavaScript コンソールに式
chrome.app.getDetails().id
を入力します。コンソールには、アプリ ID が引用符で囲まれた文字列として表示されます。
- コードベース
.crx
ファイルへの URL。- バージョン
codebase
で指定された.crx
ファイルをダウンロードする必要があるかどうかを判断するためにクライアントが使用します。.crx
ファイルのmanifest.json
ファイルにある「version」の値と一致する必要があります。
アップデート マニフェストの XML ファイルには、複数の
テスト
デフォルトの更新チェックの頻度は数時間ですが、[拡張機能] ページの [拡張機能を今すぐ更新] ボタンを使用して強制的に更新できます。
高度な使用方法: リクエスト パラメータ
基本的な自動更新のメカニズムは、Apache などのプレーンなウェブサーバーに静的 XML ファイルをドロップし、拡張機能の新しいバージョンをリリースするときにその XML ファイルを更新するだけで、サーバー側を簡単に動作するように設計されています。
より上級レベルのデベロッパーは、アップデート マニフェストのリクエストにパラメータを追加して、拡張機能の ID とバージョンを指定することをおすすめします。これにより、すべての拡張機能に同じ更新 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: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- バージョン: 「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
一意の更新 URL ごとに 1 回のリクエストで複数の拡張機能をリストできます。上記の例では、ユーザーが両方の拡張機能をインストールしている場合、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 バージョンにのみ適用されるようにするには、アップデート マニフェストの
<?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 に自動更新されます。