AIRアプリケーションのオートアップデートライブラリ(AirUpdater.as)に Ajaxローディングアイコンを表示するUI(AirUpdaterUI.mxml)を組み込んだパッケージで 以下の機能と利便性があります。
ライブラリ以外に以下のものが用意されている必要があります。説明には同一アプリケーションのバージョン違いが登場して紛らわしいので 便宜的に最新バージョン(アップデートで上書きする側)を「NEW」、現行バージョン(アップデートで上書きされる側)を「OLD」で識別することにします。
ライブラリを使用する前の下準備(1, 2)をしてからライブラリの設定(3以降)に入ります。図も参考ください。
図1 オートアップデートのフローチャート。
http://example.com/latest_app.air
<?xml version="1.0" encoding="UTF-8"?> <!--update.xml--> <application> <version>2.0</version> <download_url>http://example.com/latest_app.air</download_url> </application>を以下URLに保管したとします(図1 左上)。後ほど詳しく説明しますが、XMLファイル中のノード名は任意のものでかまいません。
http://example.com/update.xml
<!--OLD AIR application ver. 1.0--> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:updater="com.borealkiss.air.display.*"> <updater:AirUpdaterUI id="updaterUI"/> </mx:WindowedApplication>
アップデートチェックを行いたいタイミング(例えばUpdateボタンを用意してクリックされた時など)に以下のActionScriptを記述します。
<mx:Script> <![CDATA[ updaterUI.setParam("1.0","http://example.com/update.xml","version","download_url"); updaterUI.update(); ]]> </mx:Script>
updateUIは先ほど設定したAirUpdaterUIコンポーネントのidです。 setParam()に渡す引数は全てStringで前から順番に
となっています。XMLファイル(update.xml)の設定箇所で説明したように、XMLファイル内のノード名は好き勝手つけれますが、 必ずsetParam()の引数名と一致させる必要があります(上記例では<version>と<download_url>)。
updateUI.update()でバージョンチェックを開始します(図1 矢印a)。 update.xmlにアクセスし中身を解析してから、OLDアプリケーションのバージョンと XMLファイルに記述されたNEWアプリケーションのバージョンの数値の大小を比較して
の3通りの場合に対してAlertウィンドウを表示します。 最新バージョンが存在して"Update"を選ぶと引き続き NEWアプリケーションをデスクトップにダウンロードし(図1 矢印c)、 現在立ち上げているOLDアプリケーションをNEWアプリケーションに書き換えるまでの作業を自動で行います(図1 矢印d)。
図2 NEWバージョンが存在する場合
図3 NEWバージョンが存在しない場合
図4 通信エラー(アクセス先URLにXMLファイルがない等)
以上で必要最低限の設定は完了です。
以下のようにAirUpdaterUI.iconModeプロパティを設定する必要があります。 未設定の場合はデフォルト値com.borealkiss.air.display.AirUpdaterUI.INDICATOR_AJAX_BLACKになります。
<updater:AirUpdaterUI
id="updaterUI"
iconMode="{com.borealkiss.air.display.AirUpdaterUI.INDICATOR_AJAX_BLACK}"/>
iconModeの設定値と表示されるアイコンの関係は以下のようになります。
ローディングアイコンは実際はローディング中しか表示されませんが、 以下のようにAirUpdaterUI.debugModeプロパティをtrue(デフォルトはfalse)にすることで アプリケーションスタート時にも強制的に表示することが可能です。
<updater:AirUpdaterUI id="updaterUI" debugMode="true"/>
AIRアプリケーションのフレームレートと同期します。そのためアニメーションが早すぎる場合は 以下のようにアプリケーションのフレームレートを変更してみてください。
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" frameRate="12"> </mx:WindowedApplication>
未設定の場合はFlexのデフォルトスキンでAlertウィンドウが表示されます。 デザインを変更したい場合はメインアプリケーション内にCSSファイルをインクルードしてください。 以下の例では本パッケージ内assets/stylesheets/AlertDesignExample.cssを読み込ませています (この場合、図2-4のような黒ベースのAlertデザインで表示される)。
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Style source="assets/stylesheets/AlertDesignExample.css"/> </mx:WindowedApplication>
最新アプリケーションの存在の有無はサーバー上に設置された"update.xml"の内容を解析することで 知ることができますが、逐一ファイルにアクセスするのはサーバーへの負担になります。 updaterUI.update()の引数にキャッシュの有効期限(hour)を設定することで、 実際のファイルアクセスの頻度を制限してやることが可能です。 例えば以下では、最終チェック時より24時間以上経過している場合にはupdate.xmlへ実際にアクセスする、 そうでない場合にはローカルに保存されたキャッシュを利用して更新情報を通達します。
updaterUI.update(24);
updaterUI.update()の引数が未設定の場合、デフォルト値ゼロが代入されます。
その場合updaterUI.update()が呼ばれるごとにupdate.xmlにアクセスし、アップデート情報をチェックすることになります。
MITライセンスです。 Flashオープンソースプロジェクトとライセンス - blog Boreal Kiss を参考ください。