Adobeの公式UpdaterFrameWorkのサンプル
Adobeの公式UpdaterFrameWorkのサンプルです。
こちらのUpdaterは新しいバージョンのアプリケーションがサーバーに見つかった場合、自動でダウンロードやアップデートしてくれます。
先日のAIR支部のアプリに組み込まれています。
せっかくなのでソースの公開や使い方など。
まずはSDKのダウンロード
http://www.adobe.com/products/air/tools/sdk/
こちらをダウンロードして解凍すると「applicationupdater_ui.swc」「applicationupdater_.swc」なファイルが見つかるのでそれをプロジェクトのlibフォルダに入れればOK
※もしかしたら最新のFlexSDKには最初から入っているかも?
ユーザーインターフェイスあり版
applicationupdater_ui.swc
ユーザーインターフェイス無し版
applicationupdater.swc
バージョンの管理はネットワークを通じて最新のアプリがないか調べます。
管理用ファイルはxml形式です。
自分のxmlはこんな感じ
http://moeten.info/air/?m=download&type=versionxml&id=2
気を付けることはairのファイル置き場に&マークとかは入れないほうがいい感じ。
× http://yourserver/?type=air&download=4 ○ http://yourserver/4.air
このバージョンと現在のAIRアプリの中のバージョンの適合性をチェックしてからアップデートされます。
ちなみに制作者側でAIRアプリのバージョンの指定は以下の方法でできます。
AIRプロジェクトのprojectname-app.xmlのversionタグで指定。
ソース全体
<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" clipContent="false" backgroundColor="0xffffff" backgroundAlpha="0" showGripper="false" showInAutomationHierarchy="false" showStatusBar="false" showTitleBar="false" borderThickness="0" width="530" height="356" mouseDown="onMouseDown()" creationComplete="init()" > <mx:Script> <![CDATA[ import mx.controls.Alert; import flash.events.ErrorEvent; import air.update.ApplicationUpdaterUI; import air.update.events.UpdateEvent; import com.trick7.utils.TeraClock; private var clock:TeraClock = new TeraClock(); private var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI(); private function checkUpdate():void { setApplicationVersion(); appUpdater.updateURL = "http://moeten.info/air/?m=download&type=versionxml&id=2"; appUpdater.addEventListener(UpdateEvent.INITIALIZED, onUpdate); appUpdater.addEventListener(ErrorEvent.ERROR, onError); appUpdater.isCheckForUpdateVisible = false; appUpdater.initialize(); } private function onUpdate(event:UpdateEvent):void { appUpdater.checkNow(); } private function onError(event:ErrorEvent):void { Alert.show(event.toString()); } private function setApplicationVersion():void { // var appXML:XML = NativeApplication.nativeApplication.applicationDescriptor; // var ns:Namespace = appXML.namespace(); // lblAppVersion.text = "App version: " + appXML.ns::version; } private function init():void{ checkUpdate(); clock.addEventListener(TeraClock.SECONDS_CHANGED, myTimer ); soundPlay('18'); } private function myTimer( e:Event ):void{ myClock.text = "" + clock.hours2 + ":" + clock.minutes2; if( ! myImage_sleep.visible ){ if( clock.seconds == 0 ){ myImage_basic.visible = false; myImage_bikkuri.visible = true; }else{ myImage_bikkuri.visible = false; if( clock.seconds %10 == 0 ){ myImage_basic.visible = false; myImage_wink.visible = true; }else{ myImage_basic.visible = true; myImage_wink.visible = false; } } } notDowned++; if( notDowned >= 300 ){ if( ! myImage_sleep.visible )soundPlay('19'); myImage_sleep.visible = true; myImage_basic.visible = false; } } private function soundPlay( file:String ):void{ mySound.source = "" + file + ".mp3"; mySound.play(); } private var notDowned:int = 0; private function onMouseDown():void{ this.nativeWindow.startMove(); notDowned = 0; soundPlay('06'); myImage_basic.visible = true; myImage_sleep.visible = false; } ]]> </mx:Script> <mx:SoundEffect id="mySound" target="{this}" useDuration="false" /> <mx:GlowFilter id="gf" blurX="4" blurY="4" color="0xffffff" strength="8"/> <mx:DropShadowFilter id="dsf" blurX="8" blurY="8" distance="0" color="0x000000"/> <mx:Image source="kumo.png" x="0" y="0" alpha="0.8"/> <mx:TextArea id="myClock" filters="{[gf,dsf]}" color="0xff2ce9" selectable="false" editable="false" fontSize="64" borderThickness="0" backgroundAlpha="0" backgroundColor="0xffffff" x="77" y="65" width="215" height="87"/> <mx:Image source="04.png" x="225" y="0" id="myImage_sleep" visible="false" /> <mx:Image source="03.png" x="225" y="0" id="myImage_wink" visible="false" /> <mx:Image source="02.png" x="225" y="0" id="myImage_bikkuri" visible="false" /> <mx:Image source="01.png" x="225" y="0" id="myImage_basic" visible="true" /> <mx:VBox visible="false"> <mx:Label id="lblAppVersion" width="300" /> </mx:VBox> </mx:WindowedApplication>