AIR 환경은 여타 데스크탑 어플리케이션처럼 자동 업데이트의 구현 가능을 제공합니다. 하지만 플래시로 AIR 어플리케이션을 제작할 때는 자동 업데이트를 구현할 수 있는 컴포넌트가 플래시 내에 없기 때문에 플렉스 SDK의 컴포넌트들을 가져와야 합니다. 업데이트를 구현하기 위해 SDK에서 가져올 최소한의 컴포넌트는 ApplicationUpdaterUI이며 이 컴포넌트를 가져오는 방법은 아래와 같습니다.
- File > Publish Settings 선택
- 컴파일 세팅 패널에서 Flash탭 클릭
- Player: Adobe AIR 1.5 / Script: Action Script 3.0 선택
- Script 텍스트 창 옆에 [Settings...] 버튼 선택
- Library Path 탭 선택
- [+]버튼 (Add New Path) 선택하여 새 주소창 영역 만든 후 Browse to SWC file 버튼 클릭
- 파일 선택 패널로 컴포넌트 선택
(Flex SDK가 있는 폴더)\frameworks\libs\air\applicationupdater_ui.swc
이렇게 컴포넌트를 가져온 후에 사용하는 방법의 예는 아래와 같습니다.
import air.update.ApplicationUpdaterUI;
//그분 모셔오기
var exampleUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI();
// 업데이트 폼 객체 생성
var configFile:File = new File("app:/update-config.xml");
// 설정 정보를 담은 xml파일을 File 객체로 생성
exampleUpdater.configurationFile = configFile;
// xml에 담긴 설정 정보를 업데이트 폼 객체에 적용
exampleUpdater.initialize();
//설정 정보에 맞춰 업데이트 폼 객체의 초기화
업데이트 설정 정보를 담은 update-config.xml는 AIR 패키지를 생성할 때 함께 추가되어 배포될 것입니다. 이 xml 파일은 사용자의 컴퓨터에 설치되어 해당 어플리케이션이 업데이트 정보를 어떻게 확인하고 어디서 확인하는지에 대한 정보를 담고 있습니다. XML 구조는 아래와 같습니다.
<configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0" >
<url>'update-descriptor.xml'이 있는 경로</url>
<!-- 최신 업데이트가 있는지 확인할 수 있는 서버측 xml //-->
<delay>1</delay>
<defaultUI>
<dialog name="checkForUpdate" visible="true" />
<dialog name="downloadUpdate" visible="true" />
<dialog name="downloadProgress" visible="true" />
<dialog name="installUpdate" visible="true" />
<dialog name="fileUpdate" visible="true" />
<dialog name="unexpectedError" visible="true" />
<!-- 상기 설정에 관한 자세한 정보는 검색을 이용 | 일단 모두 true 설정 //-->
</defaultUI>
</configuration>
이렇게 사용자 컴퓨터는 이 xml 설정 정보를 이용해 최신 업데이트가 있는지 확인합니다. 하지만 최신 업데이트가 있는지 확인할려면 서버측에도 업데이트 정보를 가지고 있어야겠지요? 이 역활을 해주는 것이 update-descriptor.xml입니다. 내용은 아래와 같습니다.
<update xmlns="http://ns.adobe.com/air/framework/update/description/1.0">
<version>1.0</version>
// 버전 설정 | 사용자 컴퓨터는 이 버전의 숫자로 파일의 버전을 식별
<url>최신 업데이트용 패치 파일 *.air</url>
<description><![CDATA[
업데이트 내용을 서술하는 곳 | 릴리즈 정보로 나오게 됨
]]></description>
</update>
이제 업데이트 구현을 위한 기본적인 구색은 갖춰졌습니다만 한가지 문제가 있습니다. 서버측에서 최신 버전을 확인하기 위해선 checkNow()라는 함수를 사용하는데 이것을 사용할 때는 initialize() 함수를 실행한 후 서버측 요청이 끝나야 사용가능하다는 것입니다. 쉽게 설명드리자면...
exampleUpdater.checkNow();
이렇게 하면 작동이 안된다는 것이지요. 이 문제를 해결하기 위해서는
- [업데이트 확인]이라는 버튼을 따로 만들어서 이 버튼을 클릭할 경우에 checkNow()를 실행시키거나 (이 버튼을 클릭할 때에는 이미 업데이트 객체의 initialize가 완료되어 있으므로)
- Timer객체를 이용하여 일정 시간 이후에 실행되거나
둘중 하나를 선택해야할 것입니다.
저 같은 경우엔 1분 간격으로 서버의 update-descriptor.xml에서 version정보를 주기적으로 읽어들여 사용자 컴퓨터의 버전 정보와 비교 후 같으면 checkNow() 함수가 실행되게 해놨습니다. 자세한건 설명드리 않겠습니다.(나도 먹고 살아야지;;) 한가지 힌트를 드리자면...
NativeApplication.nativeApplication.applicationDescriptor를 이용해서 해당 어플리케이션의 버전과 이름 정보를 xml로 return 받을 수 있습니다. 여기서 버전 정보를 추출해 서버측 update-descriptor.xml의 버전 정보를 비교하면 되는 것이지요.
건투를 빕니다.
참고 자료 : http://www.adobe.com/devnet/air/flash/quickstart/update_framework.html
'UI 개발' 카테고리의 다른 글
| 플래시 AIR 어플리케이션 자동 업데이트 구현 (0) | 2009/07/08 |
|---|---|
| 프로젝트 일정표 작성 방법 (3) | 2008/11/27 |
| 플렉스 개발자를 채용하는 방법 (번역율 40%) (0) | 2008/08/15 |
| 진정으로 부지런하다는 것 - IT 세계에 처음 발을 디딘 신입들에게 - (0) | 2008/07/18 |
| 플래시플레이어 10 버전과 플래시 CS4에 관련된 블로그 기사 (0) | 2008/02/29 |




댓글을 달아 주세요