AIR アプリケーションのアップデート


目次 [非表示]



ユーザは、コンピュータ上の AIR ファイルをダブルクリックするかブラウザから(シームレスインストール機能を使用して)AIR アプリケーションをインストールまたはアップデートできます。Adobe® AIR® インストーラアプリケーションによってインストールが管理され、既に存在するアプリケーションをアップデートする場合はユーザに警告が表示されます(AIR アプリケーションの配布、インストール、実行を参照してください)。

一方、Updater クラスを使用して、インストールされているアプリケーションの新しいバージョンへのアップデートをアプリケーション自体で行うこともできます(インストールされているアプリケーションで、新しいバージョンをダウンロードしてインストールできるようになったことを検出できます)。Updater クラスに含まれる update() メソッドを使用することにより、ユーザのコンピュータ上の AIR ファイルを参照してそのバージョンにアップデートすることができます。

アップデート AIR ファイルのアプリケーション ID と 発行者 ID の両方が、アップデートするアプリケーションと一致する必要があります。発行者 ID は署名者の証明書から取得します。つまり、アップデートおよびアップデートされるアプリケーションの両方を同じ証明書を使用して署名する必要があります。

AIR 1.1 以降では、アプリケーションを移行して新しいコード署名証明書を使用できます。アプリケーションを移行して新しい署名を使用するには、新しい証明書と元の証明書の両方を使用してアップデート AIR ファイルに署名する必要があります。証明書の移行は一方的なプロセスです。移行後は、新しい証明書(または両方の証明書)で署名した AIR ファイルのみが既存のインストールへのアップデートとして認識されます。

アプリケーションのアップデートの管理は複雑になることがあります。AIR 1.5 には、新しいアップデートフレームワーク(AdobeAIR アプリケーション向け)が含まれています。このフレームワークでは、開発者が AIR アプリケーションに優れたアップデート機能を実装するのを支援する API が提供されています。

証明書の移行により、自己署名証明書から商用コード署名証明書に切り替えたり、自己署名証明書間または商用コード署名証明書間で切り替えたりすることができます。証明書を移行しないと、既存のユーザは現在のバージョンのアプリケーションを削除してから新しいバージョンをインストールする必要があります。詳しくは、証明書の変更を参照してください。

アプリケーションのアップデートについて

Updater クラス(flash.desktop パッケージのクラス)には、update() という 1 つのメソッドが含まれています。このメソッドを使用すると、現在実行されているアプリケーションを別のバージョンにアップデートすることができます。例えば、AIR ファイルのバージョン(「Sample_App_v2.air」)がユーザのデスクトップに保存されている場合にアプリケーションをアップデートするコードの例を次に示します。

var updater = new air.Updater(); 
var airFile = air.File.desktopDirectory.resolvePath("Sample_App_v2.air"); 
var version = "2.01"; 
updater.update(airFile, version);

アプリケーションで Updater クラスを使用する前に、ユーザまたはアプリケーションによって、アップデートバージョンの AIR ファイルがコンピュータにダウンロードされている必要があります。詳しくは、ユーザのコンピュータへの AIR ファイルのダウンロードを参照してください。

Updater.update() メソッド呼び出しの結果

ランタイムのアプリケーションで update() メソッドを呼び出すと、ランタイムによってアプリケーションが終了され、AIR ファイルからの新しいバージョンのインストールが試行されます。ランタイムによって、AIR ファイルで指定されたアプリケーション ID および発行者 ID が、update() メソッドの呼び出し元アプリケーションのアプリケーション ID および発行者 ID と一致するかどうかが確認されます(アプリケーション ID および発行者 ID について詳しくは、AIR アプリケーションプロパティの設定を参照してください)。さらに、バージョンストリングが、version ストリング(update() メソッドに渡されたストリング)と一致するかどうかが確認されます。インストールが正常に完了した場合、ランタイムによって新しいバージョンのアプリケーションが起動します。それ以外の場合(インストールを完了できなかった場合)は、既存(インストール前)のバージョンのアプリケーションが再度起動します。

Macintosh でアプリケーションのアップデートバージョンをインストールするには、アプリケーションディレクトリにインストールするための適切なシステム権限が必要です。Windows および Linux では、管理権限が必要です。

アップデートバージョンのアプリケーションで、アップデートバージョンのランタイムが必要な場合は、新しいランタイムバージョンがインストールされます。ランタイムをアップデートするためには、ユーザは対象のコンピュータの管理権限を持っている必要があります。

ADL を使用してアプリケーションをテストしているときに update() メソッドを呼び出すと、ランタイム例外が発生します。

バージョンストリングについて

version パラメータ(update() メソッドのパラメータ)として指定するストリングは、インストールする AIR ファイルのアプリケーション記述ファイルで version 属性(メイン application エレメントの属性)に指定されたストリングと一致する必要があります。セキュリティ上の理由から、必ず version パラメータを指定する必要があります。AIR ファイルのアプリケーションのバージョン番号の確認を必須とすることで、現在インストールされているアプリケーションでは修正済みのセキュリティ上の脆弱性が含まれている可能性がある古いバージョンのアプリケーションが、誤ってインストールされることがなくなります。また、ダウングレード攻撃を回避するために、AIR ファイルのバージョンストリングとインストールされたアプリケーションのバージョンストリングが一致するかどうかをアプリケーションで確認する必要があります。

