Updating AIR applications自分用メモ

アップデートの仕組みってどうやるんやろうなぁと調べ中。
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>
        <!&#91;CDATA&#91;
            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();
            }
        &#93;&#93;>
    </mx:Script>
    <mx:TextArea id="log" width="100%" height="100%" />
</mx:WindowedApplication>

関連する記事:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

名前 *