AirUpdater.as

AIRアプリケーションのオートアップデートライブラリ(ActionScriptライブラリ)で以下の機能があります。

  1. このライブラリをインポート済みのAIRアプリケーションからそのアプリケーションの最新バージョンの有無をチェック
  2. 最新バージョンがあるようならその場でファイルをダウンロード、アップデートを行う(アプリケーションの上書き)

ライブラリのダウンロード

AirUpdater.zip

必要なもの

ライブラリ以外に以下のものが用意されている必要があります。説明には同一アプリケーションのバージョン違いが登場して紛らわしいので 便宜的に最新バージョン(アップデートで上書きする側)を「NEW」、現行バージョン(アップデートで上書きされる側)を「OLD」で識別することにします。

  1. このライブラリをインポートするOLDアプリケーション
  2. NEWアプリケーション
  3. 「NEWアプリケーションのバージョン情報」と「NEWアプリケーションの保管場所URL」を記述したXMLファイル

使い方

ライブラリを使用する前の下準備(1, 2)をしてからライブラリ本体の説明(3 ~)に入ります。図も参考ください。

Flowchart

図1 オートアップデートのフローチャート。

  1. NEWアプリケーション(例としてlatest_app.air, バージョン2.0)を以下URLに保管したとします(図1 右上)。
    http://example.com/latest_app.air
  2. NEWアプリケーションのバージョンとそのファイル保管場所情報を記述したXMLファイル(例としてupdate.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <application>
        <version>2.0</version>
        <download_url>http://example.com/latest_app.air</download_url>
    </application>
    を以下URLに保管したとします(図1 左上)。後ほど詳しく説明しますが、XMLファイル中のノード名は任意のものでかまいません。
    http://example.com/update.xml
  3. ライブラリをOLDアプリケーション(例としてバージョン1.0)内にインポートして(図1 左下)AirUpdater.getInstance()によりインスタンスを作成します。
    import com.borealkiss.fl.utils.AirUpdater;
    
    var updater:AirUpdater;
    updater = AirUpdater.getInstance("1.0",
                                     "http://example.com/update.xml",
                                     "version",
                                     "download_url");

    AirUpdater.getInstance()に渡す引数は全てStringで一番前から順番に

    1. OLDアプリケーションのバージョン
    2. バージョンチェック用XMLファイルの保管先URL
    3. XMLファイル中のNEWアプリケーションのバージョンを記述しているノード名
    4. XMLファイル中のNEWアプリケーションの保管先URLを記述しているノード名

    となっています。XMLファイル内のノード名は好き勝手つけれますが、 必ずAirUpdater.getInstance()の引数名と一致させる必要があります(上記例では<version>と<download_url>)。

  4. AirUpdater.check()でバージョンチェックを開始します(図1 矢印a)。 update.xmlにアクセスし中身を解析してから、OLDアプリケーションのバージョンと XMLファイルに記述されたNEWアプリケーションのバージョンの数値の大小を比較して

    1. NEWバージョンが存在する
    2. NEWバージョンは存在しない(現在のものが最新)
    3. 通信エラー(アクセス先URLにXMLファイルがない等)

    の3通りの場合に対してイベントを返すのでそれぞれにイベントリスナーを付与します。

    updater.check();
    
    //NEWバージョンが存在する
    updater.addEventListener(AirUpdater.LATEST_VERSION_FOUND,onFound);
    
    //NEWバージョンは存在しない
    updater.addEventListener(AirUpdater.LATEST_VERSION_NOT_FOUND,onFound);
    
    //通信エラー
    updater.addEventListener(IOErrorEvent.IO_ERROR,onFound);
  5. NEWバージョンがある場合は続けてAirUpdater.downloadUpdate()を行います。 これによりNEWアプリケーションをデスクトップにダウンロードし(図1 矢印c)、 現在立ち上げているOLDアプリケーションをNEWアプリケーションに書き換えるまでの作業を自動で行ってくれます(図1 矢印d)。

    private function onFound(e:Event):void{
        switch(e.type){
            case AirUpdater.LATEST_VERSION_FOUND:
            //NEWバージョンが存在する
            updater.downloadUpdate();
            break;
                        
            case AirUpdater.LATEST_VERSION_NOT_FOUND:
            //NEWバージョンが存在しない
            trace("No newer version found");
            break;
                        
            default:
            //通信エラー
            trace("Error");
        }
    }

その他注意点

Contact

info [AT] boreal-kiss [DOT] com

Powered by blog Boreal Kiss 2008.