バージョンストリングは、任意の形式で指定することができます。例えば、「2.01」や「version 2」のように指定できます。このストリングの形式は、アプリケーション開発者が決定します。ランタイムではバージョンストリングの検証は行われないため、アプリケーションのアップデート前にアプリケーションコードで検証する必要があります。

Adobe AIR アプリケーションで Web 経由で AIR ファイルをダウンロードする場合の優れた方法として、ダウンロードしている Adobe AIR アプリケーションのバージョンを Web サービスで通知できるメカニズムがあります。その後、このストリングを、アプリケーションで version パラメータ(update() メソッドのパラメータ)として使用できます。AIR ファイルをこれ以外の方法で取得した場合は AIR ファイルのバージョンが不明な場合がありますが、AIR アプリケーションで AIR ファイルを確認してバージョン情報を特定することができます(AIR ファイルは ZIP 圧縮されたアーカイブで、アプリケーション記述ファイルはそのアーカイブの 2 つ目のレコードです)。

アプリケーション記述ファイルについて詳しくは、AIR アプリケーションプロパティの設定を参照してください。

カスタムのアプリケーションアップデートユーザインターフェイスの表示

AIR には、デフォルトのアップデートインターフェイスがあります。

ユーザがアプリケーションのバージョンを最初にマシンにインストールしたときは、常にこのインターフェイスが使用されます。ただし、独自のインターフェイスを定義して以降のインスタンスに使用することができます。アプリケーションでカスタムのアップデートインターフェイスが定義される場合は、現在インストールされているアプリケーションのアプリケーション記述ファイルで customUpdateUI エレメントを指定します。

<customUpdateUI>true</customUpdateUI>

アプリケーションがインストールされ、インストールされたアプリケーションとアプリケーション ID および発行者 ID が一致する AIR ファイルがユーザによって開かれると、デフォルトの AIR アプリケーションインストーラではなくランタイムによってアプリケーションが起動します。詳しくは、アプリケーションアップデート用のカスタムユーザインターフェイスの提供を参照してください。

アプリケーションが実行されたとき(NativeApplication.nativeApplication オブジェクトから load イベントが送出されたとき)に、アプリケーションを(Updater クラスを使用して)アップデートするかどうかをアプリケーションで指定できます。アップデートするように指定する場合、アプリケーション独自の(標準で実行されるインターフェイスとは異なる)インストールインターフェイスをユーザに表示することができます。

ユーザのコンピュータへの AIR ファイルのダウンロード

Updater クラスを使用するには、ユーザまたはアプリケーションによって、ユーザのローカルコンピュータに AIR ファイルがあらかじめ保存されている必要があります。

注意: AIR 1.5 にはアップデートフレームワークが含まれており、開発者が AIR アプリケーションに優れたアップデート機能を実装するのを支援します。このフレームワークを使用するのは、 クラスの update() メソッドを直接使用するよりも格段に簡単です。詳しくは、アップデートフレームワークの使用を参照してください。

