AdobeAirでの自動Updateの仕組みですが、前回の記事を書いてから、Adobe AIR Update Frameworkというのがあるのを知りました。 早速これを使った方法のご紹介。 私が使ったのは 2008/06/24リリースのバージョンですが、またBetaのようです。 前回の方法では、AIRパッケージのDownloadなどは自分でする必要があったり、バージョンを書くXMLは独自形式だったりしたんですが、Adobe AIR Update Frameworkを使うと、それらはこのフレームワークでやってくれるようになります。 2008/12/29追記 AIR1.5よりUpdateFrameworkは同梱されるようになったようです。 AIR SDK 1.5のframeworks/libs/airの下にswcファイルが含まれています。 AIRのランタイムが1.5を使っている場合には、swcファイルは一緒にパッケージしなくてもOKになってます。 概要のイメージとしては、以下の感じになります。
さて、実際組み込んでみます。 0. Adobe AIR Update Frameworkのサイトから、モジュールをDownload。中に入っている、applicationupdater_ui.swcをクラスパスに含めておきます1. サーバ側に最新バージョンの記述を書いたXMLファイルを配置。記述例としては以下の感じ。<?xml version="1.0" encoding="utf-8"?>
<update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"> <version>1.0.5</version> <url>http://www.assembla.com/spaces/ASlimTimer/documents/cUO-6eFkWr3Awzab7jnrAJ/download/aslimtimer-1.0.5.air</url> <description><![CDATA[New version includes: * Alarm機能の追加 * Task開始時にWindowを小さくする設定を追加 * Windowサイズ切替時にテーブル列サイズが変更されてしまう不具合を修正 * Updateの仕組みをAirApplicationUpdateに変更]]></description> </update> 2. AIRアプリケーションに組み込んでおくXMLを作成する。記述例としては以下の感じ。<?xml version="1.0" encoding="utf-8"?>
<url>には、1.で作成したXMLのパスを記述します。<configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0" > <url>http://www.assembla.com/spaces/ASlimTimer/documents/aDRksiFk0r3Awzab7jnrAJ/download/update.xml</url> <delay>1</delay> <defaultUI> <dialog name="checkForUpdate" visible="false" /> <dialog name="downloadUpdate" visible="true" /> <dialog name="downloadProgress" visible="true" /> <dialog name="installUpdate" visible="true" /> </defaultUI> </configuration> <defaultUI>にはAdobe AIR Update Frameworkでの属性を指定します。
3. Adobe AIR Update Frameworkを実行するクラスを作成する。package controller { import air.update.ApplicationUpdaterUI; import air.update.events.UpdateEvent; import flash.filesystem.File; import flash.events.ErrorEvent; import flash.events.Event; import mx.core.UIComponent; public class UpdateManager extends UIComponent { private var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI; public function get applicationUpdater():ApplicationUpdaterUI{ return appUpdater; } public function UpdateManager() { super(); appUpdater.configurationFile = new File("app:/update.xml"); appUpdater.addEventListener(ErrorEvent.ERROR, onError); appUpdater.addEventListener(UpdateEvent.INITIALIZED, function (event:UpdateEvent):void { checkForUpdate(); } ); appUpdater.initialize(); } private function onError(ev:ErrorEvent):void { } public function checkForUpdate():void { appUpdater.checkNow(); } } } appUpdater.configurationFile = new File("app:/update.xml"); で2.で作成したXMLを読み込んでいます。この例だとパッケージ直下にupdate.xmlというファイル名で設定を入れている状態です。 appUpdater.checkNow();というのが更新チェックをすぐに行なうというメソッドになります。 上記の例では、 コンストラクタにてUpdateEvent.INITIALIZEDで初期化が終わったタイミングをListenして、appUpdater.checkNow();を呼んでいるので、このクラスをインスタンス(new)した時点でチェックが実行される形になっています。 UpdateEvent.INITIALIZEDで初期化が終わったタイミングでないと、checkNowを呼んでもなにも起こらないので注意! 2008/09/10 追記: 現在はAdobeAIR Update Frameworkを使うと、Command+Qでの終了が出来なくなる不具合があるようです。 http://www.adobe.com/cfusion/webforums/forum/messageview.cfm?forumid=72&catid=670&threadid=1373568&enterthread=y 詳しくは↑を。。 つーことで、とりあえずのバグ回避としては上記URLの内容にならって以下のコードを追記してあげればOKでした。 NativeApplication.nativeApplication.addEventListener(Event.EXITING, function(e:Event):void { var opened:Array = NativeApplication.nativeApplication.openedWindows; for (var i:int = 0; i < opened.length; i ++) { opened[i].close(); } }); 4. AIRアプリケーションに組み込み3.で作成したクラスを、実行したいタイミングでnewします。たとえば、アプリケーション起動時にすぐに実行したいのであれば、ApplicationCompleteのタイミングなどで var appUpdater:UpdateManager = new UpdateManager(); を行ないます。 そうすると...更新がある場合にはこんなメッセージがでてきます。▶リリースノートをクリックすると、サーバに配置したXMLのdescriptionの内容が表示されます。 今すぐダウンロードを選ぶと、ダウンロードが始まります。 完了すると、以下のような画面になります。 んー、便利ですね。 |



