アップデータがある場合であっても、
アプリケーションは通常起動するという流れの
ApplicationUpdaterUIの説明紹介が多いんですけど、
アップデータがある場合は、通常の起動をしない流れを考えてみる。
つまりは、アップデートしないと起動できないタイプのアプリケーション。
ただし、勝手にアップデートしちゃうんじゃなくて
ユーザアクションによってインストールへもっていく流れ。
要件はこんな感じ
・アップデータがある場合、アプリケーションは起動をしない。
・アップデータがない場合、通常起動する。
・アップデート作業中の画面インタフェースを閉じられた場合は
アプリケーションを閉じる、またはメッセージを表示する
で、最初にまず、CS4で air.update.ApplicationUpdaterUI を使えるようにする準備。
ライブラリパスに applicationupdater_ui.swc を通します。
applicationupdater_ui.swcは、CS4ディレクトリ内にすでにあります。
C:\Program Files\Adobe\Adobe Flash CS4\AIK1.5\frameworks\libs\air\applicationupdater_ui.swc
CS4、FlashDevelop への登録方法はこちらで説明しています。
CS4:
・CS4:Flashコンポーネント(.swc)をライブラリパスに登録する (個別)
・CS4:Flashコンポーネント(.swc)をライブラリパスに登録する (共通)
FlashDevelop:
・FlashDevelop: Flashコンポーネント(.swc)をライブラリパスに登録する
以上登録したら、air.update.ApplicationUpdaterUI が使えるようになる。
続いて、ApplicationUpdaterUIに入っていく。
ApplicationUpdaterUIのXMLの設定など、基本的な細かいところは
こちらのページなどが参考になりました。
Adobe AIR Update Frameworkを使ってみる
要件を考え実装はこんな感じ。
※コード内コメントあり
”後でダウンロード” ボタンが押された時のイベントが取れなかったり
ちょっと微妙な部分が多くて微妙なイメージです。
ApplicationUpdaterUIがユーザによって閉じられたときのイベントがないっぽいです;;
うーこまった。
-
package
-
{
-
-
import flash.display.NativeWindow;
-
import flash.events.*;
-
import air.update.ApplicationUpdaterUI;
-
import air.update.events.UpdateEvent;
-
import air.update.events.StatusUpdateEvent;
-
import air.update.events.StatusUpdateErrorEvent;
-
import air.update.events.DownloadErrorEvent;
-
import air.update.events.StatusFileUpdateErrorEvent;
-
import flash.desktop.NativeApplication;
-
-
public class MyApplicationUpdater
-
{
-
-
private var oApplicationUpdaterUI:ApplicationUpdaterUI
-
private var updateURL:String = "http://example.com/app/update.xml";
-
-
public function MyApplicationUpdater() {
-
initializeAndCheck()
-
}
-
-
public function initializeAndCheck() {
-
oApplicationUpdaterUI = new ApplicationUpdaterUI();
-
-
if (oApplicationUpdaterUI.isFirstRun) {
-
//アップデート後 初めての起動の場合
-
//アップデートはないと考え通常起動へ
-
// [ 実装 ]
-
return;
-
}
-
-
oApplicationUpdaterUI.addEventListener(StatusUpdateEvent.UPDATE_STATUS, onUpdateStatus);
-
oApplicationUpdaterUI.addEventListener(UpdateEvent.INITIALIZED, onInitialized);
-
-
//Error handling
-
oApplicationUpdaterUI.addEventListener(DownloadErrorEvent.DOWNLOAD_ERROR, onDownloadError);
-
oApplicationUpdaterUI.addEventListener(ErrorEvent.ERROR, onError);
-
oApplicationUpdaterUI.addEventListener(StatusFileUpdateErrorEvent.FILE_UPDATE_ERROR, onFileUpdateError);
-
oApplicationUpdaterUI.addEventListener(StatusUpdateErrorEvent.UPDATE_ERROR, onUpdateError);
-
-
oApplicationUpdaterUI.updateURL = updateURL;
-
oApplicationUpdaterUI.delay = 1;
-
oApplicationUpdaterUI.isCheckForUpdateVisible = false;
-
//oApplicationUpdaterUI.isDownloadUpdateVisible = false;
-
//oApplicationUpdaterUI.isFileUpdateVisible = false;
-
//oApplicationUpdaterUI.isInstallUpdateVisible = false;
-
//oApplicationUpdaterUI.isUnexpectedErrorVisible = false;
-
-
oApplicationUpdaterUI.initialize();
-
-
}
-
-
//初期化が完了した後に送出されます。
-
private function onInitialized(e:UpdateEvent) {
-
trace(e);
-
-
//アップデート画面を閉じられたときのハンドリングを設定
-
var nw:NativeWindow = NativeApplication.nativeApplication.openedWindows[NativeApplication.nativeApplication.openedWindows.length - 1] as NativeWindow;
-
nw.addEventListener(Event.CLOSING, onClosing); //なぜか Event.CLOSE は呼ばれないみたい
-
-
oApplicationUpdaterUI.checkNow();
-
}
-
-
//Updater が更新記述ファイルを正常にダウンロードして解釈した後で送出されます。
-
private function onUpdateStatus(e:StatusUpdateEvent) {
-
trace(e);
-
if (!e.available) {
-
destroy();
-
//アップデートはないので通常起動へ
-
// [ 実装 ]
-
}
-
}
-
-
private function onClosing(e:Event) {
-
trace(e);
-
//アップデート画面を閉じられたため、アプリケーションを終了へ
-
//メッセージを表示してあげるの親切かも
-
// [ 実装 ]
-
}
-
-
/* Error Handler */
-
-
//接続中または更新ファイルのダウンロード中にエラーが発生した場合に送出されます。
-
private function onDownloadError(e
ownloadErrorEvent) { -
trace(e);
-
//エラーが発生、起動できない旨をメッセージ表示する
-
// [ 実装 ]
-
}
-
-
//初期化中または更新処理中にエラーが発生した場合 (何か予期しないことが発生した場合) に送出されます。
-
private function onError(e:ErrorEvent) {
-
trace(e);
-
//エラーが発生、起動できない旨をメッセージ表示する
-
// [ 実装 ]
-
}
-
-
//airFile パラメータ(installFromAIRFile() メソッドの呼び出し)として渡されたファイルの検証でエラーが発生した場合に送出されます。
-
private function onFileUpdateError(e:StatusFileUpdateErrorEvent) {
-
trace(e);
-
//エラーが発生、起動できない旨をメッセージ表示する
-
// [ 実装 ]
-
}
-
-
//更新記述ファイルをダウンロードまたは解析しようとしてエラーが発生した場合に送出されます。
-
private function onUpdateError(e:StatusUpdateErrorEvent) {
-
trace(e);
-
//エラーが発生、起動できない旨をメッセージ表示する
-
// [ 実装 ]
-
}
-
-
public function destroy() {
-
oApplicationUpdaterUI.removeEventListener(DownloadErrorEvent.DOWNLOAD_ERROR, onDownloadError);
-
oApplicationUpdaterUI.removeEventListener(ErrorEvent.ERROR, onError);
-
oApplicationUpdaterUI.removeEventListener(StatusFileUpdateErrorEvent.FILE_UPDATE_ERROR, onFileUpdateError);
-
oApplicationUpdaterUI.removeEventListener(StatusUpdateErrorEvent.UPDATE_ERROR, onUpdateError);
-
-
oApplicationUpdaterUI.removeEventListener(UpdateEvent.INITIALIZED, onInitialized);
-
oApplicationUpdaterUI.removeEventListener(StatusUpdateEvent.UPDATE_STATUS, onUpdateStatus);
-
}
-
-
}
-
}
7月 14, 2009 at 10:47 PM




私をフォローしてください. @quqjp