次のコードでは、URL(http://example.com/air/updates/Sample_App_v2.air)から AIR ファイルを読み取り、その AIR ファイルをアプリケーション記憶領域ディレクトリに保存します。

var urlString = "http://example.com/air/updates/Sample_App_v2.air"; 
var urlReq = new air.URLRequest(urlString); 
var urlStream = new air.URLStream(); 
var fileData = new air.ByteArray(); 
urlStream.addEventListener(air.Event.COMPLETE, loaded); 
urlStream.load(urlReq); 
 
function loaded(event) { 
    urlStream.readBytes(fileData, 0, urlStream.bytesAvailable); 
    writeAirFile(); 
} 
 
function writeAirFile() { 
    var file = air.File.desktopDirectory.resolvePath("My App v2.air"); 
    var fileStream = new air.FileStream(); 
    fileStream.open(file, air.FileMode.WRITE); 
    fileStream.writeBytes(fileData, 0, fileData.length); 
    fileStream.close(); 
    trace("The AIR file is written."); 
}

詳しくは、ファイルの読み取りと書き込みのワークフローを参照してください。

アプリケーションが初めて実行されたかどうかの確認

アプリケーションのアップデートの完了後に、ユーザに「はじめに」または「ようこそ」などのメッセージを表示することができます。起動時に、メッセージを表示するかどうかを判断できるように、初めて実行されたかどうかがアプリケーションで確認されます。

注意: AIR 1.5 にはアップデートフレームワークが含まれており、開発者が AIR アプリケーションに優れたアップデート機能を実装するのを支援します。このフレームワークにより、アプリケーションのバージョンが初めて実行されたかどうかを簡単に確認できます。詳しくは、アップデートフレームワークの使用を参照してください。

そのための 1 つの方法として、アプリケーションの初期化時にファイルがアプリケーション記憶領域ディレクトリに保存されます。アプリケーションが起動されるたびに、そのファイルが存在するかどうかをアプリケーションで確認します。ファイルが存在しない場合、アプリケーションは現在のユーザに初めて実行されたことになります。ファイルが存在する場合は、既に少なくとも 1 回はアプリケーションが実行されています。ファイルが存在し、ファイルに現在のバージョン番号よりも古いバージョン番号が含まれていれば、ユーザが新しいバージョンを初めて実行していると判断できます。

次の例は、このコンセプトを示しています。

<html> 
    <head> 
        <script src="AIRAliases.js" /> 
        <script> 
            var file; 
            var currentVersion = "1.2"; 
            function system extension() { 
                file = air.File.appStorageDirectory.resolvePath("Preferences/version.txt"); 
                air.trace(file.nativePath); 
                if(file.exists) { 
                    checkVersion(); 
                } else { 
                    firstRun(); 
                } 
            } 
            function checkVersion() { 
                var stream = new air.FileStream(); 
                stream.open(file, air.FileMode.READ); 
                var reversion = stream.readUTFBytes(stream.bytesAvailable); 
                stream.close(); 
                if (reversion != currentVersion) { 
                    window.document.getElementById("log").innerHTML  
                            = "You have updated to version " + currentVersion + ".\n"; 
                } else { 
                    saveFile(); 
                } 
                window.document.getElementById("log").innerHTML 
                                 += "Welcome to the application."; 
            } 
            function firstRun() { 
                window.document.getElementById("log").innerHTML  
                            = "Thank you for installing the application. \n" 
                            + "This is the first time you have run it."; 
                saveFile(); 
            } 
            function saveFile() { 
                var stream = new air.FileStream(); 
                stream.open(file, air.FileMode.WRITE); 
                stream.writeUTFBytes(currentVersion); 
                stream.close(); 
            } 
        </script> 
    </head> 
    <body onLoad="system extension()"> 
        <textarea ID="log" rows="100%" cols="100%" /> 
    </body> 
</html> 

アプリケーションでデータをローカル(アプリケーション記憶領域ディレクトリなど)に保存している場合、初めて実行されたときに保存された(以前のバージョンの)データがあるかどうかを確認することができます。

アップデートフレームワークの使用

アプリケーションのアップデートの管理は複雑になることがあります。アップデートフレームワーク(AdobeAIR アプリケーション向け)では、開発者が AIR アプリケーションに優れたアップデート機能を実装するのを支援する API が提供されています。 この AIR アップデートフレームワークの機能は、次の点において開発者を支援します。

  • 一定の間隔またはユーザの要求に基づくアップデートの定期的なチェック

  • Web ソースからの AIR ファイル(アップデート)のダウンロード

  • 新しくインストールされたバージョンが初めて実行される際のユーザへの警告の表示

  • アップデートのチェックを行うかどうかのユーザへの確認

  • 新しいアップデートバージョンに関する情報のユーザへの表示

  • ダウンロードの進捗状況およびエラー情報のユーザへの表示

AIR アップデートフレームワークには、アプリケーションで使用できるサンプルユーザインターフェイスが用意されています。このサンプルユーザインターフェイスにより、アプリケーションのアップデートに関する基本情報とオプションがユーザに提供されます。アプリケーションで独自のカスタムユーザインターフェイスを定義して、アップデートフレームワークに使用することもできます。

AIR アップデートフレームワークを使用すると、AIR アプリケーションのアップデートバージョンに関する情報を単純な XML 設定ファイルに格納できます。ほとんどのアプリケーションでは、これらの設定ファイルを設定していくつかの基本コードを含めることにより、優れたアップデート機能をエンドユーザに提供できます。

アップデートフレームワークを使用しない場合でも、Adobe AIR には、AIR アプリケーションの新しいバージョンへのアップグレードに使用できる Updater クラスが用意されています。 このクラスを使用して、ユーザのコンピュータ上の AIR ファイルに含まれているバージョンにアプリケーションをアップグレードできます。ただし、アップグレードの管理では、ローカルに保存されている AIR ファイルに基づいてアプリケーションをアップデートする以外にも作業が必要になることがあります。

AIR アップデートフレームワークのファイル

AIR アップデートフレームワークには、次のディレクトリが含まれています。

  • doc - AIR アップデートフレームワークのドキュメント(このドキュメント)です。

  • frameworks - このディレクトリには、Flex 開発向けの SWC ファイルと HTML 開発向けの SWF ファイルが含まれています。 詳しくは、HTML ベースの AIR アプリケーションへのフレームワークファイルのインクルードを参照してください。

  • samples - このディレクトリには、アプリケーションアップデートフレームワークの使用方法を示す Flex ベースおよび HTML ベースのサンプルが含まれています。すべての AIR アプリケーションと同様に、これらのファイルをコンパイルおよびテストしてください。

  • templates - このディレクトリには、(ローカライズされた単純な)サンプルのアップデート記述ファイルと設定ファイルが含まれています(これらのファイルについて詳しくは、「Flex 開発環境の設定」と基本のサンプル:ApplicationUpdaterUI バージョンの使用を参照してください)。

HTML ベースの AIR アプリケーションへのフレームワークファイルのインクルード

アップデートフレームワークの frameworks\html ディレクトリには、次のファイルが含まれています。

  • ApplicationUpdater.swf - ユーザインターフェイスを除く、アップデートライブラリの基本機能が定義されています

  • ApplicationUpdater_UI.swf - アプリケーションでアップデートオプションの表示に使用できるユーザインターフェイスを含む、アップデートライブラリの基本機能が定義されています

AIR アプリケーションの JavaScript コードでは、SWF ファイルで定義されているクラスを使用できます。

アップデートフレームワークを使用するには、アプリケーションディレクトリ(またはサブディレクトリ)に ApplicationUpdater.swf ファイルまたは ApplicationUpdater_UI.swf ファイルを含めます。次に、そのファイルを読み込む script タグを、フレームワークを使用する HTML ファイルの JavaScript コードに含めます。

<script src="applicationUpdater.swf" type="application/x-shockwave-flash"/>

ApplicationUpdater_UI.swf ファイルを読み込む場合は、次の script タグを使用します。

<script src="ApplicationUpdater_UI.swf" type="application/x-shockwave-flash"/>

これらの 2 つのファイルで定義されている API については、このドキュメントの後半で説明します。

基本のサンプル:ApplicationUpdaterUI バージョンの使用

アップデートフレームワークの ApplicationUpdaterUI バージョンには、アプリケーションで簡単に使用できる基本インターフェイスが用意されています。以下に基本のサンプルを示します。

まず、アップデートフレームワークを呼び出す AIR アプリケーションを作成します。

  1. アプリケーションが HTML ベースの AIR アプリケーションである場合は、ApplicationUpdaterUI.js ファイルを読み込みます。

    <script src="ApplicationUpdater_UI.swf" type="application/x-shockwave-flash"/>
  2. AIR アプリケーションのプログラムロジックで、ApplicationUpdaterUI オブジェクトをインスタンス化します。

    ActionScript では、次のコードを使用します。

    var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI(); 

    JavaScript では、次のコードを使用します。

    var appUpdater = new runtime.air.update.ApplicationUpdaterUI(); 

    このコードを、アプリケーションが読み込まれたときに実行される初期化関数に追加できます。

  3. updateConfig.xml という名前のテキストファイルを作成し、次のコードを追加します。

    <?xml version="1.0" encoding="utf-8"?> 
    <configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0"> 
         <url>http://example.com/updates/update.xml</url> 
        <delay>1</delay> 
    </configuration>

    updateConfig.xml ファイルの URL エレメントを、Web サーバ上のアップデート記述ファイルの最終的な場所に一致するように編集します(次の手順を参照してください)。

    delay は、アプリケーションでアップデートをチェックする間隔を示す日数です。

  4. AIR アプリケーションのプロジェクトディレクトリに updateConfig.xml ファイルを追加します。

  5. Updater オブジェクトに updateConfig.xml ファイルを参照させ、このオブジェクトの initialize() メソッドを呼び出します。

    ActionScript では、次のコードを使用します。
    appUpdater.configurationFile = new File("app:/updateConfig.xml"); 
    appUpdater.initialize();
    JavaScript では、次のコードを使用します。
    appUpdater.configurationFile = new air.File("app:/updateConfig.xml"); 
    appUpdater.initialize();
  6. 最初のアプリケーションとは異なるバージョンを持つ、もう 1 つの AIR アプリケーションを作成します(バージョンはアプリケーション記述ファイルの version エレメントで指定されます)。

次に、AIR アプリケーションのアップデートバージョンを Web サーバに追加します。

  1. AIR ファイルのアップデートバージョンを Web サーバに配置します。

  2. updateDescriptor.xml という名前のテキストファイルを作成し、次の内容を追加します。

    <?xml version="1.0" encoding="utf-8"?> 
         <update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"> 
           <version>1.1</version> 
           <url>http://example.com/updates/sample_1.1.air</url> 
           <description>This is the latest version of the Sample application.</description> 
        </update>

    updateDescriptor.xml ファイルの versionURL および description を、アップデート AIR ファイルに一致するように編集します。

  3. アップデート AIR ファイルが格納されているのと同じ Web サーバディレクトリに updateDescriptor.xml ファイルを追加します。

これは基本のサンプルですが、多くのアプリケーションに十分なアップデート機能を提供できます。このドキュメントの後半では、ニーズに最も適したアップデートフレームワークの使用方法について説明します。

アップデートフレームワークの使用方法を示す別の例については、Adobe AIR デベロッパーセンターで、「HTML ベースアプリケーションにおけるアップデートフレームワーク」(http://www.adobe.com/go/learn_air_qs_update_framework_html_jp)のサンプルアプリケーションを参照してください。

アップデート記述ファイルの定義と Web サーバへの AIR ファイルの追加

AIR アップデートフレームワークを使用するときは、使用できるアップデートに関する基本情報を、Web サーバに格納されるアップデート記述ファイルに定義します。アップデート記述ファイルは単純な XML ファイルです。アプリケーションに含まれているアップデートフレームワークは、このファイルをチェックして、新しいバージョンがアップロードされているかどうかを調べます。

アップデート記述ファイルには次のデータが含まれます。

  • version:新しいバージョンの AIR アプリケーションです。このバージョンは、新しい AIR アプリケーション記述ファイルでバージョンとして使用されているストリングと同じである必要があります。アップデート記述ファイルのバージョンがアップデート AIR ファイルのバージョンと一致しない場合、アップデートフレームワークは例外をスローします。

  • url:アップデート AIR ファイルの場所です。これは、アップデートバージョンの AIR アプリケーションが含まれるファイルです。

  • description:新しいバージョンに関する詳細です。この情報を、アップデートプロセスの間にユーザに表示できます。

version エレメントと url エレメントは必須です。description エレメントはオプションです。

次にアップデート記述ファイルのサンプルを示します。

<?xml version="1.0" encoding="utf-8"?> 
     <update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"> 
       <version>1.1a1</version> 
       <url>http://example.com/updates/sample_1.1a1.air</url> 
       <description>This is the latest version of the Sample application.</description> 
    </update>

複数の言語を使用して description タグを定義する必要がある場合は、複数の text エレメントを使用して lang 属性を定義します。

<?xml version="1.0" encoding="utf-8"?> 
     <update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"> 
       <version>1.1a1</version> 
       <url>http://example.com/updates/sample_1.1a1.air</url> 
       <description> 
           <text xml:lang="en">English description</text> 
           <text xml:lang="fr">French description</text> 
           <text xml:lang="ro">Romanian description</text> 
       </description> 
    </update>

アップデート記述ファイルをアップデート AIR ファイルと共に Web サーバに配置します。

アップデートフレームワークの templates ディレクトリには、サンプルのアップデート記述ファイルがあります。このサンプルには、単一言語と複数言語の両方のバージョンが含まれています。

Updater オブジェクトのインスタンス化

コードに AIR アップデートフレームワークを読み込んだ後(HTML ベースの AIR アプリケーションへのフレームワークファイルのインクルードを参照)、次の例のように Updater オブジェクトをインスタンス化する必要があります。

var appUpdater = new runtime.air.update.ApplicationUpdater();

前述のコードでは、(ユーザインターフェイスを含まない)ApplicationUpdater クラスを使用しています。(ユーザインターフェイスを提供する)ApplicationUpdaterUI クラスを使用する場合は、次のコードを使用します。

var appUpdater = new runtime.air.update.ApplicationUpdaterUI();

このドキュメントの以降のコード例は、appUpdater という名前の Updater オブジェクトをインスタンス化済みであることを前提としています。

アップデート設定の構成

ApplicationUpdater と ApplicationUpdaterUI はいずれも、アプリケーションに付属する設定ファイルを使用するか、アプリケーションで ActionScript または JavaScript を使用して設定できます。

XML 設定ファイルでのアップデート設定の定義

アップデート設定ファイルは XML ファイルです。このファイルには、次のエレメントを含めることができます。

  • updateURL - ストリングです。リモートサーバ上のアップデート記述ファイルの場所を表します。任意の有効な URLRequest の場所を指定できます。updateURL プロパティは、設定ファイルまたはスクリプトで定義する必要があります(アップデート記述ファイルの定義と Web サーバへの AIR ファイルの追加を参照してください)。このプロパティは、Updater を使用する前(Updater オブジェクトの initialize() メソッドを呼び出す前。詳しくは、アップデートフレームワークの初期化を参照してください)に定義する必要があります。

  • delay - Number 値です。アップデートをチェックする間隔(日数)を表します(0.25 のような値を指定できます)。値 0(デフォルト値)は、Updater で定期的なチェックが自動的に行われないことを示します。

ApplicationUpdaterUI の設定ファイルには、updateURL エレメントと delay エレメントに加えて次のエレメントを含めることができます。

  • defaultUI - dialog エレメントのリストです。各 dialog エレメントには、ユーザインターフェイスのダイアログボックスに対応する name 属性があります。各 dialog エレメントには、ダイアログボックスを表示するかどうかを定義する visible 属性があります。デフォルト値は true です。name 属性で使用できる値は次のとおりです。

    • "checkForUpdate" - アップデートの有無をチェックダイアログボックス、アップデートなしダイアログボックスおよびアップデートエラーダイアログボックスに対応

    • "downloadUpdate" - アップデートのダウンロードダイアログボックスに対応

    • "downloadProgress" - ダウンロードの進捗状況ダイアログボックスとダウンロードエラーダイアログボックスに対応

    • "installUpdate" - アップデートのインストールダイアログボックスに対応

    • "fileUpdate" - ファイルのアップデートダイアログボックス、ファイルのアップデートなしダイアログボックスおよびファイルエラーダイアログボックスに対応

  • "unexpectedError" - 予期しないエラーダイアログボックスに対応

    false に設定した場合、対応するダイアログボックスはアップデート時に表示されません。

次に ApplicationUpdater フレームワークの設定ファイルの例を示します。

<?xml version="1.0" encoding="utf-8"?> 
<configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0"> 
      <url>http://example.com/updates/update.xml</url> 
      <delay>1</delay> 
</configuration>

次に、defaultUI エレメントの定義を含む、ApplicationUpdaterUI フレームワークの設定ファイルの例を示します。

<?xml version="1.0" encoding="utf-8"?> 
<configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0"> 
      <url>http://example.com/updates/update.xml</url> 
      <delay>1</delay> 
      <defaultUI> 
         <dialog name="checkForUpdate" visible="false" /> 
         <dialog name="downloadUpdate" visible="false" /> 
         <dialog name="downloadProgress" visible="false" /> 
      </defaultUI> 
</configuration>

configurationFile プロパティでは、次に示すように設定ファイルの場所を指定します。

  • ActionScript の場合:
    appUpdater.configurationFile = new File("app:/cfg/updateConfig.xml");
  • JavaScript の場合:
    appUpdater.configurationFile = new air.File("app:/cfg/updateConfig.xml");

アップデートフレームワークの templates ディレクトリには、config-template.xml という名前のサンプルの設定ファイルがあります。

アップデート設定の ActionScript コードまたは JavaScript コードの定義

これらの設定パラメータは、次に示すようにアプリケーションのコードを使用して設定することもできます。

appUpdater.updateURL = " http://example.com/updates/update.xml"; 
appUpdater.delay = 1;

Updater オブジェクトのプロパティは updateURL および delay です。これらのプロパティでは、設定ファイルの updateURL エレメントおよび delay エレメントと同じ設定(アップデート記述ファイルの URL およびアップデートのチェックの間隔)を定義します。設定ファイル コードでの設定を指定した場合は、コードで設定されたプロパティが、設定ファイル内の対応する設定より優先されます。

updateURL プロパティは、設定ファイルまたはスクリプトで定義する必要があります(アップデート記述ファイルの定義と Web サーバへの AIR ファイルの追加を参照してください)。このプロパティは、Updater を使用する前、つまり Updater オブジェクトの initialize() メソッドを呼び出す前(アップデートフレームワークの初期化を参照してください)に定義する必要があります。

ApplicationUpdaterUI フレームワークでは、Updater オブジェクトの次のような追加のプロパティを定義します。

  • isCheckForUpdateVisible - アップデートの有無をチェックダイアログボックス、アップデートなしダイアログボックスおよびアップデートエラーダイアログボックスに対応

  • isDownloadUpdateVisible - アップデートのダウンロードダイアログボックスに対応

  • isDownloadProgressVisible - ダウンロードの進捗状況ダイアログボックスとダウンロードエラーダイアログボックスに対応

  • isInstallUpdateVisible - アップデートのインストールダイアログボックスに対応

  • isFileUpdateVisible - ファイルのアップデートダイアログボックス、ファイルのアップデートなしダイアログボックスおよびファイルエラーダイアログボックスに対応

  • isUnexpectedErrorVisible - 予期しないエラーダイアログボックスに対応

各プロパティは、ApplicationUpdaterUI ユーザインターフェイスの 1 つ以上のダイアログボックスに対応しています。各プロパティは Boolean 値で、デフォルト値は true です。false に設定した場合、対応するダイアログボックスはアップデート中に表示されません。

これらのダイアログボックスのプロパティは、アップデート設定ファイル内の設定をオーバーライドします。

アップデートプロセス

AIR アップデートフレームワークでは、次のステップでアップデートプロセスが実行されます。

  1. Updater の初期化により、delay で定義されている間隔内にアップデートのチェックが実行されたかどうかが確認されます(アップデート設定の構成を参照してください)。アップデートのチェックが必要な場合は、アップデートプロセスが続行されます。

  2. アップデート記述ファイルがダウンロードされ、解釈されます。

  3. アップデート AIR ファイルがダウンロードされます。

  4. アプリケーションのアップデートバージョンがインストールされます。

これらの各ステップが完了するたびに、Updater オブジェクトからイベントが送出されます。ApplicationUpdater バージョンでは、プロセスのステップが正常に完了したことを示すイベントをキャンセルできます。これらのイベントのいずれかをキャンセルすると、プロセスのその次のステップがキャンセルされます。ApplicationUpdaterUI バージョンでは、プロセスのステップごとに、プロセスをキャンセルするか進行させるかをユーザが選択できるダイアログボックスが表示されます。

イベントをキャンセルした場合、Updater オブジェクトのメソッドを呼び出すとプロセスを再開できます。

ApplicationUpdater バージョンでアップデートプロセスが進行するときは、現在の状態が currentState プロパティに記録されます。このプロパティは、次のいずれかの値のストリングに設定されます。

  • "UNINITIALIZED" - Updater は初期化されていません。

  • "INITIALIZING" - Updater の初期化中です。

  • "READY" - Updater の初期化が完了しました。

  • "BEFORE_CHECKING" - アップデート記述ファイルはまだチェックされていません。

  • "CHECKING" - アップデート記述ファイルのチェック中です。

  • "AVAILABLE" - アップデート記述ファイルは使用可能です。

  • "DOWNLOADING" - AIR ファイルのダウンロード中です。

  • "DOWNLOADED" - AIR ファイルのダウンロードが完了しました。

  • "INSTALLING" - AIR ファイルのインストール中です。

  • "PENDING_INSTALLING" - Updater の初期化は完了し、保留中のアップデートがあります。

Updater オブジェクトのメソッドの中には、Updater が特定の状態の場合にのみ実行されるものもあります。

アップデートフレームワークの初期化

アップデートを初期化するには、設定プロパティを設定した後に(基本のサンプル:ApplicationUpdaterUI バージョンの使用を参照してください)initialize() メソッドを呼び出します。

appUpdater.initialize();

このメソッドは、次の処理を行います。

  • アップデートフレームワークを初期化し、保留中のアップデートがあればそれを同期的にサイレントインストールします。このメソッドを呼び出すとアプリケーションが再起動される場合があるため、アプリケーションの起動時にこのメソッドを呼び出す必要があります。

  • 延期されたアップデートがあるかどうかをチェックし、あればそれをインストールします。

  • アップデートプロセス中にエラーが発生した場合は、アップデートファイルとバージョン情報をアプリケーションのストレージ領域から消去します。

  • delay の間隔が過ぎている場合は、アップデートプロセスを開始します。それ以外の場合はタイマーを再起動します。

このメソッドを呼び出すと、Updater オブジェクトから次のイベントが送出されます。

  • UpdateEvent.INITIALIZED - 初期化が完了したときに送出されます。

  • ErrorEvent.ERROR - 初期化中にエラーが発生したときに送出されます。

UpdateEvent.INITIALIZED イベントが送出されると、アップデートプロセスが完了します。

initialize() メソッドを呼び出すと、タイマーの delay の設定に基づいてアップデートプロセスが開始され、すべてのステップが実行されます。しかし、Updater オブジェクトの checkNow() メソッドを呼び出すことにより、任意の時点でアップデートプロセスを開始することもできます。

appUpdater.checkNow();

アップデートプロセスが既に実行中の場合は、このメソッドを呼び出しても何も起こりません。それ以外の場合は、アップデートプロセスが開始されます。

checkNow() メソッドを呼び出すと、Updater オブジェクトから次のイベントが送出されます。

  • UpdateEvent.CHECK_FOR_UPDATE - アップデート記述ファイルのダウンロードを試みる直前に送出されます。

checkForUpdate イベントをキャンセルした場合、Updater オブジェクトの checkForUpdate() メソッドを呼び出すことができます(次の節を参照してください)。このイベントをキャンセルしない場合、アップデートプロセスが進行し、アップデート記述ファイルがチェックされます。

ApplicationUpdaterUI バージョンでのアップデートプロセスの管理

ApplicationUpdaterUI バージョンでは、ユーザはユーザインターフェイスのダイアログボックスにある「キャンセル」を使用してプロセスをキャンセルできます。また、ApplicationUpdaterUI オブジェクトの cancelUpdate() メソッドを呼び出して、アップデートプロセスをプログラムによってキャンセルすることもできます。

ApplicationUpdaterUI オブジェクトのプロパティを設定するか、アップデート設定ファイルでエレメントを定義して、Updater に表示される確認ダイアログボックスを指定します。詳しくは、アップデート設定の構成を参照してください。

ApplicationUpdater バージョンでのアップデートプロセスの管理

ApplicationUpdater オブジェクトによって送出されるイベントオブジェクトの preventDefault() メソッドを呼び出して、アップデートプロセスのステップをキャンセルできます(アップデートプロセスを参照)。デフォルト動作をキャンセルすると、アプリケーションでは続行するかどうかをユーザに確認するメッセージを表示できます。

以降の節では、プロセスのステップがキャンセルされたときにアップデートプロセスを続行する方法について説明します。

アップデート記述ファイルのダウンロードと解釈

アップデートプロセスが開始される前(Updater がアップデート記述ファイルのダウンロードを試みる直前)に、ApplicationUpdater オブジェクトから checkForUpdate イベントが送出されます。checkForUpdate イベントのデフォルト動作をキャンセルすると、アップデート記述ファイルはダウンロードされません。checkForUpdate() メソッドを呼び出すと、アップデートプロセスを再開できます。

appUpdater.checkForUpdate();

checkForUpdate() メソッドを呼び出すと、アップデート記述ファイルが非同期でダウンロードおよび解釈されます。checkForUpdate() メソッドを呼び出すと、Updater オブジェクトから次のイベントが送出されます。

  • StatusUpdateEvent.UPDATE_STATUS - アップデート記述ファイルのダウンロードおよび解釈が正常に完了しました。このイベントには、次のプロパティがあります。

    • available - Boolean 値。現在のアプリケーションと異なるバージョンが使用可能である場合は true に設定され、それ以外の場合(バージョンが同じである場合)は false に設定されます。

    • version - ストリングです。アップデートファイルのアプリケーション記述ファイル内のバージョンです。

    • details - Array 値。ローカライズされたバージョンの説明が存在しない場合、この配列の 1 番目のエレメントで空のストリング("")が返され、2 番目のエレメントで説明が返されます。

      (アップデート記述ファイルに)複数のバージョンの説明が存在する場合、この配列には複数のサブ配列が含まれます。各配列には 2 つのエレメントが含まれます。1 番目のエレメントは言語コード("en" など)で、2 番目のエレメントはその言語の対応する説明(String 値)です。アップデート記述ファイルの定義と Web サーバへの AIR ファイルの追加を参照してください。

  • StatusUpdateErrorEvent.UPDATE_ERROR - エラーが発生したので、アップデート記述ファイルをダウンロードまたは解釈できませんでした。

アップデート AIR ファイルのダウンロード

Updater がアップデート記述ファイルを正常にダウンロードおよび解釈した後、ApplicationUpdater オブジェクトから updateStatus イベントが送出されます。デフォルト動作では、アップデートファイル(使用可能な場合)のダウンロードが開始されます。デフォルト動作をキャンセルすると、downloadUpdate() メソッドを呼び出してアップデートプロセスを再開できます。

appUpdater.downloadUpdate();

このメソッドを呼び出すと、AIR ファイルのアップデートバージョンが非同期でダウンロードされます。

downloadUpdate() メソッドからは次のイベントが送出されます。

  • UpdateEvent.DOWNLOAD_START - サーバとの接続が確立されました。ApplicationUpdaterUI ライブラリを使用している場合は、このイベントにより、ダイアログボックスにダウンロードの進捗状況を追跡するためのプログレスバーが表示されます。

  • ProgressEvent.PROGRESS - ファイルのダウンロードの進行中に定期的に送出されます。

  • DownloadErrorEvent.DOWNLOAD_ERROR - 接続中またはアップデートファイルのダウンロード中にエラーが発生した場合に送出されます。HTTP ステータスが無効(「404 - ファイルが見つかりません」など)である場合にも送出されます。このイベントには errorID プロパティがあります。このプロパティは、追加のエラー情報を定義する整数です。追加の subErrorID プロパティには、さらに詳しいエラー情報が含まれます。

  • UpdateEvent.DOWNLOAD_COMPLETE - アップデート記述ファイルのダウンロードおよび解釈が正常に完了しました。このイベントをキャンセルしない場合、ApplicationUpdater バージョンはアップデートバージョンのインストールに進みます。ApplicationUpdaterUI バージョンでは、処理を進行させるかどうかをユーザが選択できるダイアログボックスが表示されます。

アプリケーションのアップデート

アップデートファイルのダウンロードが完了すると、ApplicationUpdater オブジェクトから downloadComplete イベントが送出されます。デフォルト動作をキャンセルすると、installUpdate() メソッドを呼び出してアップデートプロセスを再開できます。

appUpdater.installUpdate(file);

このメソッドを呼び出すと、AIR ファイルのアップデートバージョンがインストールされます。このメソッドには file というパラメータが 1 つあります。このパラメータは、アップデートとして使用する AIR ファイルを参照する File オブジェクトです。

ApplicationUpdater オブジェクトから beforeInstall イベントが送出されるのは、installUpdate() メソッドを呼び出した後です。

  • UpdateEvent.BEFORE_INSTALL - アップデートのインストールの直前に送出されます。この時点でアップデートのインストールをキャンセルすると、ユーザが現在の作業を終えてからアップデートを実行できるので、場合によっては便利です。Event オブジェクトの preventDefault() メソッドを呼び出すと、次に再起動するまでインストールが延期され、新しいアップデートプロセスも開始されません(これには、checkNow() メソッドの呼び出しによるアップデートと定期的なチェックによるアップデートの両方が含まれます)。

任意の AIR ファイルからのインストール

installFromAIRFile() メソッドを呼び出すと、ユーザのコンピュータの AIR ファイルからアップデートバージョンをインストールできます。

appUpdater.installFromAIRFile();

このメソッドにより、AIR ファイルからアプリケーションのアップデートバージョンがインストールされます。

installFromAIRFile() メソッドからは次のイベントが送出されます。

  • StatusFileUpdateEvent.FILE_UPDATE_STATUS - installFromAIRFile() メソッドを使用して送信されたファイルが ApplicationUpdater で正常に検証された後に送出されます。このイベントには、次のプロパティがあります。

    • available - 現在のアプリケーションと異なるバージョンが使用可能である場合は true に設定され、それ以外の場合(バージョンが同じである場合)は false に設定されます。

    • version - 使用できる新しいバージョンを表すストリングです。

    • path - アップデートファイルのネイティブパスを表します。

    StatusFileUpdateEvent オブジェクトの available プロパティが true に設定されている場合でも、このイベントをキャンセルできます。このイベントをキャンセルすると、アップデートの進行がキャンセルされます。キャンセルされたアップデートを続行するには、installUpdate() メソッドを呼び出します。

  • StatusFileUpdateErrorEvent.FILE_UPDATE_ERROR - エラーが発生したので、AIR アプリケーションをインストールできませんでした。

アップデートプロセスのキャンセル

cancelUpdate() メソッドを呼び出すと、アップデートプロセスをキャンセルできます。

appUpdater.cancelUpdate();

このメソッドにより、保留中のダウンロードがあればキャンセルされ、ダウンロードされた不完全なファイルがあれば削除され、定期的なチェックのタイマーが再起動されます。

Updater オブジェクトの初期化中は、このメソッドを呼び出しても何も起こりません。

ApplicationUpdaterUI のインターフェイスのローカライズ

ApplicationUpdaterUI クラスには、アップデートプロセス用のデフォルトのユーザインターフェイスが用意されています。このインターフェイスには、ユーザがプロセスの起動、プロセスのキャンセルおよびその他の関連アクションの実行に使用できるダイアログボックスが含まれています。

アップデート記述ファイルの description エレメントでは、アプリケーションの説明を複数の言語で定義できます。次に示すように、複数の text エレメントを使用して lang 属性を定義します。

<?xml version="1.0" encoding="utf-8"?> 
     <update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"> 
       <version>1.1a1</version> 
       <url>http://example.com/updates/sample_1.1a1.air</url> 
       <description> 
           <text xml:lang="en">English description</text> 
           <text xml:lang="fr">French description</text> 
           <text xml:lang="ro">Romanian description</text> 
       </description> 
    </update>

アップデートフレームワークは、エンドユーザのロケールチェーンに最も適した説明を使用します。詳しくは、「アップデート記述ファイルの定義と Web サーバへの AIR ファイルの追加」を参照してください。

Flex 開発者は、"ApplicationUpdaterDialogs" バンドルに直接新しい言語を追加できます。

JavaScript 開発者は、Updater オブジェクトの addResources() メソッドを呼び出すことができます。このメソッドにより、言語の新しいリソースバンドルが動的に追加されます。リソースバンドルでは、言語のローカライズされたストリングが定義されます。これらのストリングは、ダイアログボックスの様々なテキストフィールドで使用されます。

JavaScript 開発者は ApplicationUpdaterUI クラスの localeChain プロパティを使用して、ユーザインターフェイスで使用されるロケールチェーンを定義できます。通常、JavaScript(HTML)開発者のみがこのプロパティを使用します。Flex 開発者は ResourceManager を使用してロケールチェーンを管理できます。

例えば、次の JavaScript コードはルーマニア語およびハンガリー語のリソースバンドルを定義します。

appUpdater.addResources("ro_RO", 
                    {titleCheck: "Titlu", msgCheck: "Mesaj", btnCheck: "Buton"}); 
appUpdater.addResources("hu", {titleCheck: "Cím", msgCheck: "Üzenet"}); 
var languages = ["ro", "hu"]; 
languages = languages.concat(air.Capabilities.languages); 
var sortedLanguages = air.Localizer.sortLanguagesByPreference(languages, 
                         air.Capabilities.language, 
                         "en-US"); 
sortedLanguages.push("en-US"); 
appUpdater.localeChain = sortedLanguages;

詳しくは、リファレンスガイドの ApplicationUpdaterUI クラスの addResources() メソッドに関する説明を参照してください。