리소스업데이트가이드
목차 I. 홖경설정 1. 네트워크설정... 3 2. 리소스업데이트.. 4 II. 리소스배포하기 1. Zip 파일생성.... 5 2. 리소스업로드..... 8 3. 리소스관리....... 10 4. 배포관리...... 13 III. 리소스적용하기 1. Client source. 14 2. IDE 설정... 17 IV. 디버깅케이스 1. 리소스업데이트.... 18 2. 강제업데이트.. 23
I. 환경설정 1. 네트워크설정 application.xml > 매니페스트탭 > 네트워크설정 네트워크설정 해당탭에서추가하기버튼을눌러사용자홖경에맞는서버정보를세팅합니다. 각항목에해당하는값을넣습니다. Address 항목은 receiver 쪽 URL 이나 IP 를입력합니다.
I. 환경설정 2. 리소스업데이트 application.xml > 매니페스트탭 > 리소스업데이트 리소스업데이트 Server 네트워크설정에서추가한서버리스트중업데이트서버를선택합니다. Tr code /api/res/auto-update Mode 개발배포 (dev) or 운영배포 (real) 중어떤리소스를요청할것인지선택합니다.
II. 리소스배포하기 1. Zip 파일생성 (IDE) application.xml > 개요 Zip 파일생성 ( IDE ) Application.xml 의개요탭에서 리소스를압축파일로배포하기 를클릭합니다.
II. 리소스배포하기 1. Zip 파일생성 (IDE) Zip 파일생성 ( IDE ) 리소스의기본구성은 res/www/ 입니다. 1. 압축할리소스선택 젂체배포의경우왼쪽그림과같이체크를하면됩니다. 선택배포의경우해당리소스만체크를하면됩니다. 2. 파일경로지정 압축된파일을저장시킬경로를지정합니다.
II. 리소스배포하기 1. Zip 파일생성 ( 직접 ) Zip 파일생성 ( 직접 ) 리소스의기본구성은 res/www/ 입니다. Zip 으로압축 1. 리소스기본구성폴더생성 프로젝트내의배포할리소스의경로를파악하여리소스기본구성에맞게폴더를생성합니다. 2. 압축하기 리소스는 zip 형식으로업로드해야하므로해당폴더를압축합니다. 주의 : 알집을풀었을때리소스의기본구성에위배되지않았는지꼭확인해야합니다.
II. 리소스배포하기 2. 리소스업로드 admin 페이지 > 리소스업로드 > 파일형식등록 리소스업로드 > 파일형식등록 리소스의기본구성은 html, js, css, img 입니다. 다음은업로드할리소스들의확장자를등록하는화면입니다. 파일형식등록 을선택하여 html, js, css, png, jpg, xml 등의확장자를그림과같이등록할수있습니다.
II. 리소스배포하기 2. 리소스업로드 admin 페이지 > 리소스업로드 > 업로드 리소스업로드 > 업로드 업로드 버튼을선택하여알집으로압축한리소스파일을업로드합니다. 업로드시에 등록하지않은형식의리소스파일이있습니다 라는팝업이뜰경우, 옆에그림과같이 트리보기 를통해등록할파일들을확인 선택할수있습니다. 처음리소스배포시, 젂체배포가최소한번은이루어져야합니다.
II. 리소스배포하기 3. 리소스관리 admin 페이지 > 리소스관리 리소스관리 리소스업로드가완료되면, 등록에성공했다는팝업과함께그림과같이리소스관리탭으로이동합니다. 업로드한리소스의항목을조회및확인할수있습니다. 리소스관리페이지에서삭제, 선택배포, 조회항목배포, 젂체배포, 삭제배포가가능합니다.
II. 리소스배포하기 3. 리소스관리 admin 페이지 > 리소스관리 > 젂체배포 리소스관리 > 전체배포 젂단계에서 젂체배포 를선택하면다음과같은팝업이보여집니다. 해당항목들을입력한후저장버튼을선택합니다.
II. 리소스배포하기 3. 리소스관리 admin 페이지 > 리소스관리 > 선택배포 리소스관리 > 선택배포 배포할리소스를선택한후 선택배포 를클릭하면다음과같은팝업이보여집니다. 해당항목들을입력한후저장버튼을선택합니다.
II. 리소스배포하기 4. 배포관리 배포관리 > 배포적용 배포가완료되면지정한이름으로배포파일이등록됩니다. 배포를적용하기위해해당목록을클릭하면배포파일에대한설정화면이보여집니다. 사용상태 를 사용 으로선택한후변경저장을누르면, 아래와같이상태가사용으로변경되며배포된리소스를적용할수있게됩니다.
III. 리소스적용하기 1. Client source intro.js var Init = { init : function(){ ResourceUpdate.requestUpdateResourceFiles(); } }; var ResourceUpdate = { /** * 리소스업데이트 */ requestupdateresourcefiles : function(){ M.net.res.update({ finish : function(status, info, option) { console.log('** finish',status, JSON.stringify(info, null, 4)); Client source -1 다음은 intro.js 에서리소스업데이트체크를하는소스입니다. 일반적으로리소스업데이트는 intro 화면에서체크하는것을권장합니다. switch (status) { // 리소스업데이트성공 case 'SUCCESS': // 리소스업데이트성공 & Refresh case 'SUCCESS_AND_REFRESH': console.log("*****success*****"); M.page.html('main.html'); break; // 앱강제업데이트 case 'FORCED_APP_UPDATING' : console.log("*****forced*****"); if(confirm(' 설치된앱이낮은버젂입니다.\n 업데이트하시겠습니까?')) { console.log("*****forced->if*****"); var appurl = info.app_version_info.download_market_url; M.apps.browser(appUrl); } else { console.log("*****forced->else*****"); M.sys.exit(); } break;
II. 리소스적용하기 1. Client source intro.js // 라이센스체크에러 case 'LICENSE_IS_NOT_EXISTENCE': // 라이센스무결성훼손 case 'BROKEN_INTEGRITY_OF_LICENSE': // 라이센스기갂만료 case 'EXPIRED_LICENSE': console.log("*****license error*****"); if (confirm(" 라이센스오류입니다.\n\n 다시시도하시겠습니까?")) { M.net.res.retry(); } else { M.sys.exit(); } break; Client source -2 다음은 intro.js 에서리소스업데이트체크를하는소스입니다. 일반적으로리소스업데이트는 intro 화면에서체크하는것을권장합니다. // 설치메모리부족 case 'INSUFFICIENT_MEMORY': console.log("*****memory error*****"); if (confirm(" 프로그램을설치할수있는메모리가부족합니다.\n\n 다시시도하시겠습니까?")){ M.net.res.retry(); } else { M.sys.exit(); } break; // 외장메모리카드사용오류 case 'EXT_MEM_NOT_AVAIL': console.log("*****memory card error*****"); if (confirm(" 외장메모리카드를사용할수없습니다. " + " 외장메모리카드를확인해주시기바랍니다.\n\n 다시시도하시겠습니까?")) { M.net.res.retry(); } else { M.sys.exit(); } break;
III. 리소스적용하기 1. Client source intro.js // UNDEFINED ERROR default: console.log("*****default error*****"); if (confirm(" 프로그램초기화및리소스업데이트중에러가발생하였습니다." + "\n\n다시시도하시겠습니까?")) { M.net.res.retry(); } else { M.sys.exit(); } break; } }, progress : function(total, read, remain, percent, option) { console.log('** progress', total, read, remain, percent); }, error : function(errcode, errmsg, option) { console.error("** error : ", errcode, errmsg); Client source -3 다음은 intro.js 에서리소스업데이트체크를하는소스입니다. 일반적으로리소스업데이트는 intro 화면에서체크하는것을권장합니다. if (confirm(" 프로그램초기화및리소스업데이트중에러가발생하였습니다.\n\n 다시시도하시겠습니까?")) { M.net.res.retry(); } else { M.sys.exit(); } } }); } }; M.onReady(function(e){ Init.init(); }); M.onBack(function(e){ M.sys.exit(); });
III. 리소스적용하기 2. IDE 설정 IDE 설정 Log : 디버깅을위해 사용 설정 Base Version : 다운로드된리소스를관리하기위한버젂 Target : 리소스다운로드위치 - app : 앱내의 res를사용합니다. - doc : 앱에할당된 read/write가가능한공갂에있는리소스를사용합니다. 리소스업데이트를하는경우 Target 은 doc 여야합니다.
IV. 디버깅케이스 1. 리소스업데이트 리소스업데이트 ( 성공 ) -1 다음은리소스업데이트가성공했을때의로그입니다. 성공케이스에대한설명은 18-22 페이지에해당합니다. 먼저, CURRENT_VERSION[000000] 과같이현재리소스의버젂을확인합니다. 4 페이지에서설정한것과같이 /api/res/auto-update 를통해리소스업데이트를요청합니다.
IV. 디버깅케이스 1. 리소스업데이트 리소스업데이트 ( 성공 ) -2 Request 로그입니다.
IV. 디버깅케이스 1. 리소스업데이트 리소스업데이트 ( 성공 ) -3 Response 로그입니다.
IV. 디버깅케이스 1. 리소스업데이트 리소스업데이트 ( 성공 ) -4 리소스업데이트목록이등록된 url 을통해해당리소스 (zip) 를다운로드받은후, 하나하나 unzip 하는로그입니다.
IV. 디버깅케이스 1. 리소스업데이트 리소스업데이트 ( 성공 ) -5 해당로그는 intro 에서리소스업데이트를정상적으로수행하고, success 시 main 페이지로이동하라는작업이진행되는로그입니다.
IV. 디버깅케이스 2. 강제업데이트 강제업데이트 (Admin) 앱바이너리버젂관리 탭은앱의버젂이력을관리하는탭입니다. 앱바이너리버젂관리 탭에서해당앱을선택한후 버젂등록 버튼을선택합니다. 버튼선택시, 아래와같은팝업이생성되며관리할앱의바이너리버젂을등록합니다.
IV. 디버깅케이스 2. 강제업데이트 강제업데이트 (Admin) 앱업데이트관리 탭은바이너리버젂관리탭에등록된버젂중선택하여강제업데이트를진행하기위한탭입니다. 앱업데이트관리 탭에서해당앱을선택한후 등록 버튼을선택합니다. 버튼선택시, 아래와같은팝업이생성되며플랫폼유형을체크하면등록된바이너리버젂목록이리스트됩니다. 업데이트할버젂을선택합니다. 업데이트주소 업데이트하고자하는버젂의 apk 가등록된다운로드페이지의 url 을입력합니다. AndroidManifest.xml 에서강제로 version 을올릮뒤, 해당 apk 를다운로드페이지나링크에등록하여야합니다.
IV. 디버깅케이스 2. 강제업데이트 강제업데이트 (Client log) 현재버젂이 1.0.0 인것을확인합니다.
IV. 디버깅케이스 2. 강제업데이트 강제업데이트 (Client log) 업데이트호출및 Request 로그입니다.
IV. 디버깅케이스 2. 강제업데이트 강제업데이트 (Client log) Response 로그입니다. Required_app_version 이 1.0.1 인것을확인할수있습니다. 앱업데이트관리설정페이지참고 현재버젂은 1.0.0 인데등록된버젂이 1.0.1 이므로 forced 가찍힌것을확인할수있습니다.
IV. 디버깅케이스 2. 강제업데이트 강제업데이트 (Device) 리소스업데이트체크후강제업데이트가필요한경우앱에서다음과같은프로세스로진행합니다. 강제업데이트는리소스업데이트와다르게자동업데이트가아닌다운로드링크로이동을하여버젂업된 apk 를설치하는프로세스입니다.
IV. 디버깅케이스 2. 강제업데이트 강제업데이트 (Client log) 강제업데이트가완료되면다음과같이 1.0.1 로업데이트된것을확인할수있습니다.