티스토리 뷰

Language/Flex

[ Flex AIR ] AIR Update

MiniNeko 2015. 11. 29. 04:33

참고 : http://blog.naver.com/skyhool?Redirect=Log&logNo=150075918526 
 
 개발후 버젼관리가 참 중요하다. 업데이트에 대해 알아보자
자동업데이트냐 수동이냐는 상황에 맞게 하면 될듯하고
여러가지 방법이 있겠지만...
 
*.air 파일이 있는 서버에 변경된 버젼정보와 다운 url 을 txt 파일로 만들어 놓자
 
예) 1.7,http://localhost:40080/AIR/Onair.air
 
어플실행시 서버쪽 버젼과 클라이언트 [Descriptor File (*-app.xml) 의 버젼]을 비교해서
틀리면 해당 파일을 URLStream 으로 읽고 FileStream 으로 써주고 해당 클라이언트 버젼을
업데이트 하면 끝난다.
 
대략소스는 다음과 같다
 
import air.update.ApplicationUpdater; 
import air.update.events.DownloadErrorEvent; 
import air.update.events.StatusUpdateErrorEvent; 
import air.update.events.StatusUpdateEvent; 
import air.update.events.UpdateEvent; 
import com.adobe.viewsource.*; 
import com.codeazur.fzip.*; 
import com.codezur.utils.*; 
 
import mx.containers.Canvas; 
 
private var _latestVersion:String; 
private var _airFileUrl:String; 
 
private function creationCompleteHandler():void { 
    var loader:URLLoader = new URLLoader(); 
    loader.addEventListener(Event.COMPLETE, completeHandler); 
    loader.load(new URLRequest(parentDocument.Aurl + "/AIR/latestversion.txt")); 

 
private function completeHandler(event:Event):void { 
    var loader:URLLoader = event.target as URLLoader; 
    _latestVersion = loader.data.split(",")[0]; 
 
    var descriptor:XML = NativeApplication.nativeApplication.applicationDescriptor; 
    var air:Namespace = descriptor.namespaceDeclarations()[0]; 
    var currentVersion:String = descriptor.air::version; 
    if(_latestVersion != currentVersion) { 
        _airFileUrl = loader.data.split(",")[1]; 
        //textArea.text = "You are running version " + currentVersion + ", However, version " + _latestVersion + " is available, Click the button to update."; 
        textArea.text = "최신 버젼이 아닙니다."; 
        updateApplication(); 
        loginbtn.enabled = false; 
        configbtn.enabled = false; 
 
        COMPANY.enabled = false; 
        USER.enabled = false; 
        PASS.enabled = false; 

    } else { 
        textArea.text = "최신 버젼입니다."; 
    } 

 
private funciton updateApplication():void { 
    trace("trace : Downloading update"); 
    var stream:URLStream = new URLStream(); 
    stream.addEventListener(ProgressEvent.PROGRESS, progressHandler); 
    stream.addEventListener(Event.COMPLETE, downloadCompleteHandler); 
    stream.load(new URLRequest(_airFileUrl)); 
    textArea.text = "최신 버젼으로 업데이트중 입니다. 기다려주세요!!!"; 

 
private function progressHandler(event:ProgressEvent):void { 
    textArea.text = "업데이트중. " + event.bytesLoaded + " of "  + event.bytesTotal + " bytes"; 

 
private function downloadCompleteHandler(event:Event):void { 
    textArea.text = "Download complete"; 
    var urlStream:URLStream = event.target as URLStream; 
    var file:File = File.desktopDirectory.resolvePath("Onair.air"); 
 
    var fileStream:FileStream = new FileStream(); 
    fileStream.open(file, FileMode.WRITE); 
    var bytes:ByteArray = new ByteArray(); 
    urlStream.readBytes(bytes); 
    fileStream.writeBytes(bytes); 
    fileStream.close(); 
    trace("trace : file : " + file + "trace : _latextVersion : " + _latextVersion); 
 
    var updater:Updater = new Updater(); 
    updater.update(file, _latextVersion); 
}  

Total
Today
Yesterday
최근에 올라온 글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31