アップデートの仕組みってどうやるんやろうなぁと調べ中。
Updating AIR applicationsを自分用に訳したけどうまく訳せてないので、本気の人は原文を参照ください。
Eclipse pluginのFlex動かしているのだけど、バージョン毎にプロジェクト組めばいいのか、プロジェクト内でバージョン増やせばいいのかよくわからない。(というか開発環境周りも勉強せな…)
以下訳(もどき)
アプリケーションのアップデートについて
Sample_App_v2.airというファイルがデスクトップにDLしてあるとして
以下のコードでアプリケーションをアップデートします。
[actionscript]
var updater:Updater = new Updater();
var airFile:File = File.desktopDirectory.resolvePath(“Sample_App_v2.air”);
var version:String = “2.01”;
updater.update(airFile, version);
[/actionscript]
Updaterクラスを使用するには最初にAIRファイルをDLしてある必要がある。
メソッドコールの結果
アプリケーションのランタイムがupdate()をコールするとランタイムはアプリを閉じる
新しいバージョンが出ていればインストールを試行する。
ランタイムはapplication ID とpublisher IDをチェックする
IDを照合して合致すればupdate()メソッドを行う。
インストールが成功すれば新しいバージョンを立ち上げる。失敗すると元のバージョンを再度立ち上げる。
Macではアプリケーションのインストールフォルダにアクセス権限があること
Windowsではadmin権限を持っていることがアップデートの条件
ADLでテストするとupdate()メソッドは例外で処理されます。(動かんてことかと)
バージョン表記について
定義ファイル内のversionノードおよび値はセキュリティ上の理由で入力は必須。
古いバージョンと見せかけてアタックされるのを防ぐため。
表記について書き方は”2.01″ or “version 2″とかデベロッパーの決定による。
Web経由でダウンロードしたアプリケーションはバージョン通知できる。
その他の方法で得たアプリケーションはバージョン情報を検査する方法がなく検査が確定できない。
AIRファイルはZipアーカイブなので拡張子をzipに変えて定義ファイル(xmlファイル)を開いて確かめるしかない。
カスタムアップデートUI
定義ファイルを変える
<customUpdateUI>true</customUpdateUI>
ユーザーマシンへのAIRファイルのダウンロード
Updaterクラスを使用するには最初にAIRファイルをDLしてある必要がある。
次のコードはURLからAIRファイルをよんでapplication storage directoryに保存する。
[actionscript]
var urlString:String = “http://example.com/air/updates/Sample_App_v2.air”;
var urlReq:URLRequest = new URLRequest(urlString);
var urlStream:URLStream = new URLStream();
var fileData:ByteArray = new ByteArray();
urlStream.addEventListener(Event.COMPLETE, loaded);
urlStream.load(urlReq);
function loaded(event:Event):void {
urlStream.readBytes(fileData, 0, urlStream.bytesAvailable);
writeAirFile();
}
function writeAirFile():void {
var file:File = File.applicationStorageDirectory.resolvePath(“My App v2.air”);
var fileStream:FileStream = new FileStream();
fileStream.addEventListener(Event.CLOSE, fileClosed);
fileStream.openAsync(file, FileMode.WRITE);
fileStream.writeBytes(fileData, 0, fileData.length);
fileStream.close();
}
function fileClosed(event:Event):void {
trace(“The AIR file is written.”);
}
[/actionscript]
アプリケーションが始めて起動されるかどうかチェックする
最初にアプリを立ち上げたら「ようこそ」などを見せたいかもしれない。
起動前に初期起動かどうかチェックしてメッセージなどを表示できます。
方法のひとつとして初期化時にアプリケーションの保管フォルダにファイルを作りこれをチェックします。
該当ファイルがないなら初期起動です。該当ファイルがあればすでに1度は起動されています。
該当ファイルのバージョンナンバーを古いものかどうか調べて
アプリケーションが最初に新しいバージョンかどうか知ることができます。
<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" title="Sample Version Checker Application" applicationComplete="init()"> <mx:Script> <![CDATA[ import flash.filesystem.*; public var file:File; public var currentVersion:String = "1.2"; public function init():void { file = File.applicationStorageDirectory; file = file.resolvePath("Preferences/version.txt"); trace(file.nativePath); if(file.exists) { checkVersion(); } else { firstRun(); } } private function checkVersion():void { var stream:FileStream = new FileStream(); stream.open(file, FileMode.READ); var prevVersion:String = stream.readUTFBytes(stream.bytesAvailable); stream.close(); if (prevVersion != currentVersion) { log.text = "You have updated to version " + currentVersion + ".\n"; } else { saveFile(); } log.text += "Welcome to the application."; } private function firstRun():void { log.text = "Thank you for installing the application. \n" + "This is the first time you have run it."; saveFile(); } private function saveFile():void { var stream:FileStream = new FileStream(); stream.open(file, FileMode.WRITE); stream.writeUTFBytes(currentVersion); stream.close(); } ]]> </mx:Script> <mx:TextArea id="log" width="100%" height="100%" /> </mx:WindowedApplication>