— boreal-kiss.com

[AIR] AIR用オートアップデートライブラリ

追記 2008/09/13

もう少し読みやすい文章(図付き)はこちら

追記 2008/09/16

すでにAdobe AIR Update Framework なんてものがあるじゃないか。。。仕組み的には同じっぽいのでまあ安心した。使い方は自動Update part2 (shin1)が詳しいのかな。

追記 2008/09/17

[AIR] Adobe AIR Update Frameworkを使ってみた – blog Boreal Kiss

___________________________

AIRアプリケーションのアップデート機能は汎用性が高いと思われたので専用のActionScriptライブラリを作った。このライブラリは、(このライブラリをインポート済みの)古いAIRアプリケーションから最新バージョン情報の有無をチェックして、もし最新バージョンがあるようならその場でアップデートを行う。ライブラリ以外に必要なのは以下の2ファイルで、それぞれweb上にアップロードしてあることが前提。

  • アプリケーションの最新バージョン
  • アプリケーション最新バージョンの設置先URLとそのバージョン情報を記述したXMLファイル

以下では上記の準備(1, 2)を行ってからライブラリの使い方(3)について説明している。

1. アプリケーション最新バージョンを作る

例えば最新バージョンのアプリケーション(latest_app.air, バージョン2.0と仮定)を以下のURLにアップロードしたと仮定。

http://example.com/latest_app.air

2. 最新バージョンチェック用のXMLファイルを作る

最新アプリケーションバージョンとそのファイル設置場所に関する情報を記述した以下のような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にアップロードしたと仮定。

http://example.com/update.xml

3. ライブラリを使う

  1. ライブラリのダウンロード
  2. 古いAIRアプリケーション(例としてバージョン1.0)内にインポートしてAirUpdaterのインスタンスを作成。
    import com.borealkiss.fl.utils.AirUpdater;
    
    var updater:AirUpdater;
    updater = AirUpdater.getInstance("1.0",
                                     "http://example.com/update.xml",
                                     "version",
                                     "download_url");
  3. 上記引数は全てStringで一番前から順番に、(1)現在のアプリケーションバージョン、(2)バージョンチェック用XMLファイルのURL、(3)XMLファイル中の最新バージョンを記述しているノード名(<version>)、(4)XMLファイル中の最新バージョンのURLを記述しているノード名(<download_url>)、となっている。バージョンチェック用XMLファイル内のノード名は好き勝手つけれるが、必ずgetInstance()の引数名と一致させる必要がある。
  4. AirUpdater.check()でバージョンチェック開始。update.xmlの内容を解析して、現在のバージョンとXMLファイルに記述されたバージョンの数値の大小を比較して、(1)最新バージョンがある、(2)最新バージョンはない、(3)送信エラー(アクセス先URLにXMLファイルがない等)、の3通りの場合に対してイベントを返す。それぞれにイベントリスナーを設置。
    updater.check();
    
    //最新バージョンが存在する
    updater.addEventListener(AirUpdater.LATEST_VERSION_FOUND,onFound);
    
    //最新バージョンは存在しない(現在のものが最新)
    updater.addEventListener(AirUpdater.LATEST_VERSION_NOT_FOUND,onFound);
    
    //通信エラー
    updater.addEventListener(IOErrorEvent.IO_ERROR,onFound);
  5. あとは最新バージョンがある場合はAirUpdater.downloadUpdate()を行う。これで最新バージョンのアプリケーションをデスクトップにダウンロードし、現在立ち上げているアプリケーションを最新バージョンに書き換える。
    private function onFound(e:Event):void{
        switch(e.type){
            case AirUpdater.LATEST_VERSION_FOUND:
            updater.downloadUpdate();
            break;
                        
            case AirUpdater.LATEST_VERSION_NOT_FOUND:
            trace("No newer version found");
            break;
                        
            default:
            trace("Error");
    
    
        }
    }

その他注意点

  • 単純に数値の大きいものを最新バージョンと見なす。例えば上記の例の場合、1.0より2.0の方が最新ということになる。AirUpdaterに渡すバージョン情報とXMLファイル中のバージョン情報に数値以外が入っていると解析不能(例えばv2.5)。
  • アプリケーションの実際のバージョン情報を参照するわけではない。AirUpdaterに渡すバージョン数値とXMLファイル中のバージョン数値の大小を比較してアップデートを行う。
  • 最新バージョンをリリースするたびにバージョンチェック用のXMLファイルも修正する必要がある。
  • 同じアプリケーションID同士でないとアップデートできない。
0 comments
Submit comment