Morpheus Document
Transcription
Morpheus Document
Morpheus Document Release Lastest UracleLab Jun 15, 2016 About Morpheus i ii Morpheus Document, Release Lastest The main documentation. • About Morpheus • client-docs All Morpheus Products Documentations. About Morpheus 1 Morpheus Document, Release Lastest 2 About Morpheus CHAPTER 1 Overview 1.1 모피어스 소개 – – 3 Morpheus Document, Release Lastest 4 Chapter 1. Overview Morpheus Document, Release Lastest 1.1. 모피어스 소개 5 Morpheus Document, Release Lastest 6 Chapter 1. Overview Morpheus Document, Release Lastest 1.1. 모피어스 소개 7 Morpheus Document, Release Lastest 8 Chapter 1. Overview Morpheus Document, Release Lastest 1.1. 모피어스 소개 9 Morpheus Document, Release Lastest 10 Chapter 1. Overview Morpheus Document, Release Lastest 1.1. 모피어스 소개 11 Morpheus Document, Release Lastest 12 Chapter 1. Overview Morpheus Document, Release Lastest 1.1. 모피어스 소개 13 Morpheus Document, Release Lastest 14 Chapter 1. Overview Morpheus Document, Release Lastest 1.1. 모피어스 소개 15 Morpheus Document, Release Lastest 16 Chapter 1. Overview Morpheus Document, Release Lastest 1.1. 모피어스 소개 17 Morpheus Document, Release Lastest 18 Chapter 1. Overview Morpheus Document, Release Lastest 1.1. 모피어스 소개 19 Morpheus Document, Release Lastest 20 Chapter 1. Overview CHAPTER 2 API 2.1 Core Core Library 를 MCore 라고 부른다. 2.1.1 MCore MCore Framework 에 대한 필수 API 를 정의 Common Event • 화면 Page 의 생성,이동,제거 시 WebView의 Native 상태에 따라서 Event 함수들이 자동으로 호출 • 각 Event 함수들은 중복으로 여러개 등록이 가능하며, 사용하려고 하는 함수들만 등록 하여 사용 M.onReady(handler) Changed in version 2.1.0. Arguments • handler (Function) – Event Handler handler(event) Arguments • event (Page Event Object) – 이벤트 객체 •화면 로딩이 최종 완료시 한번만 호출 •데이타 초기화, 서버로의 데이타 요청 등에 사용 •iframe 등 으로 외부 페이지 오픈시 iframe 내 페이지까지 모두 완료되야 호출됨 •DOM Content Loaded 와는 별개로 동작함 Example: M.onReady( function(e) { // TODO : ready event handle code here }); M.onHide(handler) Changed in version 2.1.0. 21 Morpheus Document, Release Lastest Arguments • handler (Function) – Event Handler handler(event) Arguments • event (Page Event Object) – 이벤트 객체 •화면 이동 바로 현재 페이지에서 호출 •현재 화면의 데이타 저장 및 처리 등에 사용 Example: M.onHide( function(e) { // TODO : hide event handle code here }); M.onRestore(handler) Changed in version 2.1.0. Arguments • handler (Function) – Event Handler handler(event) Arguments • event (Page Event Object) – 이벤트 객체 •해당 화면으로 다시 돌아왔을 때 호출 •데이타 갱신 등에 사용 Example: M.onRestore( function(e) { // TODO : restore event handle code here }); M.onBack(handler) Changed in version 2.1.0. Arguments • handler (Function) – Event Handler handler(event) Arguments • event (Page Event Object) – 이벤트 객체 •단말기에서 Back 키가 눌려졌을때 호출 (Only Android) Example: M.onBack( function(e) { // TODO : back event handle code here (android only) }); 22 Chapter 2. API Morpheus Document, Release Lastest M.onPause(handler) Changed in version 2.1.0. Arguments • handler (Function) – Event Handler handler(event) Arguments • event (Page Event Object) – 이벤트 객체 •현재 앱이 Background 상태로 바뀔때 현재 화면에서 호출 Example: M.onPause( function(e) { // TODO : pause event handle code here }); M.onResume(handler) Changed in version 2.1.0. Arguments • handler (Function) – Event Handler handler(event) Arguments • event (Page Event Object) – 이벤트 객체 •Bakcground 상태의 앱이 다시 Forground 상태로 바뀔때 현재 화면에 호출 Example: M.onResume( function(e) { // TODO : resume event handle code here }); M.onDestroy(handler) Changed in version 2.1.0. Arguments • handler (Function) – Event Handler handler(event) Arguments • event (Page Event Object) – 이벤트 객체 •화면이 메모리에서 제거될때 마지막으로 호출 •데이타 보존이나 마무리를 위한 처리 등에 사용 •단, 앱의 종료시에는 호출되지 않음 Example: 2.1. Core 23 Morpheus Document, Release Lastest M.onDestroy( function(e) { // TODO : destroy event handle code here }); Event Flow Event Flow Navigator Object M.navigator.os() M.navigator.os(os) Return type Boolean M.navigator.device() {os: “iOS”, version: “9.2.1”, tablet: false, mobile: true} M.navigator.device(os, version) Return type Boolean Example: if ( M.navigator.device("ios") == true ) { // iOS인 경우 if ( M.navigator.device("ios", "9") == true ) { // iOS 9 버전인 경우 } } M.navigator.browser() {name: “other”, version: “”} M.navigator.browser(name, version) Return type Boolean Page API 화면 이동에 대한 API 를 제공 Action Type Type NEW_SCR NO_HISTORY CLEAR_TOP 24 Int 0 1 2 Description 대상이 되는 화면을 추가 대상이 되는 화면을 Stack 에 포함하지 않음 대상이 되는 이전 화면으로 이동. 이동시 현재 화면 사이의 모든 화면은 제거됨. Chapter 2. API Morpheus Document, Release Lastest Orientation Type • 모든 Orientation 값은 Application 설정에 영향을 받음 • Manifest.xml 에서도 orient 값이 DEFAULT 인 경우 Application 설정의 첫번째 값을 적용 Type DEFAULT PORTRAIT PORT LANDSCAPE LAND PORTRAIT|REVERSE PORT|REVERSE PORTREV LANDSCAPE|REVERSE LAND|REVERSE LANDREV ALL Int 0 1 1 2 2 3 3 3 4 4 4 5 Description Manifest.xml 에서 설정한 orient 값 적용 세로모드, 홈버튼이 아래인 세로 방향으로 회전 유지 PORTRAIT 을 축약 가로모드, 왼쪽 회전된 상태 유지 LANDSCAPE 를 축약 세로모드, 세로 방향만 허용, 회전 가능 PORTRAIT 을 축약 PORTRAIT|REVERSE 를 축약 가로모드, 가로 방향만 허용, 회전 가능 LANDSCAPE 를 축약 LANDSCAPE|REVERSE 를 축약 모든 방향으로 허용 Animation Type • Manifest.xml 에서도 animate 값이 DEFAULT 인 경우 SLIDE_LEFT 적용 Type DEFAULT NONE SLIDE_LEFT SLIDE_RIGHT SLIDE_TOP SLIDE_BOTTOM ZOOM_IN ZOOM_OUT FADE MODAL_UP MODAL_DOWN Int 0 1 2 3 4 5 6 7 8 9 10 Description Manifest.xml 에서 설정한 animate 값 적용 애니메이션 효과 없음 왼쪽으로 이동되는 슬라이드 효과 오른쪽으로 이동되는 슬라이드 효과 위쪽으로 이동되는 슬라이드 효과 아래쪽으로 이동되는 슬라이드 효과 줌인 효과 줌아웃 효과 페이드 효과 원본 화면은 고정되어 있고 대상 화면만 위쪽으로 이동되는 슬라이드 효과 원본 화면은 고정되어 있고 대상 화면만 아래쪽으로 이동되는 슬라이드 효과 Page Event Object • 현재 화면 정보를 담은 이벤트 객체 2.1. Core 25 Morpheus Document, Release Lastest Key action orient params path filename alias source browser browserVer device device.mobile device.tablet device.os device.version os osVer screenWidth screenHeight scrollWidth scrollHeight stack tabStack time Type String String Object String String String String String String Object Boolean Boolean String String String String Int Int Int Int Array Object Int Description Page Action ( Action Type ) Page Orientation ( Orientation Type ) Page Parameters, Event 발생시 현재 Page의 Parameters 값 (허용 사이즈 : 1Mb) Page 경로값 Page 의 파일명 Page 의 Alias 경로 Page 의 Source 경로 Brower Name Browser Version Device 정보 Mobile 여부 Tablet 여부 OS 값 ( ios: iOS, android: Android ) OS Version 값 device.os 값을 항상 소문자로 출력 device.version 과 동일 Screen Width Screen Height Content Width Content Height Stack 정보 현재 Stack의 Tab 정보 화면이 생성되고 경과된 시간 ( 1Sec = 1000 ) URL Rule • 페이지 경로는 html 파일 명으로 하여 이동 • 다른 폴더의 접근은 현제 페이지에서 상대경로로 호출하여 이동 가능 • 절대경로로 호출하는 경우 “www/html” 를 시작으로 호출(예: “www/html/sample.html” ) • 외부 웹페이지 경로인 경우 http:// 또는 https:// 를 포함한 경로로 호출 • 현재 페이지가 외부 페이지 인 경우 현재 페이지에서 상대경로로 이동 가능 Native Class Name Rule • Class 명은 namespace 를 제외한 이름만을 가지고 호출 • namespace 는 제외하므로 App 내 해당 Class 는 1개만 존재해야됨. • 호출할 Native Class는 아래 개체를 상속해야됨. • Android 의 경우는 BaseActivity • iOS 의 경우는 PPNativeViewController Page Info M.page.info() New in version 2.1.5. Returns Page Event Object 26 Chapter 2. API Morpheus Document, Release Lastest •Page 정보 추출 Example: M.page.info(); M.page.info(keyPath) New in version 2.1.5. Arguments • keyPath (String) – Page Event Object 의 Key 값 Returns Page Event Object •Page Event 객체의 Key 에 해당하는 값만 을 출력 Example: // OS 구분 if ( M.page.info("device.os") == "iOS" ) { // this is iOS } else if ( M.page.info("device.os") == "Android" ) { // this is Android } // OS 와 Version 확인 if ( M.page.info("os") == "ios" && M.page.info("device.version") < "7.0" ) { // iOS 7.0 미만인 경우 처리 } // Event 시간 활용 if ( M.page.info("time") > 60 * 60 ) { // iOS 7.0 미만인 경우 처리 } Page Defer M.page.defer(enabled[, time ]) New in version 2.1.1. Arguments • enabled (Boolean) – 지연 이동 기능 사용 여부 • time (Int) – 지연할 시간 •화면의 지연 이동 기능을 제어 Example: // 0.5초 후 페이지 이동을 실행 M.page.defer(true, 500); // 지연 실행기능을 끔 M.page.defer(false); 2.1. Core 27 Morpheus Document, Release Lastest Page 호출 M.page.html(options) Changed in version 2.1.2. Arguments • options (Object) – 설정 값 • options.url (String) – 이동할 Page 위치값, URL Rule, 필수 값 • options.param (String or Object) – Parameter 값 • options.actionType (Action Type) – History Action Type, Default: ‘NEW_SCR’ • options.animation (Animation Type) – Animation Type, Default: ‘DEFAULT’ • options.orientation (Orientation Type) – Orientation Type, Default: ‘DEFAULT’ • options.delay (Int) – After Delay ( 1Sec = 1000 ), Default: 0 • options.force (Boolean) – 현재페이지가 아닌 경우에도 페이지 이동 실행 허용, Default: false Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • path = url • params = param • parameter = param • parameters = param • action = actionType • animate = animation • animationType = animation • orientationType = orientation Example: •전체 옵션 적용 M.page.html({ url: "sample.html", param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" }, actionType: "NEW_SRC", animation: "DEFAULT", orientation: "DEFAULT", delay: 0, force: false }); •기본값 생략 M.page.html({ url: "sample.html", param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" } }); 28 Chapter 2. API Morpheus Document, Release Lastest •NO History 적용 M.page.html({ url: "skip.html", actionType: "NO_HISTORY" }); M.page.html(url, options) Changed in version 2.1.0. Arguments • url (String) – 이동할 Page 위치값, URL Rule, 필수 값 • options (Object) – 설정값 동일 Example: •페이지 명만 적용 M.page.html("sample.html"); •옵션 적용 M.page.html("sample.html", { param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" } }); •화면 이동 M.page.html('page-html-terminal.html'); •화면 이동 (URL) M.page.html('http://m.naver.com'); •화면 이동 (Animation) M.page.html('page-html-terminal.html', { 'animate': 'SLIDE_TOP' }); •화면 이동 (Action) M.page.html('page-html-terminal.html', { 'animate': 'SLIDE_RIGHT', 'action': 'NO_HISTORY' }); •화면 이동 (Orientation) M.page.html('page-html-terminal.html', { 'animate': 'SLIDE_TOP', 'orient': 'LAND', 'action': 'NO_HISTORY' }); 2.1. Core 29 Morpheus Document, Release Lastest •화면 이동 (Parameter) //허용 사이즈 : 1Mb (android bundle 허용 size) M.page.html('page-html-terminal.html', { 'param': { 'a':'1', 'b':'2', 'c':'3' } }); Page Back M.page.back(options) Changed in version 2.1.0. Arguments • options (Object) – 설정 값 • options.param (String or Object) – Parameter 값 • options.animation (Animation Type) – Animation Type, Default: ‘DEFAULT’ Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • params = param • parameter = param • parameters = param • animate = animation • animationType = animation Example: •전체 옵션 적용 M.page.back({ param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" }, animation: "DEFAULT" }); •기본값 생략 M.page.html({ param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" } }); •옵션 없이 실행 M.page.back(); 30 Chapter 2. API Morpheus Document, Release Lastest Page Remove M.page.remove(url) Changed in version 2.1.0. Arguments • url (String) – 삭제할 Page 위치값, URL Rule, 필수 값 주의) Stack 정보를 이용하는 경우, stack의 역순으로 제거한다. 현재 페이지는 삭제 불가 Example: • 페이지 명으로 삭제 M.page.remove("sample.html"); • stack 정보 이용 삭제 var pagelist = M.info.stack(); M.page.remove(pagelist[2].key); Page Replace M.page.replace(options) Changed in version 2.1.0. Arguments • options.url (String) – 이동할 Page 위치값, URL Rule, 필수 값 • options.param (String or Object) – Parameter 값 Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • path = url • params = param • parameter = param • parameters = param M.page.replace(url, options) Changed in version 2.1.0. Arguments • url (String) – 이동할 Page 위치값, URL Rule, 필수 값 • options (Object) – 설정값 동일 Example: •페이지 명만 적용 M.page.replace("sample.html"); •옵션 포함 2.1. Core 31 Morpheus Document, Release Lastest M.page.html("sample.html", { param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" } }); •URL 적용 M.page.replace('http://m.naver.com'); Tab Page 호출 M.page.tab.html(options) Changed in version 2.1.2. Arguments • options (Object) – 설정 값 • options.url (String) – 이동할 Page 위치값, URL Rule, 필수 값 • options.param (String or Object) – Parameter 값 • options.actionType (Action Type) – History Action Type, Default: ‘NEW_SCR’ • options.animation (Animation Type) – Animation Type, Default: ‘DEFAULT’ • options.orientation (Orientation Type) – Orientation Type, Default: ‘DEFAULT’ • options.delay (Int) – After Delay ( 1Sec = 1000 ), Default: 0 • options.force (Boolean) – 현재페이지가 아닌 경우에도 페이지 이동 실행 허용, Default: false Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • path = url • params = param • parameter = param • parameters = param • action = actionType • animate = animation • animationType = animation • orientationType = orientation Example: •전체 옵션 적용 M.page.tab.html({ url: "sample.html", param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" }, actionType: "NEW_SRC", animation: "DEFAULT", orientation: "DEFAULT", delay: 0, 32 Chapter 2. API Morpheus Document, Release Lastest force: false }); •기본값 생략 M.page.tab.html({ url: "sample.html", param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" } }); •NO History 적용 M.page.tab.html({ url: "skip.html", actionType: "NO_HISTORY" }); M.page.tab.html(url, options) Changed in version 2.1.0. Arguments • url (String) – 이동할 Page 위치값, URL Rule, 필수 값 • options (Object) – 설정값 동일 Example: •페이지 명만 적용 M.page.tab.html("sample.html"); •옵션 적용 M.page.tab.html("sample.html", { param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" } }); •화면 이동 M.page.tab.html('page-html-terminal.html'); •화면 이동 (URL) M.page.tab.html('http://m.naver.com'); •화면 이동 (Animation) M.pagpage.tabe.html('page-html-terminal.html', { 'animate': 'SLIDE_TOP' }); •화면 이동 (Action) 2.1. Core 33 Morpheus Document, Release Lastest M.page.tab.html('page-html-terminal.html', { 'animate': 'SLIDE_RIGHT', 'action': 'NO_HISTORY' }); •화면 이동 (Orientation) M.page.tab.html('page-html-terminal.html', { 'animate': 'SLIDE_TOP', 'orient': 'LAND', 'action': 'NO_HISTORY' }); •화면 이동 (Parameter) //허용 사이즈 : 1Mb (android bundle 허용 size) M.page.tab.html('page-html-terminal.html', { 'param': { 'a':'1', 'b':'2', 'c':'3' } }); Page Tab Remove M.page.tab.remove(url) Changed in version 2.1.0. Arguments • url (String) – 삭제할 Page 위치값, URL Rule, 필수 값 주의) Stack 정보를 이용하는 경우, stack의 역순으로 제거한다. 현재 페이지는 삭제 불가 Example: • 페이지 명으로 삭제 M.page.tab.remove("sample.html"); Page Tab Back M.page.tab.back(options) Changed in version 2.1.0. Arguments • options (Object) – 설정 값 • options.param (String or Object) – Parameter 값 • options.animation (Animation Type) – Animation Type, Default: ‘DEFAULT’ 34 Chapter 2. API Morpheus Document, Release Lastest Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • params = param • parameter = param • parameters = param • animate = animation • animationType = animation Example: •전체 옵션 적용 M.page.tab.back({ param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" }, animation: "DEFAULT" }); •기본값 생략 M.page.tab.back({ param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" } }); •옵션 없이 실행 M.page.tab.back(); Native 로 이동 M.page.activity(options) Changed in version 2.1.1. Arguments • options (Object) – 설정 값 • options.className (String) – 이동할 Native Activity Class Name, Native Class Name Rule, 필수 값 • options.param (String or Object) – Parameter 값 • options.actionType (Action Type) – History Action Type, Default: ‘NEW_SCR’ • options.animation (Animation Type) – Animation Type, Default: ‘DEFAULT’ • options.orientation (Orientation Type) – Orientation Type, Default: ‘DEFAULT’ Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • appClass = className • params = param • parameter = param • parameters = param • action = actionType 2.1. Core 35 Morpheus Document, Release Lastest • animate = animation • animationType = animation • orientationType = orientation Example: •전체 옵션 적용 M.page.activity({ className: "SampleActivity", param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" }, actionType: "NEW_SRC", animation: "DEFAULT", orientation: "DEFAULT" }); •기본값 생략 M.page.activity({ className: "SampleActivity", param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" } }); •NO HISTORY 적용 M.page.activity({ className: "SampleActivity", actionType: "NO_HISTORY" }); M.page.activity(className, options) Changed in version 2.1.0. Arguments • className (String) – 이동할 Native Activity Class Name, Native Class Name Rule, 필수 값 • options (Object) – 설정값 동일 Example: •페이지 명만 적용 M.page.activity("SampleActivity"); •옵션 포함 M.page.activity("SampleActivity", { param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" } }); M.page.native(options) Deprecated since version 2.1.0.8. •M.page.activity 로 대체 Example: 36 Chapter 2. API Morpheus Document, Release Lastest •native 화면 호출 M.page.native("SampleActivity"); Data API • Web <-> Native 간에 데이타 공유 가능 • 공유 가능한 데이타는 String Type Param Description Parameter Data • 화면이 Stack에 존재하는 동안 유지 Global Memory Data • 앱 실행 후 종료시까지 유지 Storage File Reference Data, • 앱을 다시 삭제되기 전까지 유지 • 파일로 저장되므로 사용자 정보는 암호화 필요 ( Security API ) Parameters Data M.data.param(key) Changed in version 2.1.0. Arguments • key (String) – Parameter 키값 •이전 화면에서 현재 화면으로 보낸 Parameter 를 가져온다. •현재 화면에 저장된 Parameter 를 가져온다. Example: // 페이지 호출 M.page.html({ path: "sample.html", param: { "poo": "f3ede926587776a8cd79fb2afe4e07b4" } }); // sample.html 에서 넘어온 Parameter 확인 M.data.param("poo"); M.data.param(key, value) Changed in version 2.1.0. Arguments • key (String) – Parameter로 저장할 키값 2.1. Core 37 Morpheus Document, Release Lastest • value (*) – Parameter로 저장하는 값 •화면에 Parameter 를 저장한다. Example: •Parameter 변수 저장 (default) M.data.param("goo", "6cdcbae015da6f882373107c90209267"); •Parameter 변수 저장 (객체) M.data.param({ 'koo': 'kov', 'boo': 'bov', 'foo': 'fov', 'arrayKey' : ['1', '2', '3'], 'objectkey' : {'key': 'value'} }); var val = M.data.param('foo'); M.tool.log(typeof val, val); alert( (typeof val) + ", " + JSON.stringify(val) ); M.data.removeParam(key) Changed in version 2.1.0. Arguments • key (String) – 제거하려는 Parameter 키값 •화면에서 Parameter 를 제거한다. Example: M.data.removeParam("poo"); M.data.removeParam() Changed in version 2.1.0. •화면에서 Parameter 전체를 제거한다. Example: M.data.removeParam(); Global Data M.data.global(key) Changed in version 2.1.0. Arguments • key (String) – 전역 변수 키값 •전역 변수를 가져온다. Example: 38 Chapter 2. API Morpheus Document, Release Lastest M.data.global("goo"); M.data.global(key, value) Changed in version 2.1.0. Arguments • key (String) – 전역 변수로 저장하려는 키값 • value (*) – 전역 변수로 저장하는 값 •전역 변수로 저장한다 Example: •전역 변수 저장 (default) M.data.global("goo", "6cdcbae015da6f882373107c90209267"); •전역 변수 저장 (객체) M.data.global({ 'koo': 'kov', 'boo': 'bov', 'foo': 'fov', 'arrayKey' : ['1', '2', '3'], 'objectkey' : {'key': 'value'} }); var val = M.data.global('foo'); M.tool.log(typeof val, val); alert( (typeof val) + ", " + JSON.stringify(val) ); M.data.global() Changed in version 2.1.0. •모든 전역 변수를 가져온다. Example: M.data.global(); M.data.removeGlobal(key) Changed in version 2.1.0. Arguments • key (String) – 제거하려는 전역변수 키값 •전역 변수를 제거한다. Example: M.data.removeGlobal("goo"); M.data.removeGlobal() Changed in version 2.1.0. •전역 변수 전체를 제거한다. •제거할 수 없는 예약키(?)는 제외 2.1. Core 39 Morpheus Document, Release Lastest Example: M.data.removeGlobal(); Storage Data M.data.storage(key) Changed in version 2.1.0. Arguments • key (String) – 영속 변수 키값 •영속 변수를 가져온다. Example: M.data.global("soo"); M.data.storage(key, value) Changed in version 2.1.0. Arguments • key (String) – 영속 변수로 저장하려는 키값 • value (*) – 영속 변수로 저장하는 값 •영속 변수로 저장한다. Example: •영속 변수 저장 (default) M.data.storage("goo", "6cdcbae015da6f882373107c90209267"); •영속 변수 저장 (객체) M.data.storage({ 'koo': 'kov', 'boo': 'bov', 'foo': 'fov', 'arrayKey' : ['1', '2', '3'], 'objectkey' : {'key': 'value'} }); var val = M.data.storage('foo'); M.tool.log(typeof val, val); alert( (typeof val) + ", " + JSON.stringify(val) ); M.data.removeStorage(key) Changed in version 2.1.0. Arguments • key (String) – 제거하려는 영속변수 키값 •영속 변수를 제거한다. 40 Chapter 2. API Morpheus Document, Release Lastest Example: M.data.removeStorage("goo"); M.data.removeStorage() Changed in version 2.1.0. •영속 변수 전체를 제거한다. •제거할 수 없는 예약키(?)는 제외 Example: M.data.removeStorage(); Security API • 암복호화 관련 함수를 제공 M.sec.encrypt(source) Changed in version 2.1.1. Arguments • source (String) – 암호화할 Hex 문자열 Return type Object •문자열을 암호화하여 Hex String 형태로 반환한다. Key status value Type String String Description 변환 성공 여부 (SUCCESS or FAIL) 암호화된 문자열 Example: •암호화 M.sec.encrypt( "Sample Text" ).value M.sec.decrypt(source) Changed in version 2.1.1. Arguments • source (String) – 암호화된 Hex 문자열 Return type Object •함수는 문자열을 복호화하여 반환한다. Key status value Type String String Description 변환 성공 여부 (SUCCESS or FAIL) 복호화된 문자열 Example: •복호화 M.sec.decrypt( "1cf24b4ba06470d0809f9ac920e0ee17" ).value •암호화 / 복호화 2.1. Core 41 Morpheus Document, Release Lastest var encrypt = M.sec.encrypt('Sample Text'); M.tool.log( encrypt ); alert( JSON.stringify(encrypt) ); var decrypt = M.sec.decrypt(encrypt.result); M.tool.log( decrypt ); alert( JSON.stringify(decrypt) ); Info API 시스템, 라이브러리, 디바이스 등의 정보를 제공 M.info.version() Changed in version 2.1.1. Returns 설치된 API 의 버전 결과 Return type Object core addon file locale media net net.ext pop zip plugin beacon contact location motion prevention push qr social viewer String Object String String String String String String String Object String String String String String String String String String Core Version Addon Group File Addon Version Locale Addon Version Media Addon Version Network Addon Version Network Extends Addon Version Popup Addon Version Zip Addon Version Plugin Group Beacon Plugin Version Contact Plugin Version Location Plugin Version Motion Plugin Version Prevention Plugin Version Push Plugin Version QR-Code Plugin Version Social Plugin Version Viewer Plugin Version Example: M.info.version(); M.info.memory() Changed in version 2.1.0. Returns 메모리 사용정보 Return type Object used free total String String String Used Memory Bytes Free Memory Bytes Total Memory Bytes Example: M.info.memory(); 42 Chapter 2. API Morpheus Document, Release Lastest M.info.device() Changed in version 2.1.1. Returns Device 정보 Return type Object Key id uuid model type os os.name os.version comm comm.phone comm.brand comm.mccmnc display display.width display.height support support.telephone support.camera_front support.camera_back Type String String String String Object String String Object String String String Object Object Object Object Boolean Boolean Boolean Description Device ID 값 (Deprecated 2.1.1) Device UUID for PUSH Device Model 명 phone: Phone, tablet: Tablet OS 정보 OS 명 OS Version 통신사 정보 단말기 전화번호, iOS 는 00000000000 통신사명 통신사 MMC, MNC 정보 디스플레이 정보 화면 너비 화면 높이 디바이스 지원 정보 통화 기능 지원여부 전방 카메라 지원여부 후방 카메라 지원여부 Example: M.info.device(); M.info.device(keyPath) Changed in version 2.1.2. Arguments • key (String) – 가져오려는 정보의 키값 Returns 키에 대한 값 Example: // 특정 키로 조회 if ( M.info.device("os.name") == "iPhone OS" || M.info.device("os.name") == "iOS" ) { alert( "이 운영체제는 iOS 입니다."); } if ( M.info.device("support.telephone") === false ) { alert( '통화 할 수 없는 단말기 입니다.' ); } M.info.stack() Changed in version 2.1.4. Returns Stack 사용정보 Return type Array •Stack 별 정보 2.1. Core 43 Morpheus Document, Release Lastest Key key action path alias source tabs tabs[index].key tabs[index].param tabs[index].orient tabs[index].path tabs[index].alias tabs[index].source Type String String String String String Array String Object String String String String Description Stack Key 값, API 버전 마다 값이 달라질 수 있음 Stack 의 ActionType (Action Type) 값 Stack을 생성한 리소스의 path 값 Stack을 생성한 리소스의 alias 경로 Stack을 생성한 리소스의 절대 경로 Stack 내 화면 정보 해당 화면의 Key 값, API 버전 마다 값이 달라질 수 있음 해당 화면의 Parameters 값 해당 화면의 Orientation (Orientation Type) 값 해당 화면의 리소스의 path 값 해당 화면의 리소스의 alias 경로 해당 화면의 리소스의 절대 경로 •Stack 정보 내에서 tabs 의 첫번째 배열값이 해당 스택의 현재 화면 정보 Example: M.info.stack(); M.info.stack(index) Changed in version 2.1.2. Arguments • index (Int) – 가져오려는 Stack Index Returns Index 에 대한 Stack 정보 Example: // 현재 화면 정보 console.log( M.info.stack(0).tabs[0] ); M.info.app() Changed in version 2.1.5. Returns Application 정보 Return type Object 44 Chapter 2. API Morpheus Document, Release Lastest Key app Type Object String String String id name version Description ID, Name, Version, Build Info (Deprecated 2.1.5) Application ID (Android:Package Name, iOS:Bundle Identifier) Application Name Application Version (Android: AndroidManifest.version, iOS: CFBundleShortVersionString) String Application Build Version (Android: AndroidManifest.code, iOS: CFBundleVersion) ObLibrary Info ject String License Application ID String Core Library 배포 날짜 String Core Library Version build library library.license_id library.release_date library.release_version manifest Object resource Object reString source.default_version reString source.current_version last_update_date Int Manifest 정보 (Manifest.xml 참고) Resource 정보 앱으로 배포된 리소스의 버전 정보 마지막으로 업데이트 된 리소스 정보 마지막으로 업데이트 시간(millisecond) Example: M.info.app(); M.info.app(keyPath) Changed in version 2.1.4. Arguments • keyPath (String) – 가져오려는 정보의 Key값 Returns Key에 대한 값 Example: if ( M.info.app("resource.default_version") == M.info.app("resource.current_version") ) { // 앱으로 배포된 버전과 리소스 버전 정보가 같은 경우 } Apps API • 앱간 연동을 위한 API 를 제공. 내장 브라우저 실행 M.apps.browser(url, encoding) Changed in version 2.1.0. Arguments 2.1. Core 45 Morpheus Document, Release Lastest • url (String) – 기본 브라우저로 호출하기 위한 URL • encoding (String) – URL Encoding, EUC-KR과 UTF-8 지원 •Encoding Encoding EUC-KR UTF-8 Description Variable-width encoding Character encoding in Unicode Example: M.apps.browser("http://morpheus.co.kr/", "UTF-8"); 앱 삭제 M.apps.remove(identifier) Changed in version 2.1.0: .. Android Only Arguments • identifier (String) – 삭제할 앱의 패키지명 Example: //Android Only M.apps.remove("com.sample.app"); 앱 정보 반환 M.apps.info(packageName) Changed in version 2.1.0. Arguments • packageName (String) – 호출할 앱의 고유 scheme Returns 설치된 앱 정보 추출 Return type Object installed version name display_name Boolean String String String Installed App App Version (Android Only) App Name (Android Only) Display App Name (Android Only) Example: if ( M.navigator.os("android") ) { // Android 인 경우 if ( M.apps.info("com.domain.app"}).installed ) { M.apps.open("com.domain.app", {"poo": "f3ede926587776a8cd79fb2afe4e07b4"}); } else { M.apps.store("com.domain.app", {"poo": "f3ede926587776a8cd79fb2afe4e07b4"}); } } else if ( M.navigator.os("ios") ) { // iOS 인 경우 if ( M.apps.info("scheme://"}).installed ) { M.apps.open("scheme://", {"poo": "f3ede926587776a8cd79fb2afe4e07b4"}); 46 Chapter 2. API Morpheus Document, Release Lastest } else { } } 앱 설치 (In-House 배포용) M.apps.install(url, name) Changed in version 2.1.0. Arguments • url (String) – download url Example: var appURL = ( M.navigator.os('android') ) ? 'http://sample.co.kr/sampleApp.apk' : 'https://samp var appName = 'SampleApp'; M.apps.install(appURL, appName); 앱 실행 M.apps.open(scheme, param) Changed in version 2.1.0. Arguments • scheme (String) – 호출할 앱의 고유 scheme • param (String or Object) – Parameter 값 Returns 앱 호출 성공 여부 Return type Boolean •OS 별 Scheme 값 OS Android iOS Description Package Name URL Scheme •iOS 9.0 이상부터 Info.plist 에 LSApplicationQueriesSchemes 로 scheme 등록 필요 Example: –호출하는 앱에서 처리 내용 if ( M.navigator.os("android") ) { // Android 인 경우 M.apps.open("com.domain.app", {"poo": "f3ede926587776a8cd79fb2afe4e07b4"}); } else if ( M.navigator.os("ios") ) { // iOS 인 경우 M.apps.open("scheme://", {"poo": "f3ede926587776a8cd79fb2afe4e07b4"}); } –호출되는 앱에서 처리 내용 2.1. Core 47 Morpheus Document, Release Lastest //Launcher Activity에서 아래와 같이 처리한다. (기본 : Startup.java) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //////////////////////////////////////////////////////////////////////////////// // - 중요 // 최초 시작 Activity에 아래의 코드를 넣어야 한다. commLibHandle.processAppInit(this); //////////////////////////////////////////////////////////////////////////////// JSONObject jsondata; try { String param = getIntent().getStringExtra("param"); jsondata = new JSONObject(param); String poo_data = jsondata.has("poo") ? jsondata.getString("poo") : ""; } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 스토어 열기 M.apps.store(identifier) Changed in version 2.1.0. Arguments • identifier (String) – Store 에서의 앱 고유값 •Identifier in AppStore OS Android iOS Identifier Package Name AppStore App ID Example: •앱 지정하여, 스토어 열기 if ( M.navigator.os("android") ) { // Android 인 경우 M.apps.store("com.uracle.wellness"}); // open https://itunes.apple.com/kr/app/id1049605425?mt=8 } else if ( M.navigator.os("ios") ) { // iOS 인 경우 M.apps.store("1049605425"); // open https://play.google.com/store/apps/details?id=com.uracle.wellness } 48 Chapter 2. API Morpheus Document, Release Lastest •Store 열기 M.apps.store(); System API • 전화걸기, SMS, 진동등 시스템 기능들을 제공. • 전화 걸기 M.sys.call(number) Changed in version 2.1.1. Arguments • number (String) – 전화번호 •네이티브 전화 어플을 구동시킨다. Example: •구분자 M.sys.call( '010-1234-5678' ) •숫자 M.sys.flash( '01012345678' ) • App 종료 M.sys.exit() Changed in version 2.1.1. •앱을 종료한다. Example: M.sys.exit() • Camera flash 호출 M.sys.flash(status) Changed in version 2.1.1. Arguments • status (String) – 카메라 플래시 상태 변경 (ON, OFF) •카메라 플래시의 상태를 변경한다. Example: •호출 (ON) M.sys.flash( 'ON' ) •호출 (OFF) 2.1. Core 49 Morpheus Document, Release Lastest M.sys.flash( 'OFF' ) •Camera Flash 상태정보 var result = M.sys.flash(); M.tool.log( result ); alert( result ); • 메일 발송 M.sys.mail(options) Changed in version 2.1.1. Arguments • options (Object) – 설정값 • options.to (Array) – 받는 사람 이메일 주소 • options.cc (Array) – 참조 이메일 주소 • options.bcc (Array) – 숨은참조 이메일 주소 • options.subject (String) – 메일 제목 • options.contents (String) – 메일 내용 Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • content = contents •메일을 화면으로 이동한다. Example: M.sys.mail({ to: ['test1@test.com', 'test2@test.com'] }); M.sys.mail({ to: ['test1@test.com', 'test2@test.com'], subject: '제목' }); M.sys.mail({ to: ['test1@test.com', 'test2@test.com'], subject: '제목', content: '내용' }); M.sys.mail({ to: ['test1@test.com', 'test2@test.com'], cc: ['cc1@test.com', 'cc2@test.com'], bcc: ['bcc1@test.com', 'bcc2@test.com'], subject: '제목', content: '내용' }); • sms 발송 50 Chapter 2. API Morpheus Document, Release Lastest M.sys.sms(options) Changed in version 2.1.1. Arguments • options (Object) – 설정값 • options.numbers (Array) – 수신 전화번호 • options.message (Array) – SMS 내용 Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • target = numbers • content = message • contents = message • msg = message •SMS 전송 화면으로 이동한다. Example: M.sys.sms({ numbers: '010-123-4567, 010-987-6543' }); M.sys.sms({ target: ['010-123-4567', '0109876543'], content: '안녕하세요.' }); • 진동 발생 M.sys.vibration() Changed in version 2.1.1. •네이티브 진동을 호출한다. Example: •진동 호출 M.sys.vibration() •진동 호출 (time / ms) M.sys.vibration(2000); •진동 호출 (3s) M.sys.vibration('3s'); •진동 호출 (3000ms) M.sys.vibration('3000ms'); • Camera Flash 상태 가져오기 2.1. Core 51 Morpheus Document, Release Lastest M.sys.flash() Changed in version 2.1.1. Return type Object Key status Type Description String 플래시의 상태 (ON, OFF) •카메라 플래시의 상태를 가져온다. Example: M.sys.flash() Tool API 로그 등 유틸 API 를 제공 Log • 아래와 같은 타입으로 로그 레벨을 설정 할 수 있다. Log Level Type ERROR WARN INFO DEBUG VERBOSE Int 0 1 2 3 4 Description Error Level Warning Level Info Level Debug Level Verbose Level M.tool.log(options) Changed in version 2.1.0. Arguments • options (Object) – 설정 값 • options.message (String) – Log Message, 필수 값 • options.level (Log Level) – Log Level, Default: DEBUG • options.tag (String) – Log 분류를 위한 Tag 값, Default: WEB Example: •전체 옵션 적용 M.tool.log({ message:"로그 메세지", level: "DEBUG", tag: "WEB" }); •기본값 생략 M.tool.log({ message:"로그 메세지" }); 52 Chapter 2. API Morpheus Document, Release Lastest •Log 출력 (Object) M.tool.log({ 'a': 'b': 'c': 'd': 'e': 'f': }); '1', '2', '3', 4, "asdfasdfas", false •Log 출력 (Array) M.tool.log(['a', 'b', 'c', 123, true, false, "\n"]); •Log 출력 (Multiple) var arr = ['a', 'b', 'c'] var obj = { 'a':'1', 'b':'2', 'c':'3' }; M.tool.log('로그', arr, obj); •Log 출력 (Multiple + Setting) var arr = ['a', 'b', 'c']; var obj = { 'a':'1', 'b':'2', 'c':'3' }; M.tool.log(obj, arr, '로그', { 'level': 2, 'tag': 'test' }); •Log 출력 (Int) M.tool.log(0); M.tool.log(message) Changed in version 2.1.0. Arguments • message (String) – Log Message, 필수 값 •메세지만 보내는 경우 기본 옵션값으로 Log 전달 Example: 2.1. Core 53 Morpheus Document, Release Lastest // 로그 메세지만 전달 M.tool.log( "로그 메세지" ); M.tool.log(level, tag, message[, ... ]) Changed in version 2.1.0. Arguments • level (String) – Log Level, Default: DEBUG • tag (String) – Log 분류를 위한 Tag 값, Default: WEB • message (*) – Log Message •첫번째 파라미터 값이 Level 에 해당하는 값인 경우, Level, Tag, Message 순으로 인식 Example: // Error Level + WEB tag + 메세지 순으로 전달 M.tool.log( "ERROR", "WEB", "오류 메세지" ); 2.2 Addon 2.2.1 MDatabase MDb Framework 에 대한 필수 API 를 정의 Db API 로컬 데이터 베이스 기능에 대한 API 를 제공 DB 생성 M.db.create(options) Changed in version 2.1.0. Arguments • options (Object) – 설정 값 • options.path (String) – 데이터베이스 파일 이름 • options.callback (Function) – 실행 결과를 확인하는 함수 callback(status, name) Arguments – status (String) – 실행 결과 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) – name (String) – 데이터베이스 파일 이름 Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • source = path • name = path • db = path 54 Chapter 2. API Morpheus Document, Release Lastest • database = path • finish = callback • onfinish = callback Example: M.db.create({ path:'db_name', callback: function(status, path){ console.log(status, path); } }); M.db.create(name, callback) Changed in version 2.1.0. Arguments • name (String) – 데이터베이스 파일 이름 • callback (Function) – 실행 결과를 확인하는 함수 •데이터베이스 파일을 생성한다. Example: M.db.create('db_name', function(status, name){ console.log(status, name); }); DB 닫기 M.db.close(options) Changed in version 2.1.0. Arguments • options (Object) – 설정 값 • options.path (String) – 데이터베이스 파일 이름 • options.callback (Function) – 실행 결과를 확인하는 함수 callback(status, name) Arguments – status (String) – 실행 결과 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) – name (String) – 데이터베이스 파일 이름 Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • source = path • alias = path • name = path • db = path • database = path • finish = callback 2.2. Addon 55 Morpheus Document, Release Lastest • onfinish = callback Example: M.db.close({ path:'db_name', callback: function(status, path){ console.log(status, path); } }); M.db.close(name, callback) Changed in version 2.1.0. Arguments • name (String) – 데이터베이스 파일 이름 • callback (Function) – 실행 결과를 확인하는 함수 •데이터베이스 파일을 닫는다. Example: M.db.close('db_name', function(status, name){ console.log(status, name); }); DB 열기 M.db.open(options) Changed in version 2.1.0. Arguments • options (Object) – 설정 값 • options.path (String) – 데이터베이스 파일 이름 • options.callback (Function) – 실행 결과를 확인하는 함수 callback(status, name) Arguments – status (String) – 실행 결과 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) – name (String) – 데이터베이스 파일 이름 Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • source = path • alias = path • name = path • db = path • database = path • finish = callback • onfinish = callback Example: 56 Chapter 2. API Morpheus Document, Release Lastest M.db.open({ path:'db_name', callback: function(status, path){ console.log(status, path); } }); M.db.open(name, callback) Changed in version 2.1.0. Arguments • name (String) – 데이터베이스 파일 이름 • callback (Function) – 실행 결과를 확인하는 함수 •데이터베이스 파일을 연다. Example: M.db.open('db_name', function(status, name){ console.log(status, name); }); DB 삭제 M.db.remove(options) Changed in version 2.1.0. Arguments • options (Object) – 설정 값 • options.path (String) – 데이터베이스 파일 이름 • options.callback (Function) – 실행 결과를 확인하는 함수 callback(status, name) Arguments – status (String) – 실행 결과 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) – name (String) – 데이터베이스 파일 이름 Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • source = path • alias = path • name = path • db = path • database = path • finish = callback • onfinish = callback Example: 2.2. Addon 57 Morpheus Document, Release Lastest M.db.remove({ path:'db_name', callback: function(status, path){ console.log(status, path); } }); M.db.remove(name, callback) Changed in version 2.1.0. Arguments • name (String) – 데이터베이스 파일 이름 • callback (Function) – 실행 결과를 확인하는 함수 •데이터베이스 파일을 삭제한다. Example: M.db.remove('db_name', function(status, name){ console.log(status, name); }); DB 쿼리 M.db.execute(options) Changed in version 2.1.0. Arguments • options (Object) – 설정 값 • options.path (String) – 데이터베이스 파일 이름 • options.sql (String) – SQL 구문 (SQL Lite) • options.callback (Function) – 실행 결과를 확인하는 함수 callback(status, result, name) Arguments – status (String) – 실행 결과 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) – result (Object) – result 객체, 쿼리 실행 결과 – result.column_count (int) – 행 개수 – result.row_count (int) – 결과 레코드 수 – result.row_list (String) – 레코드 데이터 – name (String) – 데이터베이스 파일 이름 Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • source = path • alias = path • name = path • db = path • database = path • query = sql • finish = callback 58 Chapter 2. API Morpheus Document, Release Lastest • onfinish = callback Example: var query = 'SELECT * FROM books'; M.db.execute({ path:'db_name', sql: query, callback: function(status, result, name){ console.log(status, path); } }); M.db.execute(name, sql, callback) Changed in version 2.1.0. Arguments • name (String) – 데이터베이스 파일 이름 • sql (String) – SQL 구문 (SQL Lite) • callback (Function) – 실행 결과를 확인하는 함수 •데이터베이스 sql 쿼리를 실행한다. Example: • DataBase 실행 (Create) var query = 'CREATE TABLE books (id INTEGER PRIMARY KEY, title varchar(255) not null, author var M.db.execute('db_name', query, function(status, result, name){ M.tool.log(status, result, name); alert( status + ", " + JSON.stringify(result) + ", " + name ); }); • DataBase 실행 (Insert) var query = 'INSERT INTO books (title, author) values ("제목1", "작가1")'; M.db.execute('db_name', query, function(status, result, name){ M.tool.log(status, result, name); alert( status + ", " + JSON.stringify(result) + ", " + name ); }); • DataBase 실행 (Select) var query = 'SELECT * FROM books'; M.db.execute('db_name', query, function(status, result, name){ console.log(status, result, name); }); 2.2.2 MFile MFile Framework 에 대한 필수 API 를 정의 File API File IO 기능에 대한 API 를 제공 2.2. Addon 59 Morpheus Document, Release Lastest 파일 생성 M.file.create(options) Changed in version 2.2.0. Arguments • options (Object) – 설정 값 • options.path (String) – 파일 및 폴더 경로 • options.type (String) – 파일 및 폴더 여부 (FILE:파일 타입,DIR:폴더 타입) •File 및 directory를 생성한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • name = path • alias = path • source = path • option = type Example: • 폴더 생성 var result = M.file.create({ 'type': 'DIR', 'path': 'doc://temp' }); console.log(result); • 파일 생성 var result = M.file.create({ type: 'FILE', path: 'doc://temp/hello.txt' }); 파일 읽기 M.file.read(setting) Changed in version 2.2.0. Arguments • setting (Object) – 설정 값 • setting.path (String) – 파일 및 폴더 경로 • setting.encoding (String) – 파일 인코딩 (UTF-8, EUC-KR) • setting.indicator (String) – 파일 로딩시 표시할 indicator의 message • setting.callback (function) – 파일 읽기 완료 후 callback 되는 함수 callback(result) Arguments – result (Object) – 파일 정보 60 Chapter 2. API Morpheus Document, Release Lastest – result.status (String) – status 상태 코드 (SUCCESS:성공 코드, FAIL:실패 코드) – result.message (String) – 메세지 – result.size (int) – 파일 데이터 길이 – result.data (String) – 파일의 text 데이터, 값이 [BLOB] 인 경우 바이너리 파일 – result.path (String) – 파일의 Scheme URL 경로 – result.fullpath (String) – 파일의 전체 경로 Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • name = path • alias = path • source = path • encode = encoding • load = callback • onload = callback Example: M.file.read({ path: 'doc://temp/hello.txt', encoding: 'UTF-8', indicator: true, callback: function(resut){ console.log(result); } }); M.file.read(setting, callback) Changed in version 2.2.0. Arguments • setting (Object) – 설정 값 • setting.path (String) – 파일 및 폴더 경로 • setting.encoding (String) – 파일 인코딩 (UTF-8, EUC-KR) • setting.indicator (String) – 파일 로딩시 표시할 indicator의 message • callback (function) – 파일 읽기 완료 후 callback 되는 함수 •File 의 Contents를 읽어 반환한다. Example: M.file.read({ path: 'doc://temp/hello.txt', encoding: 'UTF-8', indicator: true, }, function(result) { console.log(result); }); 2.2. Addon 61 Morpheus Document, Release Lastest 파일 삭제 M.file.remove(setting) Changed in version 2.2.0. Arguments • setting (Object) – 설정 정보 • setting.path (String) – 파일 및 폴더 경로 •File 및 directory 를 삭제한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • name = path • alias = path • source = path • option = type Example: • 폴더 삭제 var result = M.file.remove({ type: 'DIR', path: 'doc://temp/' }); M.tool.log(result); alert(JSON.stringify(result)); • 파일 삭제 var result = M.file.remove({ path: 'doc://temp/hello.txt' }); console.log(result); 파일 정보 M.file.info(setting) Changed in version 2.2.0. Arguments • setting (Object) – 파일 정보 • setting.path (String) – (source) 원본 경로 •File 및 directory의 정보를 가져온다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • name = path • alias = path • source = path 62 Chapter 2. API Morpheus Document, Release Lastest Example: var result = M.file.info({ path: 'doc://temp/' }); console.log(result); 파일 정보 (목록) M.file.list(setting) Changed in version 2.2.0. Arguments • setting (Object) – 파일 정보 • setting.path (String) – (source) 원본 경로 • setting.filter (String) – 파일 및 폴더 여부 (FILE:파일 타입,DIR:폴더 타입) •File 및 directory의 정보를 가져온다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • name = path • alias = path • source = path • type = filter Example: var result = M.file.list({ path: 'doc://temp/', filter: 'DIR' }); console.log(result); 파일 복사 M.file.copy(setting) Changed in version 2.2.0. Arguments • setting (Object) – 설정 정보 • setting.type (String) – 파일 및 폴더 여부 (FILE:파일 타입,DIR:폴더 타입) • setting.source (String) – (source) 원본 경로 • setting.destination (String) – (destination) 복사될 경로 • setting.overwrite (boolean) – 덮어쓰기 여부 • setting.indicator (String) – 파일 복사시 표시할 indicator 여부 • setting.progress (function) – 파일 복사 중 진행 상태를 알려주는 함수 2.2. Addon 63 Morpheus Document, Release Lastest progress(total, current) Arguments – total (String) – 복사할 전체 파일 크기 – current (String) – 복사된 파일 크기 • setting.finish (function) – 파일 복사 완료 후 callback 되는 함수 finish(status, result) Arguments – status (String) – status 상태 코드 (SUCCESS:성공 코드, FAIL: 실패 코드} – result (String) – 복사된 파일 정보 – result.message (String) – 메세지 – result.size (int) – 파일 데이터 길이 – result.data (String) – 파일의 text 데이터, 값이 [BLOB] 인 경우 바이너리 파일 – result.path (String) – 파일의 Scheme URL 경로 – result.fullpath (String) – 파일의 전체 경로 Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • path = path • from = path • alias = path • source = path • to = destination • onprogress = progress • onfinish = finish • callback = finish Example: M.file.copy({ type: 'FILE', source: 'doc://temp/hello.txt', destination: 'doc://temp/hello1.txt', indicator: true, progress: function(total, current, setting){ console.log(total, current); }, finish: function(resut){ console.log(result); } }); M.file.copy(setting, callback) Changed in version 2.2.0. Arguments • setting (Object) – 설정 정보 • setting.type (String) – 파일 및 폴더 여부 (FILE:파일 타입,DIR:폴더 타입) • setting.source (String) – (source) 원본 경로 • setting.destination (String) – (destination) 복사될 경로 64 Chapter 2. API Morpheus Document, Release Lastest • setting.overwrite (boolean) – 덮어쓰기 여부 • setting.indicator (String) – 파일 복사시 표시할 indicator 여부 • setting.progress (function) – 파일 복사 중 진행 상태를 알려주는 함수 progress(total, current) Arguments – total (String) – 복사할 전체 파일 크기 – current (String) – 복사된 파일 크기 • callback (function) – 파일 복사 완료 후 callback 되는 함수 •File 및 directory 를 복사한다. Example: M.file.copy({ type: 'FILE', source: 'doc://temp/hello.txt', destination: 'doc://temp/hello1.txt', indicator: true, progress: function(total, current, setting) { console.log(total, current); } }, function(result) { console.log(result); }); 파일 이동 M.file.move(setting) Changed in version 2.2.0. Arguments • setting (Object) – 설정 정보 • setting.type (String) – 파일 및 폴더 여부 (FILE:파일 타입,DIR:폴더 타입) • setting.source (String) – (source) 원본 경로 • setting.destination (String) – (destination) 복사될 경로 • setting.overwrite (boolean) – 덮어쓰기 여부 • setting.indicator (String) – 파일 복사시 표시할 indicator 여부 • setting.progress (function) – 파일 복사 중 진행 상태를 알려주는 함수 progress(total, current) Arguments – total (String) – 복사할 전체 파일 크기 – current (String) – 복사된 파일 크기 • setting.finish (function) – 파일 복사 완료 후 callback 되는 함수 finish(status, result) Arguments – status (String) – status 상태 코드 (SUCCESS:성공 코드, FAIL: 실패 코드} – result (String) – 복사된 파일 정보 2.2. Addon 65 Morpheus Document, Release Lastest – result.message (String) – 메세지 – result.size (int) – 파일 데이터 길이 – result.data (String) – 파일의 text 데이터, 값이 [BLOB] 인 경우 바이너리 파일 – result.path (String) – 파일의 Scheme URL 경로 – result.fullpath (String) – 파일의 전체 경로 Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • path = path • from = path • alias = path • source = path • to = destination • onprogress = progress • onfinish = finish • callback = finish Example: M.file.move({ type: 'FILE', source: 'doc://temp/hello.txt', destination: 'doc://temp/hello1.txt', indicator: true, progress: function(total, current, setting){ console.log(total, current); }, finish: function(resut){ console.log(result); } }); M.file.move(setting, callback) Changed in version 2.2.0. Arguments • setting (Object) – 설정 정보 • setting.type (String) – 파일 및 폴더 여부 (FILE:파일 타입,DIR:폴더 타입) • setting.source (String) – (source) 원본 경로 • setting.destination (String) – (destination) 복사될 경로 • setting.overwrite (boolean) – 덮어쓰기 여부 • setting.indicator (String) – 파일 복사시 표시할 indicator 여부 • setting.progress (function) – 파일 복사 중 진행 상태를 알려주는 함수 progress(total, current) Arguments – total (String) – 복사할 전체 파일 크기 – current (String) – 복사된 파일 크기 • callback (function) – 파일 복사 완료 후 callback 되는 함수 66 Chapter 2. API Morpheus Document, Release Lastest •File 및 directory 를 이동한다. Example: M.file.move({ type: 'FILE', source: 'doc://temp/hello.txt', destination: 'doc://temp/hello1.txt', indicator: true, progress: function(total, current, setting) { console.log(total, current); } }, function(result) { console.log(result); }); 파일 쓰기 M.file.write(setting) Changed in version 2.2.0. Arguments • setting (Object) – 설정 정보 • setting.path (String) – 파일 및 폴더 경로 • setting.contents (String) – 데이터 • setting.encoding (String) – 파일 인코딩 (UTF-8, EUC-KR) • setting.indicator (String) – 파일 생성시 표시할 indicator • setting.callback (function) – 파일 쓰기 완료 후 callback 되는 함수 Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • name = path • alias = path • source = path • data = contents • encode = encoding • finish = callback • onfinish = callback Example: M.file.write({ path: 'doc://temp/hello.txt', contents: '안녕하세요.', encoding: 'UTF-8', callback: function(resut){ console.log(result); } }); 2.2. Addon 67 Morpheus Document, Release Lastest M.file.write(setting, callback) Changed in version 2.2.0. Arguments • setting (Object) – 설정 정보 • setting.path (String) – 파일 및 폴더 경로 • setting.contents (String) – 데이터 • setting.encoding (String) – 파일 인코딩 (UTF-8, EUC-KR) • setting.indicator (String) – 파일 생성시 표시할 indicator • callback (function) – 파일 쓰기 완료 후 callback 되는 함수 •File에 Contents를 쓴다. Example: M.file.write({ path: 'doc://temp/hello.txt', contents: '안녕하세요.', encoding: 'UTF-8', }, function(result) { console.log(result); }); 2.2.3 MMedia MMedia Framework 에 대한 필수 API 를 정의 Media API 미디어 관련된 기능들을 제공 미디어 촬영 M.media.camera(setting) Changed in version 2.0.0. Arguments • setting (Object) – 사진 및 동영상 촬영을 위한 설정 정보 • setting.mediaType (String) – 촬영 모드( PHOTO : 사진 / VIDEO: 영상 ) • setting.direction (String) – 촬영 방향 (FRONT / BACK) • setting.path (String) – 저장될 폴더명, “COMMON”일 경우 기본 카메라 앱에 의해 저장되는 위치에 사진이 저장된다. • setting.filename (String) – 사용자 지정 파일 이름(확장자 없이), 입력값이 없을경우 내부에서 정의된 값으로 저장된다. • setting.callback (Function) – 촬영 후 호출되는 콜백 함수 callback(status, result) Arguments • status (String) – 실행 결과 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) 68 Chapter 2. API Morpheus Document, Release Lastest • result (Object) – 실행 결과 • result.path (String) – 파일의 FULL PATH • result.size (int) – 파일 크기 • result.saveDate (String) – 저장 시간 • result.name (String) – 파일의 파일 이름 •사진 및 동영상 촬영 화면으로 이동한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • alias = path • source = path • name = filename • mode = mediaType • media = mediaType • type = mediaType • take = callback • ontake = callback Example: • PHOTO 촬영 M.media.camera({ mediaType: "PHOTO", path: "/media", onfinish: function(status, result, option) { if (status == 'SUCCESS') { var photo_path = result.path; var photo_name = result.name; } } }); • VIDEO 촬영 M.media.camera({ mediaType: "VIDEO", path: "/media", onfinish: function(status, result, option) { if (status == 'SUCCESS') { var photo_path = result.path; var photo_name = result.name; } } }); 공통 미디어 폴더 복사 M.media.album(setting) Changed in version 2.2.0. 2.2. Addon 69 Morpheus Document, Release Lastest Arguments • setting (Object) – 설정 정보 • setting.path (String) – 저장될 미디어 폴더명 • setting.callback (Function) – 결과 콜백 함수 callback(status, result) Arguments • status (String) – 실행 결과 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) • result (Object) – 실행 결과 • result.path (String) – 파일의 FULL PATH • result.name (String) – 파일의 파일 이름 •미디어 폴더로 복사한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • alias = path • source = path • finish = callback • onfinish = callback Example: M.media.album({ path: "/media", onfinish: function(status, result, option) { if (status == 'SUCCESS') { var photo_path = result.path; var photo_name = result.name; } } }); 미디어 정보 M.media.info(setting) Changed in version 2.0.0. Arguments • setting (Object) – 미디어 정보를 가져오기 위한 설정 정보 • setting.path (String) – 정보를 가져오려는 디랙토리 경로 • setting.mediaType (String) – 미디어 타입 ( PHOTO: 사진, VIDEO: 동영상, VOICE: 오디오 ) • setting.callback (Function) – 미디어 정보를 반환하는 콜백 함수 callback(status, result) Arguments • status (String) – 실행 결과 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) • result (Object) – 실행 결과 70 Chapter 2. API Morpheus Document, Release Lastest • result.dirs (Array) – 디렉토리 정보 • result.files (Array) – 파일들 정보 •미디어 정보를 가져온다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • alias = path • source = path • load = callback • onload = callback Example: • 미디어 정보 (PHOTO) M.media.info({ path: '/', mediaType: 'PHOTO', callback: function( status, result ) { console.log( status + ", " + JSON.stringify(result.dirs) ); } }); • 미디어 정보 (VIDEO) M.media.info({ path: '/', mediaType: 'VIDEO', callback: function( status, result ) { console.log( status + ", " + JSON.stringify(result.dirs) ); } }); 공통 미디어 정보 M.media.picker(setting) Changed in version 2.0.0. Arguments • setting (Object) – 공통 미디어 정보를 가져오기 위한 설정 정보 • setting.mode (String) – 선택 타입 ( SINGLE: 하나의 미디어 파일만 선택 가능, MULTI: 여러장 미디어 파일들을 선택 가능(media 타입이 PHOTO 일때만 지원함) ) • setting.mediaType (String) – 미디어 타입 ( PHOTO: 사진, VIDEO: 동영상, VOICE: 오디오 ) • setting.path (String) – 미디어 경로 • setting.column (int) – 미디어 선택 화면 컬럼 수 • setting.detail (Bool) – 상세 화면 모드 • setting.zoom (Bool) – 줌 모드 • setting.callback (Function) – 공통 미디어 정보를 반환하는 콜백 함수 callback(status, result) 2.2. Addon 71 Morpheus Document, Release Lastest Arguments • status (String) – 실행 결과 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) • result (Object) – 실행 결과 • result.path (String) – 파일의 FULL PATH • result.size (int) – 파일 크기 • result.saveDate (String) – 저장 시간 • result.name (String) – 파일의 파일 이름 • result.orientation (String) – 방향( 0, 90, 180, 270 ) •공통 미디어(사진, 동영상)를 가져오는 화면으로 이동한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • alias = path • source = path • media = mediaType • type = mediaType • choose = mode • choice = mode • select = callback • onselect = callback Example: M.media.picker({ mode: "SINGLE", media: "VIDEO", path: "/media", onfinish: function( status, result ) { console.log( status + ", " + JSON.stringify(result) ); } }); 공통 미디어 정보 M.media.library(setting) Changed in version 2.0.0. Arguments • setting (Object) – 공통 미디어 정보를 가져오기 위한 설정 정보 • setting.mode (String) – 선택 타입 ( SINGLE: 하나의 미디어 파일만 선택 가능, MULTI: 여러장 미디어 파일들을 선택 가능(media 타입이 PHOTO 일때만 지원함) ) • setting.mediaType (String) – 미디어 타입 ( PHOTO: 사진, VIDEO: 동영상, VOICE: 오디오 ) • setting.path (String) – 미디어 경로 • setting.column (int) – 미디어 선택 화면 컬럼 수 72 Chapter 2. API Morpheus Document, Release Lastest • setting.detail (Bool) – 상세 화면 모드 • setting.zoom (Bool) – 줌 모드 • setting.callback (Function) – 공통 미디어 정보를 반환하는 콜백 함수 callback(status, result) Arguments • status (String) – 실행 결과 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) • result (Object) – 실행 결과 • result.path (String) – 파일의 FULL PATH • result.size (int) – 파일 크기 • result.saveDate (String) – 저장 시간 • result.name (String) – 파일의 파일 이름 • result.orientation (String) – 방향( 0, 90, 180, 270 ) •공통 미디어(사진, 동영상)를 가져오는 화면으로 이동한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • alias = path • source = path • media = mediaType • type = mediaType • choose = mode • choice = mode • select = callback • onselect = callback Example: M.media.library({ mode: "SINGLE", media: "VIDEO", path: "/media", callback: function( status, result ) { console.log( status + ", " + JSON.stringify(result) ); } }); 공통 미디어 삭제 M.media.removelibrary(setting) Changed in version 2.0.0. Arguments • setting.mediaType (String) – 미디어 타입 ( PHOTO: 사진, VIDEO: 동영상, VOICE: 오디오 ) • setting.path (String) – 미디어 경로 2.2. Addon 73 Morpheus Document, Release Lastest • setting.callback (Function) – 공통 미디어 정보를 반환하는 콜백 함수 callback(status, result) Arguments • status (String) – 실행 결과 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) • result (Object) – 실행 결과 •공통 미디어(사진, 동영상)를 삭제한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • alias = path • source = path • media = mediaType • type = mediaType • choose = mode • choice = mode • select = callback • onselect = callback Example: •Media 파일 삭제 (PHOTO) M.media.info({ media: "PHOTO", path: "/media", }, function(status, result) { if ( status == 'SUCCESS' ) { alert( JSON.stringify(result) ); var removeFiles = []; for ( var idx in result ) { var fileInfo = result[idx]; removeFiles.push( fileInfo.path ) } M.media.removeLibrary({ files: removeFiles, media: "PHOTO" }, function(status, setting) { M.tool.log(status); alert(status); }); } else { alert(status); } }); •Media 파일 삭제 (VIDEO) M.media.info({ media: "VIDEO", path: "/media", 74 Chapter 2. API Morpheus Document, Release Lastest }, function(status, result) { if ( status == 'SUCCESS' ) { alert( JSON.stringify(result) ); var removeFiles = []; for ( var idx in result ) { var fileInfo = result[idx]; removeFiles.push( fileInfo.path ) } M.media.removeLibrary({ files: removeFiles, media: "VIDEO" }, function(status, setting) { M.tool.log(status); alert(status); }); } else { alert(status); } }); 동영상 플레이어 M.media.play(setting) Changed in version 2.0.0. Arguments • setting (Object) – 영상 재생을 위한 설정 정보 • setting.path (String) – 재생할 영상 URL • setting.playType (String) – URL 타입 ( NATIVE: 내장, 외장 메모리에 있는 URL 또는 Remote URL 처럼 직접 재생이 가능한경우, WEB: youtube URL처럼 직접 재생이 가능하지 않은 URL ) •영상을 재생하는 화면으로 이동한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • url = path • alias = path • source = path • media = playType Example: • 동영상 Play (WEB) M.media.play({ path: "http://www.w3schools.com/html/mov_bbb.mp4", playType: "WEB" }); • 동영상 Play (YOUTUBE) 2.2. Addon 75 Morpheus Document, Release Lastest M.media.play({ path: "https://youtu.be/RgKAFK5djSk", playType: "YOUTUBE" }); • 동영상 촬영 후 Play M.media.camera({ mode: "VIDEO", path: "/media", }, function(status, result, option) { if (status == 'SUCCESS') { var video_path = result.path; var video_name = result.name; var video_thumb = video_name.substr(0, video_name.lastIndexOf('.')) + ".png"; M.media.play(video_path, 'NATIVE'); } }); 녹음 M.media.record(setting) Changed in version 2.0.0. Arguments • setting (Object) – 파일 생성을 위한 설정 정보 • setting.path (String) – 녹취 파일이 저장될 경로 (폴더) • setting.filename (String) – 녹취 파일 이름 (확장자 미포함), 없는경우 현재 시간으로 파일명을 만든다. • setting.overwrite (Bool) – 덮어 쓰기 여부 • setting.callback (Function) – 녹취 결과 콜백 함수 callback(status, result) Arguments • status (String) – 실행 결과 코드 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) • result (Object) – 실행 결과 • result.path (String) – 파일의 FULL PATH • result.size (int) – 파일 크기 • result.saveDate (String) – 저장 시간 • result.name (String) – 파일의 파일 이름 •녹취 기능 화면으로 이동한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • alias = path • source = path • name = filename 76 Chapter 2. API Morpheus Document, Release Lastest • finish = callback • onfinish = callback Example: M.media.record({ path: 'doc:///res', filename: "sample", callback: function(status, result) { console.log( status + ", " + JSON.stringify(result) ); } }); 2.2.4 MNetwork MNetwork Framework 에 대한 필수 API 를 정의 Net API 네크워크 관련된 기능들을 제공 쿠키 제거 M.net.cookie.clear() Changed in version 2.2.0. •쿠키 정보를 제거한다. Example: M.net.cookie.clear(); HTTP 통신 M.net.http.send(setting) Changed in version 2.2.0. Arguments • setting (Object) – 리소스 업데이트를 위한 설정 정보 • setting.server (String) – 타겟 서버 • setting.path (String) – 전문 코드 • setting.method (String) – 전송 방식 (GET, PUT, POST, DELETE) • setting.timeout (int) – 타임 아웃 (millisecond) • setting.dummy (Bool) – 더미전문 여부 • setting.encrypt (Bool) – 데이터 암복호화 여부 (네이티브 NetworkManager에 구현이 되어있어야함) • setting.indicator (String) – 인디케이터 정보 • setting.success (Function) – 성공 여부에 따라 호출되는 콜백 함수 2.2. Addon 77 Morpheus Document, Release Lastest success(receivedData) Arguments • receivedData (Object) – 실행 결과 Arguments • setting.error (Function) – 오류 발생 시 콜백 함수 error(errCode, errMessage) Arguments • errCode (String) – 에러 코드 • errMessage (String) – 에러 메세지 •http 네트워크 통신을 한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • reqdata = data • secure = encrypt • trcode = path • restAction = method • onsuccess = success • onerror = error Example: • 기본 옵션 M.net.http.send({ server: 'DEMO', path: 'language/translate/v2/detect', method: 'POST', timeout: 5000, message: 'Loading..', cancelable: true, data: { key: 'AIzaSyDbk0nUTyd4ChyFrCkHa-XAufg6-0u-OLw', q: 'test' }, success: function(recevedData, setting) { console.log( "onSuccess, " + JSON.stringify(recevedData) ); }, error: function(errorCode, errorMessage, setting) { console.log( "onError, " + errorCode + ", " + errorMessage ); } }); • 기본 옵션 without Indicator M.net.http.send({ server: 'DEMO_SERVER', path: 'api/msp/sample/test', method: 'POST', indicator: { 78 Chapter 2. API Morpheus Document, Release Lastest show: false }, data: { 'deploy' : '0', 'version': '000000', 'rsp' : '0b3235695f40f279ba3bda96497b894eb457ce73f8dcd6ec4d2c39d1fa622dac7b8e4c5 }, onSuccess: function(recevedData, setting) { M.tool.log( "onSuccess", recevedData ); alert( "onSuccess, " + JSON.stringify(recevedData) ); }, "onError": function(errorCode, errorMessage, setting) { M.tool.log( "onError", errorCode, errorMessage ); alert( "onError, " + errorCode + ", " + errorMessage ); } }); • 모든 옵션 M.net.http.send({ server: 'DEMO_SERVER', path: 'api/msp/sample/test', method: 'POST', timeout: '1000', dummy: false, secure: false, message: 'Loading..', cancelable: false, data: { 'deploy' : '0', 'version': '000000', 'rsp' : '0b3235695f40f279ba3bda96497b894eb457ce73f8dcd6ec4d2c39d1fa622dac7b8e4c5 }, onSuccess: function(recevedData, setting) { M.tool.log( "onSuccess", recevedData ); alert( "onSuccess, " + JSON.stringify(recevedData) ); }, "onError": function(errorCode, errorMessage, setting) { M.tool.log( "onError", errorCode, errorMessage ); alert( "onError, " + errorCode + ", " + errorMessage ); } }); SOCKET 통신 M.net.socket.send(setting) Changed in version 2.2.0. Arguments • setting (Object) – 리소스 업데이트를 위한 설정 정보 • setting.server (String) – 타겟 서버 • setting.path (String) – 전문 코드 • setting.timeout (int) – 타임 아웃 (millisecond) 2.2. Addon 79 Morpheus Document, Release Lastest • setting.dummy (Bool) – 더미전문 여부 • setting.encrypt (Bool) – 데이터 암복호화 여부 (네이티브 NetworkManager에 구현이 되어있어야함) • setting.indicator (String) – 인디케이터 정보 • setting.success (Function) – 성공 여부에 따라 호출되는 콜백 함수 success(receivedData) Arguments • receivedData (Object) – 실행 결과 Arguments • setting.error (Function) – 오류 발생 시 콜백 함수 error(errCode, errMessage) Arguments • errCode (String) – 에러 코드 • errMessage (String) – 에러 메세지 •socket 네트워크 통신을 한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • reqdata = data • secure = encrypt • trcode = path • onsuccess = success • onerror = error Example: var sendData = new DataSendingHandler(); sendData.putHeadInfo("command","0"); var templeteData = new DataReceivingHandler(); M.net.socket.send({ 'server': 'TCP_TEST', 'path': 'S14', 'data': sendData, 'templeteData': templeteData, 'encrypt': false, 'indicator': { 'show': false, 'message': '', 'cancelable': false }, 'start': function( setting ) { WNLog("CJD", "socket.send.start : " + JSON.stringify(setting)); console.log( 'socket.send.start', setting ); }, 'finish': function( setting ) { WNLog("CJD", "socket.send.finish : " + JSON.stringify(setting)); console.log( 'socket.send.finish', setting ); }, 'success': function(receivedData, trCode) { 80 Chapter 2. API Morpheus Document, Release Lastest WNLog("CJD", "socket.send.success"); console.log( 'socket.send.success' ); if(receivedData.length > 0){ var strBuff = ''; for(var i=0; i<receivedData.length; i++){ strBuff += '<li>'; strBuff += ' <div class="hbox jc">'; strBuff += ' <div class="wifi_info">'; strBuff += ' <p class="name">' + receivedD strBuff += ' </div>'; strBuff += ' <p class="icon_wifi ' + getWifiIcon(g strBuff += ' </div>'; strBuff += '</li>'; } $("#wifiList").html(strBuff); $("#wifiList > li").on("click", function(){ var $this = $(this); mPageHtml("wifi_setting", { param : { SSID : receivedData[$this.index()].SSID } }); }); } }, 'error': function() { WNLog("CJD", "socket.send.error"); console.log( 'socket.send.error' ); popup.confirm.create({ message : "목록 조회에 실패했습니다. 설정을 확인하시겠습니까?", yesCB : function(){ exWNMoveToWifiSetting(); }, noCB : function(){ mPageBack(); } }); } }); 리소스 업데이트 M.net.res.update(setting) Changed in version 2.0.0. Arguments • setting (Object) – 리소스 업데이트를 위한 설정 정보 • setting.finish (Function) – 리소스 업데이트 후 호출되는 콜백 함수 finish(status, info) Arguments • status (String) – 실행 결과 코드 • info (Object) – 공지 사항, 앱 업데이트 정보 • info.app_version_info (Object) – 앱 업데이트 정보 2.2. Addon 81 Morpheus Document, Release Lastest • info.notice (Object) – 공지 사항 정보 Arguments • setting.progress (Function) – 리소스 업데이트 진행 상태 콜백 함수 progress(totalSize, readSize, remainingSize, percentage) Arguments • totalSize (String) – 리소스 총 파일 크기 • readSize (String) – 현재까지 받은 크기 • remainingSize (String) – 남은 크기 • percentage (String) – 현재까지 받은 크기 백분율 Arguments • setting.error (Function) – 리소스 업데이트 오류 발생 시 콜백 함수 error(errCode, errMessage) Arguments • errCode (String) – 에러 코드 • errMessage (String) – 에러 메세지 •리소스 동적 업데이트를 한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • onprogress = progress • onfinish = finish • onerror = error Example: var nextPage = "/www/html/common/main.html"; M.net.res.update({ finish : function(status, info, option) { switch (status) { // 리소스 업데이트 성공 case 'SUCCESS': M.page.html(nextPage, {action:"CLEAR_TOP"}); break; // 리소스 업데이트 성공 And Refresh case 'SUCCESS_AND_REFRESH': M.page.repalce(); break; // 앱 권장 업데이트 case 'RECOMMENDED_APP_UPDATING' : if (confirm( M.locale.localizedString("message_resource_update_recommanded_app_updati var appUrl = info.app_version_info.download_market_url; M.apps.browser(appUrl); } else { M.page.html(nextPage, {action:"CLEAR_TOP", delay:600}); } break; 82 Chapter 2. API Morpheus Document, Release Lastest // 앱 강제 업데이트 case 'FORCED_APP_UPDATING' : if (confirm( M.locale.localizedString("message_resource_update_force_app_updating") ) var appUrl = info.app_version_info.download_market_url; M.apps.browser(appUrl); } else { M.sys.exit(); } break; // 라이센스 체크 에러 case 'LICENSE_IS_NOT_EXISTENCE': // 라이센스 무결성 회손 case 'BROKEN_INTEGRITY_OF_LICENSE': // 라이센스 기간 만료 case 'EXPIRED_LICENSE': if (confirm( M.locale.localizedString("message_resource_update_license_error") )) { M.net.res.retry(); } else { M.sys.exit(); } break; // 설치 메모리 부족 case 'INSUFFICIENT_MEMORY': if (confirm( M.locale.localizedString("message_resource_update_insufficient_memory") M.net.res.retry(); } else { M.sys.exit(); } break; // 외장 메모리 카드 사용 오류 case 'EXT_MEM_NOT_AVAIL': if ( confirm(M.locale.localizedString("message_resource_update_error_ext_memory")) ) M.net.res.retry(); } else { M.sys.exit(); } break; // UNDEFINED ERROR default: if (confirm( "알수없는 오류?" )) { M.net.res.retry(); } else { M.sys.exit(); } break; } }, progress : function(total, read, remain, percentage, option) { console.log('** progress', total, read, remain, percentage); var progressBarWidth = Math.max( Math.min( percentage, 100 ), 0 ) + "%"; $(".progress-bar").css("width", progressBarWidth); $(".progress-percent").html( percentage + '%' ); 2.2. Addon 83 Morpheus Document, Release Lastest }, error : function(errCode, errMsg, option) { M.debug.error("** error : ", errCode, errMsg); if ( confirm(M.locale.localizedString('message_resource_update_unknown_error')) ) { M.net.res.retry(); } else { M.sys.exit(); } } }); 통신 에러 코드(for Android) CODE 9994 9995 9996 9997 9998 9999 404 Description 네트워크 URL Error 네트워크 통신중 취소처리 네트워크 연결 에러 통신중 에러 / 통신 내부 에러 네트워크 응답시간 초과 에러 서버에서 리턴된 에러 Not found(네트워크 연결 실패) 2.2.5 MNetwork Extends MNetExt Framework 에 대한 필수 API 를 정의 NetExt API 확장된 네크워크 관련된 기능들을 제공 HTTP 파일 업로드 M.net.http.upload(setting) Changed in version 2.0.0. Arguments • setting (Object) – 리소스 업데이트를 위한 설정 정보 • setting.url (String) – 파일을 업로드 하기 위한 url • setting.headers (Object) – http header 정보 • setting.parameters (Object) – 업로드 파라메터 정보 • setting.body (Array) – multipart body 정보 • setting.encoding (String) – 인코딩 • setting.indicator (Bool) – 인디케이터 여부 • setting.finish (Function) – 파일 업로드 완료 finish(statusCode, header, body) 84 Chapter 2. API Morpheus Document, Release Lastest Arguments • statusCode (String) – 실행 결과 코드 • header (String) – 응답 헤더 정보 • body (String) – 응답 바디 정보 Arguments • setting.progress (Function) – 파일 업로드 프로그래스 progress(total, current, remaining, percentage) Arguments • total (String) – 업로드 파일 사이즈 • current (String) – 업로드된 파일 사이즈 • remaining (String) – 남은 파일 사이즈 • percentage (String) – 진행률 퍼센트 •Http multipart 파일 업로드를 한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • header = headers • param = parameters • params = parameters • onprogress = progress • onfinish = finish • callback = finish Example: M.net.http.upload({ url: "http://lab.morpheus.kr/api/test/file/upload", header: {}, params: {}, body: [ { name: "imgs", content: "test.zip", type: "FILE" }, { name: "imgs", content: "test/test1.txt", type: "FILE" }, { name: "imgs", content: "test/test2.txt", type: "FILE" } ], encoding : "UTF-8", finish : function(status, header, body, setting) { console.log(status); }, progress : function(total, current) { console.log(total, current); } }); HTTP 파일 다운로드 M.net.http.download(setting) Changed in version 2.0.0. 2.2. Addon 85 Morpheus Document, Release Lastest Arguments • setting (Object) – 파일 다운로드를 위한 설정 정보 • setting.url (String) – 다운로드 파일 url • setting.directory (String) – 다운로드 폴더 • setting.contentType (String) – 컨텐트 타입 • setting.timeout (String) – 타입 아웃 (milliseconds) • setting.encoding (String) – 인코딩 타입 • setting.indicator (Bool) – 인디케이터 여부 • setting.overwrite (Bool) – 덮어 쓰기 여부 • setting.finish (Function) – 파일 업로드 완료 finish(statusCode, header, fileInfo) Arguments • statusCode (String) – 실행 결과 코드 • header (String) – 응답 헤더 정보 • fileInfo (String) – 다운로드 파일 정보 Arguments • setting.progress (Function) – 파일 업로드 프로그래스 progress(total, current, remaining, percentage) Arguments • total (String) – 다운로드 파일 사이즈 • current (String) – 다운로드된 파일 사이즈 • remaining (String) – 남은 파일 사이즈 • percentage (String) – 진행률 퍼센트 •web server에 있는 파일을 다운로드 한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • mimetype = contentType • dir = directory • path = directory • header = headers • param = parameters • params = parameters • data = parameters • onprogress = progress • onfinish = finish • callback = finish Example: 86 Chapter 2. API Morpheus Document, Release Lastest M.net.http.download({ url: 'https://s3-ap-northeast-1.amazonaws.com/morpheus-storage/lab/documents/morpheus_2.0_introdu indicator: true, overwrite: true, progress: function(total, current) { console.log(total, current); }, finish: function( statusCode, header, fileInfo ) { console.log( statusCode, header, fileInfo ); if (statusCode == 200) { console.log( JSON.stringify( fileInfo ) ); } else { console.log( JSON.stringify( arguments ) ); } } }); FTP 파일 리스트 M.net.ftp.list(setting) Changed in version 2.0.0. Arguments • setting (Object) – ftp 파일 리스트를 가져오기 위한 설정 정보 • setting.url (String) – ftp 접속을 위한 url • setting.port (String) – ftp 접속을 위한 port • setting.acccount (Object) – account 정보 • setting.acccount.username (String) – 접속 id • setting.acccount.password (String) – password • setting.target (Object) – 접속할 path • setting.target.serverpath (String) – 접근할 path • setting.finish (Function) – 리스트 호출 완료 finish(resultCode, listInfo, setting) Arguments • resultCode (String) – 실행 결과 코드 • listInfo (Object) – 가져온 file list 정보 • setting (Object) – 설정값 Arguments • setting.progress (Function) – 파일 정보 가져오기 프로그래스 •ftp 통신을 통해, 파일 리스트를 가져온다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • param = parameters • params = parameters 2.2. Addon 87 Morpheus Document, Release Lastest • onprogress = progress • onfinish = finish • callback = finish Example: M.net.ftp.list('host', { port : '21', account : { username : '', password : '', }, target : { serverpath : '' }, finish : function(resultCode, listInfo, setting) { M.tool.log( resultCode, listInfo ); alert( resultCode + ", " + JSON.stringify(listInfo) ); } }); FTP 파일 업로드 M.net.ftp.upload(setting) Changed in version 2.0.0. Arguments • setting (Object) – ftp로 파일을 업로드 하기 위한 설정 정보 • setting.url (String) – ftp 접속을 위한 url • setting.port (String) – ftp 접속을 위한 port • setting.acccount (Object) – account 정보 • setting.acccount.username (String) – 접속 id • setting.acccount.password (String) – password • setting.target (Object) – 접속할 path • setting.target.localpath (String) – 단말기의 local path(upload할 file path) • setting.target.serverpath (String) – upload path • setting.finish (Function) – 파일 업로드 완료 finish(resultCode, resultMessage, setting) Arguments • resultCode (String) – 실행 결과 코드 • resultMessage (Object) – 실행 결과 메시지 • setting (Object) – 설정값 Arguments • setting.progress (Function) – 파일 업로드 프로그래스 •ftp 통신을 통해, 파일을 업로드 한다. 88 Chapter 2. API Morpheus Document, Release Lastest Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • param = parameters • params = parameters • onprogress = progress • onfinish = finish • callback = finish Example: M.net.ftp.upload('host', { port : '21', account : { username : 'anonymous', password : '', }, target : { localpath : 'localpath', serverfiles : [ 'server_file0', 'server_file1', ], }, finish : function(resultCode, resultMessage, setting) { if (resultCode == 'SUCCESS') { // TODO : success handle code here } else { // TODO : fail handle code here } } }); FTP 파일 다운로드 M.net.ftp.download(setting) Changed in version 2.0.0. Arguments • setting (Object) – ftp로 파일을 download 하기 위한 설정 정보 • setting.url (String) – ftp 접속을 위한 url • setting.port (String) – ftp 접속을 위한 port • setting.acccount (Object) – account 정보 • setting.acccount.username (String) – 접속 id • setting.acccount.password (String) – password • setting.target (Object) – 접속할 path • setting.target.localpath (String) – 단말기의 local path(download 할 file path) • setting.target.serverpath (String) – download path • setting.finish (Function) – 파일 download 완료 finish(resultCode, resultMessage, setting) Arguments 2.2. Addon 89 Morpheus Document, Release Lastest • resultCode (String) – 실행 결과 코드 • resultMessage (Object) – 실행 결과 메시지 • setting (Object) – 설정값 Arguments • setting.progress (Function) – 파일 download 프로그래스 •ftp 통신을 통해, 파일을 download 한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • param = parameters • params = parameters • onprogress = progress • onfinish = finish • callback = finish Example: M.net.ftp.download('host', { port : '21', account : { username : 'anonymous', password : '', }, target : { localpath : 'localpath', serverfiles : [ 'server_file0', 'server_file1', ], }, finish : function(resultCode, resultMessage, setting) { if (resultCode == 'SUCCESS') { // TODO : success handle code here } else { // TODO : fail handle code here } } }); 통신 에러 코드(for Android) CODE 9994 9995 9996 9997 9998 9999 404 Description 네트워크 URL Error 네트워크 통신 중 취소처리 네트워크 연결 에러 통신중 에러 / 통신 내부 에러 네트워크 응답시간 초과 에러 서버에서 리턴된 에러 Not found(네트워크 연결 실패) 2.2.6 MPopup MPopup Framework 에 대한 필수 API 를 정의 90 Chapter 2. API Morpheus Document, Release Lastest Popup API 팝업 관련된 기능들을 제공 경고 팝업 M.pop.alert(setting) Changed in version 2.0.0. Arguments • setting (Object) – 알림창 설정 정보 • setting.title (String) – 알림창 타이틀 • setting.message (String) – 알림창 메세지 • setting.buttons (Array) – 알림창 버튼 타이틀 Array • setting.callback (Function) – 알림창 콜백 함수 callback(index) Arguments • index (String) – 선택된 인덱스 •알림 팝업을 호출한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • button = buttons • msg = message • click = callback • onclick = callback Example: • Alert Popup (Only Message) M.pop.alert('message'); • Alert Popup (Callback) M.pop.alert('message', function(index, setting) { M.tool.log( "index", index ); alert( "index: " + index ); }); • Alert Popup (Title, Buttons) M.pop.alert('message', { title : 'title', buttons : [ 'button0', 'button1',] }); • Alert Popup(Title, Buttons, Callback) 2.2. Addon 91 Morpheus Document, Release Lastest M.pop.alert({ title: '공지', message: '메세지를 확인합니다.', buttons: ['확인', '취소'], callback: function(index) { console.log( "index: " + index ); }); 데이트 팝업 M.pop.date(setting) Changed in version 2.0.0. Arguments • setting (Object) – 알림창 설정 정보 • setting.dateType (String) – date picker 타입 ( HM12:MMddAM (오전/오 후 1~12시 0~59분), HM24:MMdd (0~23시 0~59분), YMD:yyyyMMdd (년월일), YM:yyyyMM (년월), MMYYYY:MMyyyy (월년), YYYY:yyyy (년), MM:MM (월), DD:DD (일) ) • setting.initDate (String) – date picker의 초기 date를 지정한다.(option.type 에 따른 format string) • setting.minDate (String) – date picker의 하한 date를 지정한다.(option.type 에 따른 format string) • setting.maxDate (String) – date picker의 하한 date를 지정한다.(option.type 에 따른 format string) • setting.interval (String) – type이 HM12, HM24 일때, 분(min)의 interval을 설정 할 수 있다. 60을 나머지 없이 나눌수 있는 수만 동작한다.(ex> 10,15,30) • setting.callback (Function) – 선택 결과 반환 콜백 callback(status, result) Arguments • index (String) – 선택된 인덱스 •데이트 피커를 호출한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • type = dateType • msg = initDate • startdate = minDate • enddate = maxDate • onselect = callback Example: M.pop.date({ dateType initDate minDate : maxDate 92 : 'YMD', : '20130714', '19790101', : '21001231', Chapter 2. API Morpheus Document, Release Lastest callback : function(result, setting) { console.log( JSON.stringify( result )); } }); • 날짜 선택 Popup (HM12) M.pop.date({ type : 'HM12', initDate : '1128PM' }, function(result, setting) { M.tool.log( result ); alert( JSON.stringify( result )); }); • 날짜 선택 Popup (HM12+Interval) M.pop.date({ type : 'HM12', initDate : '1145PM', interval : 15 }, function(result, setting) { M.tool.log( result ); alert( JSON.stringify( result )); }); • 날짜 선택 Popup (HM24) M.pop.date({ type : 'HM24', initDate : '2330' }, function(result, setting) { M.tool.log( result ); alert( JSON.stringify( result )); }); • 날짜 선택 Popup (HM12+Interval) M.pop.date({ type : 'HM12', initDate : '1130PM', interval : 30 }, function(result, setting) { M.tool.log( result ); alert( JSON.stringify( result )); }); • 날짜 선택 Popup (MMYYY) M.pop.date({ type : 'MMYYYY', initDate : '072013' }, function(result, setting) { M.tool.log( result ); alert( JSON.stringify( result )); }); 2.2. Addon 93 Morpheus Document, Release Lastest • 날짜 선택 Popup (YYYY) M.pop.date({ type : 'YYYY', initDate : '2013' }, function(result, setting) { M.tool.log( result ); alert( JSON.stringify( result )); }); • 날짜 선택 Popup (MM) M.pop.date({ type : 'MM', initDate : '07' }, function(result, setting) { M.tool.log( result ); alert( JSON.stringify( result )); }); • 날짜 선택 Popup (DD) M.pop.date({ type : 'DD', initDate : '12' }, function(result, setting) { M.tool.log( result ); alert( JSON.stringify( result )); }); • 날짜 선택 Popup (YMD) M.pop.date({ type : 'YMD', initDate : '20130723', startDate : '19790101', endDate : '21001231' }, function(result, setting) { M.tool.log( result ); alert( JSON.stringify( result )); }); • 날짜 선택 Popup (YM) M.pop.date({ type : 'YM', initDate : '201307', startDate : '197901', endDate : '210012' }, function(result, setting) { M.tool.log( result ); alert( JSON.stringify( result )); }); 94 Chapter 2. API Morpheus Document, Release Lastest 토스트 메세지 M.pop.instance(setting) Changed in version 2.0.0. Arguments • setting (Object) – 알림창 설정 정보 • setting.message (String) – 인스턴스 메세지 • setting.showtime (String) – 보여질 시간 ( SHORT:짧게,LONG:길게 ) •인스턴스 메세지를 출력한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • show = showTime • time = showTime Example: • Toast (short) M.pop.instance({message:"메세지입니다.", showtime:'SHORT'}); • Toast (normal) M.pop.instance("message"); • Toast (time) M.pop.instance("message", {time:1000}); • Toast (long) M.pop.instance("message", {time:'LONG'}); 리스트 팝업 M.pop.list(setting) Changed in version 2.0.0. Arguments • setting (Object) – 알림창 설정 정보 • setting.mode (String) – 복수 선택 가능 모드 플래그 ( SINGLE: 단건 선택 가능 모드, MULTI: 복수 선택 가능 모드 ) • setting.title (String) – 리스트 팝업 타이틀 • setting.message (String) – 리스트 팝업 메세지 • setting.cancelable (String) – 팝업 취소 가능 여부 • setting.buttons (Array) – 리스트 팝업 버튼 Array • setting.list (Array) – 출력 리스트 데이터, * 한개 이상의 데이터가 입력되어 야 한다. ( title: 데이터 타이틀, value: 데이터 값 ) 2.2. Addon 95 Morpheus Document, Release Lastest • setting.selected (int) – 초기 선택 값 (Multi 모드의 경우, Array를 사용한다.) • setting.callback (Function) – 리스트 팝업 선택 콜백 함수 callback(index, info) Arguments • index (String) – 선택된 인덱스 • info (String) – 선택 정보 •리스트 팝업을 호출한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • select = selected • button = buttons • msg = message • onselect = callback Example: • list 선택 popup (SINGLE) M.pop.list({ mode : 'SINGLE', title : '선택', message : '선택해주세요', buttons : ['확인', '취소'], list : [ { title : '데이타0', value : 'value0'}, { title : '데이타1', value : 'value1'}, { title : '데이타2', value : 'value2'}, { title : '데이타3', value : 'value3'}, { title : '데이타4', value : 'value4'} ], selected : 2, callback: function (buttonIdx, rowInfo, setting){ console.log( buttonIdx + ", " + JSON.stringify( rowInfo ) ); }); • list 선택 popup (MULTI) M.pop.list({ mode : 'MULTI', title : 'title', message : 'message', button : ['button0', 'button1', 'button2'], list : [{ title : 'row0', value : 'value0'}, { title : 'row1', value : 'value1'}, { title : 'row2', value : 'value2'}, { title : 'row3', value : 'value3'}, { title : 'row4', value : 'value4'}], selected : [0, 2], }, function (buttonIdx, rowInfo, setting){ M.tool.log( buttonIdx, rowInfo ); alert( buttonIdx + ", " + JSON.stringify( rowInfo ) ); }); 96 Chapter 2. API Morpheus Document, Release Lastest 2.2.7 MZip MZip Framework 에 대한 필수 API 를 정의 Zip API 압축 관련 기능들을 제공 압축 M.zip.zip(setting) Changed in version 2.2.0. Arguments • setting (Object) – 압축을 위한 설정 정보 • setting.path (String) – 생성할 zip file 경로 • setting.list (Array) – 압축할 파일들 • setting.overwrite (Bool) – 덮어 쓰기 여부 • setting.indicator (Bool) – 인디케이터 여부 • setting.password (String) – 압축 파일 비밀번호 • setting.callback (Function) – 압축 결과 콜백 함수 callback(status, result) Arguments • status (String) – 실행 결과 코드 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) • result (Object) – 실행 결과 • result.path (String) – 파일의 PATH • result.alias (String) – 파일의 PATH • result.source (String) – 파일의 full PATH • result.size (int) – 파일의 크기 •파일을 압축한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • files = list • from = list • to = path • alias = path • source = path • zippath = path • compressionlevel = compression • complevel = compression • onfinish = callback 2.2. Addon 97 Morpheus Document, Release Lastest • finish = callback Example: var list = M.file.list('test').list; M.zip.zip({ path: 'test.zip', overwrite: true, list: list, indicator: false, password: '', callback: function( status, result ) { console.log( JSON.stringify( result ) ); } }); 압푹 해제 M.zip.unzip(setting) Changed in version 2.2.0. Arguments • setting (Object) – 압축 해제를 위한 설정 정보 • setting.path (String) – zip file 경로 • setting.destination (String) – 압축 해제 경로 • setting.overwrite (Bool) – 덮어 쓰기 여부 • setting.indicator (Bool) – 인디케이터 여부 • setting.callback (Function) – 압축 해제 콜백 함수 callback(status, result) Arguments • status (String) – 실행 결과 코드 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) • result (Object) – 실행 결과 • result.path (String) – 파일의 PATH • result.alias (String) – 파일의 PATH • result.source (String) – 파일의 full PATH • result.size (int) – 파일의 크기 •파일을 압축 해제한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • files = list • from = list • to = path • alias = path • source = path • zippath = path 98 Chapter 2. API Morpheus Document, Release Lastest • compressionlevel = compression • complevel = compression • onfinish = callback • finish = callback Example: M.zip.unzip({ path: 'test.zip', destination: 'doc:///res', overwrite: true, indicator: false, callback: function() { console.log( JSON.stringify( arguments ) ); } }); 2.3 Plugin 2.3.1 MQr MQr Framework 에 대한 필수 API 를 정의 Qr API Qr code 관련 기능을 제공한다. Qr code 스캔 M.qr.open(setting) Changed in version 2.1.4.4. Arguments • setting (Object) – 스캔을 위한 설정 정보 • setting.flash (Bool) – 플래시 사용 여부 • setting.fadetoggle (String) – 버튼 메뉴 애니메이션 • setting.orientation (String) – 화면 오리엔테이션 ( _OrientationType ) • setting.callback (Function) – 스캔 결과 콜백 함수 callback(status, result) Arguments • status (String) – 실행 결과 코드 ( SUCCESS: 성공 코드, FAIL: 실패 코드 ) • result (Object) – 실행 결과 • result.error (String) – 오류 시 메세지 • result.format (String) – 스캔한 결과의 포맷 • result.text (String) – 스캔한 결과의 텍스트 2.3. Plugin 99 Morpheus Document, Release Lastest •Qr code 를 스캔한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • onscan = callback • orient = orientation • orientationType = orientation • menuanimation = fadetoggle Example: M.plugin('qr').open({ flash: true, fadeToggle: true, orientation: 'LANDSCAPE', onscan: function( result ) { if ( result.status === 'NS' ) { console.log('This QRCode Plugin is not supported'); } else if ( result.status === 'CANCEL' ) { console.log('Scanning is canceled'); } else if ( result.status !== 'SUCCESS' ) { if ( result.message ) { console.log( result.status + ":" + result.message ); } else { console.log( 'This QRCode Plugin is failed' ); } } else { if ( result.text ) { console.log( result.format + ":" + result.text ); } else { console.log( 'QRCode data is not scanning' ); } } } }); Orientation Type • 모든 Orientation 값은 Application 설정에 영향을 받음 • Manifest.xml 에서도 orient 값이 DEFAULT 인 경우 Application 설정의 첫번째 값을 적용 100 Chapter 2. API Morpheus Document, Release Lastest Type DEFAULT PORTRAIT PORT LANDSCAPE LAND PORTRAIT|REVERSE PORT|REVERSE PORTREV LANDSCAPE|REVERSE LAND|REVERSE LANDREV ALL Int 0 1 1 2 2 3 3 3 4 4 4 5 Description Manifest.xml 에서 설정한 orient 값 적용 세로모드, 홈버튼이 아래인 세로 방향으로 회전 유지 PORTRAIT 을 축약 가로모드, 왼쪽 회전된 상태 유지 LANDSCAPE 를 축약 세로모드, 세로 방향만 허용, 회전 가능 PORTRAIT 을 축약 PORTRAIT|REVERSE 를 축약 가로모드, 가로 방향만 허용, 회전 가능 LANDSCAPE 를 축약 LANDSCAPE|REVERSE 를 축약 모든 방향으로 허용 2.3.2 MDrawing MDrawing Framework 에 대한 필수 API 를 정의 Drawing API 드로잉 관련 기능을 제공한다. 드로잉 화면 생성 M.drawing.create(setting) Changed in version 2.0.0. Arguments • setting (Object) – 드로잉을 위한 설정 정보 • setting.savePoint (String) – 저장 위치 설정 ( SavePoint ) • setting.path (String) – 저장 경로 • setting.format (String) – 이미지 저장 포맷 ( Format ) • setting.privacy (Function) – 갤러리에 보여줄지 여부 • setting.orientation (Function) – 화면 오리엔테이션 ( Orientation Type ) • setting.callback (Function) – 드로잉 결과 반환 콜백 함수 •드로잉 화면을 생성한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • alias = path • source = path • url = path • uitype = userInterfaceType • orient = orientation • orientationtype = orientation • done = callback 2.3. Plugin 101 Morpheus Document, Release Lastest • ondone = callback • onsave = callback Example: M.drawing.create({ savePoint: 'APPINSIDE', format: 'PNG', orientation: 'DEFAULT', callback: function(status, result) { console.log( JSON.stringify( result ) ); } }); 드로잉 이미지 열기 M.drawing.open(setting) Changed in version 2.0.0. Arguments • setting (Object) – 이미지 드로잉을 위한 설정 정보 • setting.savePoint (String) – 저장 위치 설정 ( SavePoint ) • setting.path (String) – 저장 경로 • setting.format (String) – 이미지 저장 포맷 ( Format ) • setting.privacy (Function) – 갤러리에 보여줄지 여부 • setting.orientation (Function) – 화면 오리엔테이션 ( Orientation Type ) • setting.callback (Function) – 드로잉 결과 반환 콜백 함수 •드로잉 이미지 화면을 생성한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • alias = path • source = path • url = path • uitype = userInterfaceType • orient = orientation • orientationtype = orientation • done = callback • ondone = callback • onsave = callback Example: M.drawing.open({ savePoint: 'APPINSIDE', format: 'PNG', orientation: 'DEFAULT', callback: function(status, result) { 102 Chapter 2. API Morpheus Document, Release Lastest console.log( JSON.stringify( result ) ); } }); Save Point Type APPINSIDE APPOUTSIDE Int 0 1 Description 내부 저장소에 저장 외부 저장소에 저장 Format Type PNG JPG Int 0 1 Description PNG 포맷 JPG 포맷 User Interface Type Type DEFAULT BUTTON Int 0 1 Description 기본 드로잉 화면 버튼 구성 드로잉 화면 Orientation Type • 모든 Orientation 값은 Application 설정에 영향을 받음 • Manifest.xml 에서도 orient 값이 DEFAULT 인 경우 Application 설정의 첫번째 값을 적용 Type DEFAULT PORTRAIT PORT LANDSCAPE LAND PORTRAIT|REVERSE PORT|REVERSE PORTREV LANDSCAPE|REVERSE LAND|REVERSE LANDREV ALL Int 0 1 1 2 2 3 3 3 4 4 4 5 Description Manifest.xml 에서 설정한 orient 값 적용 세로모드, 홈버튼이 아래인 세로 방향으로 회전 유지 PORTRAIT 을 축약 가로모드, 왼쪽 회전된 상태 유지 LANDSCAPE 를 축약 세로모드, 세로 방향만 허용, 회전 가능 PORTRAIT 을 축약 PORTRAIT|REVERSE 를 축약 가로모드, 가로 방향만 허용, 회전 가능 LANDSCAPE 를 축약 LANDSCAPE|REVERSE 를 축약 모든 방향으로 허용 2.3.3 MViewer MViewer Framework 에 대한 필수 API 를 정의 2.3. Plugin 103 Morpheus Document, Release Lastest Viewer API 문서 뷰어 관련 기능을 제공한다. 문서 뷰어 이동 M.plugin(‘viewer.doc’).open( setting) Changed in version 2.1.4.4. Arguments • setting (Object) – 문서 뷰어를 위한 설정 정보 • setting.path (String) – 문서 저장 경로 • setting.orientation (String) – 화면 오리엔테이션 ( _OrientationType ) • setting.animation (String) – 화면 애니메이션 ( _AnimationType ) •로컬에 있는 문서를 보기위한 화면으로 이동한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • alias = path • source = path • url = path • orient = orientation • orientationtype = orientation • animate = animation • animationtype = animation Example: var result = M.plugin('viewer.doc').open({ path: 'https://reference.wolfram.com/language/ref/format/HTML.html', orientation: 'LANSCAPE' }); if ( result.status !== 'SUCCESS' ) { console.log( JSON.stringify( result ) ); } 구글 뷰어 이동 M.plugin(‘viewer.doc’).open( setting) Changed in version 2.1.4.4. Arguments • setting (Object) – 문서 뷰어를 위한 설정 정보 • setting.url (String) – 문서 url • setting.orientation (String) – 화면 오리엔테이션 ( _OrientationType ) • setting.animation (String) – 화면 애니메이션 ( _AnimationType ) •구글 뷰어 화면으로 이동한다. 104 Chapter 2. API Morpheus Document, Release Lastest Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • orient = orientation • orientationtype = orientation • animate = animation • animationtype = animation Example: var result = M.plugin('viewer.doc').gview({ url: 'https://s3-ap-northeast-1.amazonaws.com/morpheus-storage/lab/documents/morpheus_2.0_introdu orientation: 'PORTRAIT' }); console.log( JSON.stringify( result ) ); Orientation Type • 모든 Orientation 값은 Application 설정에 영향을 받음 • Manifest.xml 에서도 orient 값이 DEFAULT 인 경우 Application 설정의 첫번째 값을 적용 Type DEFAULT PORTRAIT PORT LANDSCAPE LAND PORTRAIT|REVERSE PORT|REVERSE PORTREV LANDSCAPE|REVERSE LAND|REVERSE LANDREV ALL Int 0 1 1 2 2 3 3 3 4 4 4 5 Description Manifest.xml 에서 설정한 orient 값 적용 세로모드, 홈버튼이 아래인 세로 방향으로 회전 유지 PORTRAIT 을 축약 가로모드, 왼쪽 회전된 상태 유지 LANDSCAPE 를 축약 세로모드, 세로 방향만 허용, 회전 가능 PORTRAIT 을 축약 PORTRAIT|REVERSE 를 축약 가로모드, 가로 방향만 허용, 회전 가능 LANDSCAPE 를 축약 LANDSCAPE|REVERSE 를 축약 모든 방향으로 허용 Animation Type • Manifest.xml 에서도 animate 값이 DEFAULT 인 경우 SLIDE_LEFT 적용 Type DEFAULT NONE SLIDE_LEFT SLIDE_RIGHT SLIDE_TOP SLIDE_BOTTOM ZOOM_IN ZOOM_OUT FADE MODAL_UP MODAL_DOWN 2.3. Plugin Int 0 1 2 3 4 5 6 7 8 9 10 Description Manifest.xml 에서 설정한 animate 값 적용 애니메이션 효과 없음 왼쪽으로 이동되는 슬라이드 효과 오른쪽으로 이동되는 슬라이드 효과 위쪽으로 이동되는 슬라이드 효과 아래쪽으로 이동되는 슬라이드 효과 줌인 효과 줌아웃 효과 페이드 효과 원본 화면은 고정되어 있고 대상 화면만 위쪽으로 이동되는 슬라이드 효과 원본 화면은 고정되어 있고 대상 화면만 아래쪽으로 이동되는 슬라이드 효과 105 Morpheus Document, Release Lastest 2.3.4 MPrevention MPrevention Framework 에 대한 필수 API 를 정의 Prevention API 앱 위변조 방지를 위한 기능을 제공한다. 루팅 체크 M.plugin(‘prevention’).rooting() Changed in version 2.1.0. Example: var result = M.plugin('prevention').rooting(); if ( result.status === 'SUCCESS' ) { if ( result.rooting === true ) { consloe.log( '루팅폰이 입니다.' ) } else { consloe.log( '루팅폰이 아닙니다' ); } } else { if ( result.error ) { consloe.log( result.error ); } else { consloe.log( JSON.stringify( result ) ); } } 앱 위변조 체크 M.plugin(‘prevention’).fraud( setting) Changed in version 2.1.0.2. Arguments • setting (Object) – 문서 뷰어를 위한 설정 정보 • setting.rooting (Bool) – 루팅 체크 여부 • setting.indicator (Bool) – 인디케이터 표시 여부 • setting.callback (String) – 위변조 체크 결과 콜백 함수 •앱에 대한 위변조 여부를 체크한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • jailbreak = rooting • oncheck = callback • check = callback 106 Chapter 2. API Morpheus Document, Release Lastest • onfinish = callback • finish = callback Example: M.plugin('prevention').fraud( function( event ) { if ( event.status === 'SUCCESS' ) { if ( event.rooting === true ) { consloe.log( '루팅폰이 입니다.' ) } else { if ( event.valid === false ) { consloe.log( '앱이 유효하지 않습니다\n 계속 실행할 수 없어 종료합니다.' ); //M.sys.exit(); } else { consloe.log( '유효한 앱입니다.' ); } } } else { if ( event.error ) { consloe.log( event.error ); } else { consloe.log( JSON.stringify( event ) ); } } }); 2.3.5 MPush MPush Framework 에 대한 필수 API 를 정의 MPush API 푸시 관련 기능을 제공한다. 푸시 서비스 등록 M.plugin(‘push’).remote.registerService( setting) Changed in version 2.2.0. Arguments • setting.callback (String) – 푸시 서비스 등록 콜백 함수 •푸시 서비스 등록한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • finish = callback • onfinish = callback Example: 2.3. Plugin 107 Morpheus Document, Release Lastest M.plugin('push').remote.registerService({ callback: function( status, setting ) { if (status == 'SUCCESS') { console.log('서비스 등록이 성공 하였습니다.'); } else { console.log('서비스 등록이 실패 하였습니다.'); } } }); 푸시 사용자 등록 M.plugin(‘push’).remote.registerUser( setting) Changed in version 2.2.0. Arguments • setting.cuid (String) – 푸시 사용자 아이디 • setting.name (String) – 푸시 사용자 이름 • setting.callback (String) – 푸시 사용자 등록 콜백 함수 •푸시 사용자 등록한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • username = name • finish = callback • onfinish = callback Example: M.plugin('push').remote.registerUser({ cuid: 'tester', name: 'testerName', callback: function( status ) { var info = M.plugin('push').info(); if (status == 'SUCCESS') { console.log('[' + info.CLIENT_UID + '/' + info.CLIENT_NAME + ']의 유저 등록이 성공 하였습니 } else { console.log('[' + info.CLIENT_UID + '/' + info.CLIENT_NAME + ']의 유저 등록이 실패 하였습니 } } }); 푸시 서비스 해제 M.plugin(‘push’).remote.unregisterService( setting) Changed in version 2.2.0. Arguments • setting.callback (String) – 푸시 서비스 등록 콜백 함수 108 Chapter 2. API Morpheus Document, Release Lastest •푸시 서비스 해제한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • finish = callback • onfinish = callback Example: M.plugin('push').remote.unregisterService({ callback: function( status, setting ) { var info = M.plugin('push').info(); if(status == 'SUCCESS') { console.log('[' + info.CLIENT_UID + '/' + info.CLIENT_NAME + ']의 서비스 해제가 성공 하였습니다 } else { console.log('[' + info.CLIENT_UID + '/' + info.CLIENT_NAME + ']의 서비스 해제가 실패 하였습니다 } } }); 푸시 전송 M.plugin(‘push’).remote.send( setting) Changed in version 2.2.0. Arguments • setting.cuid (String) – 수신 대상 • setting.code (String) – 푸시 서비스 코드 (기본값: ‘0001’) • setting.message (String) – 푸시 메세지 • setting.ext (String) – 푸시 ext 정보 • setting.callback (String) – 푸시 송신 결과 콜백 함수 •푸시 메세지를 전송한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • servicecode = code • finish = callback • onsend = callback • onfinish = callback Example: M.plugin('push').remote.send({ cuid:'tester', code: '0001', message: '기본알림입니다.', callback: function( status, setting ) { if (status == 'SUCCESS') { console.log('메세지를 발송하였습니다.'); } else { 2.3. Plugin 109 Morpheus Document, Release Lastest console.log('메세지발송을 실패하였습니다.'); } } }); 로컬 푸시 전송 M.plugin(‘push’).local.send( setting) Changed in version 2.2.0. Arguments • setting.message (String) – 푸시 메세지 • setting.callback (String) – 푸시 송신 결과 콜백 함수 •로컬 푸시 메세지를 전송한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • finish = callback • onfinish = callback Example: M.plugin('push').local.send({ message:'Test', onfinish: function( status, setting ) { if (status == 'SUCCESS') { console.log('메세지를 발송하였습니다.'); } else { console.log('메세지발송을 실패하였습니다.'); } } }); 푸시 사용자 정보 M.plugin(‘push’).info( setting) Changed in version 2.2.0. •푸시 사용자 정보를 가져온다. Example: var info = M.plugin('push').info(); console.log( JSON.stringify( info ) ); 2.3.6 MLocation MLocation Framework 에 대한 필수 API 를 정의 110 Chapter 2. API Morpheus Document, Release Lastest Location API 위치 정보 기능을 제공한다. 위치 정보 M.plugin(“location”).current( setting) Changed in version 2.1.0.2. Arguments • setting (Object) – 위치 정보를 가져오기 위한 설정 정보 • setting.timeout (String) – 타임 아웃 (milliseconds) • setting.maximumAge (String) – 최근 위치 정보 여부를 판단하기 위한 델타 값 • setting.callback (String) – 위치 정보 반환을 위한 콜백 함수 •위치 정보를 가져온다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 • on = callback Example: M.plugin("location").current({ timeout: 10000, maximumAge: 1, callback: function( result ) { if ( result.status === 'NS' ) { console.log('This Location Plugin is not supported'); } else if ( result.status !== 'SUCCESS' ) { if ( result.message ) { console.log( result.status + ":" + result.message ); } else { console.log( 'Getting GPS coords is failed' ); } } else { if ( result.coords ) { console.log( JSON.stringify(result.coords) ); } else { console.log( 'It cann\'t get GPS Coords.' ); } } } }); 2.4 Compatibility Version Update로 인해, 대응되는 API 리스트를 정의 2.4. Compatibility 111 Morpheus Document, Release Lastest 2.4.1 1.x API Compatibility Table 1.x 버전 API WNLog WNSetVariable WNGetVariable WNListAllVariables WNResetAllVariables WNSetVariableToStorage WNGetVariableFromStorage WNListAllStorageVariables WNResetAllStorageVariables WNGetDeviceInfo WNHttpSendData WNSocketSendData WNMakeVibration WNExitProgram WNMoveToHtmlPage WNMoveToNativePage WNBackPage WNReplaceHtmlPage WNGetPageInPStack WNRemovePageInPStack WNTabMoveToHtmlPage WNTabBackPage WNTabCount WNTabRemovePage WNMakeCall WNPopupDatePicker WNPopupDatePickerEx WNGetParameter WNSetParameter WNPutParameter WNListAllParameters WNRemoveParameter WNRemoveAllParameter WNMoveToShowVideo WNMoveToTakePhoto WNMoveToTakeMovie WNGetCommonMediaFiles WNMoveToTakeVoice WNHttpFileUpload WNFtpFileUpload WNFtpFileDownload WNFtpListDownload WNPopupConfirm WNPopupNormalChoice WNPopupSingleChoice WNPopupMultiChoice WNGetMediaFolderInfo WNGetMediaFilesInfo 112 2.x 버전 API M.tool.log M.data.global(key, value) M.data.global(key) M.data.global M.data.removeGlobal M.data.storage(key,value) M.data.storage(key) M.data.storage M.data.removeStorage M.info.device M.net.http.send M.net.socket.send M.sys.vibration M.sys.exit M.page.html M.page.native M.page.back M.page.replace M.info.stack M.page.remove M.page.tab.html M.page.tab.back M.page.tab.count M.page.tab.remove M.sys.call M.pop.date M.pop.date M.data.param(key) M.data.param(key,value) M.data.param(obj) M.data.param() M.data.removeParam(key) M.data.removeParam() M.media.play M.media.camera M.media.camera M.media.library M.media.record M.net.http.upload M.net.ftp.upload M.net.ftp.download M.net.ftp.list M.pop.alert M.pop.list M.pop.list M.pop.list M.media.info M.media.info Continued on next page Chapter 2. API Morpheus Document, Release Lastest Table 2.1 – continued from previous page 1.x 버전 API 2.x 버전 API WNRemoveMediaFiles M.media.removeLibrary WNShowInstanceMessage M.popup.instance WNControlFlash M.sys.flash(status) WNGetFlashState M.sys.flash WNOpenWebBrowser M.apps.browser WNMoveToSendMail M.sys.mail WNMoveToSendSms M.sys.sms(options) WNMoveToOpenAppStore M.apps.store WNMoveToOpenOtherApp M.apps.open WNCheckAppInstalled M.apps.install WNFileIoCreate M.file.create WNFileIoDelete M.file.remove WNFileIoRead M.file.read WNFileIoWrite M.file.write WNFileIoCopy M.file.copy WNFileIoMove M.file.move WNFileIoInfo M.file.info WNFileIoList M.file.info WNLocalDbCreate M.db.create WNLocalDbDelete M.db.remove WNLocalDbOpen M.db.open WNLocalDbClose M.db.close WNLocalDbExecuteSql M.db.execute WNZip M.zip.zip WNUnzip M.zip.unzip WNHttpUpdateResources M.net.res.update WNGetMemoryInfo M.info.memory WNGetMorpheusInfo M.info.app() WNEncryptString M.sec.encrypt WNDecryptString M.sec.decrypt WNMoveToTakeQRCode M.qr.open WNImportEncryptedJS 미지원 WNGetEncryptedFile 미지원 WNGetResourcePath 미지원 2.4. Compatibility 113 Morpheus Document, Release Lastest 114 Chapter 2. API CHAPTER 3 Push 3.1 Push for Android 3.1.1 Push for GCM 1. 개요 Morpheus Push 는 스마트폰 OS에서 지원하는 PNS(Push Notification Server)를 기반으로 한 메세지 전송 플랫폼이다. Android Client 에서는 UPMC WAS 에서 제공하는 Push API 를 각각 버전 규격에 맞춰 연동하여 원할하게 Push Service 를 운영하기 위한 라이브러리를 제공한다. 2. 용어 GCM • Google Cloud Messaging 의 줄임말. • GCM이란 개발자가 서버에서 자신의 Android 애플리케이션으로 데이터를 전송하게 해주는 무료 서비스 이다. • 서버에서 가져와야할 새로운 데이터가 있음을 Android 애플리케이션에 알리는 적은 용량의 메시지이거나, 최대 4KB의 데이터를 포함하는 메시지일 수 있다. • Android application 으로 message를 보낼 수 있는 3rd party server를 허용. • GCM은 message 전달과 순서를 보장하지 않음. • Android application은 message를 받기 위해 실행되고 있을 필요 없음. • GCM은 단순히 원시 data를 android 단말로 보내며, 이 data를 통해 application에서 제어함. • Android 2.2 이상을 지원. • Google Play Store application이 설치되어 있어야 함. 단, Google Play Store를 통해서 application을 배포할 필요는 없음. • Google 계정 필요. 단, Android 4.0.4 이상에서는 Google 계정은 필요 없음. UPMC • Uracle Push Message Center 의 줄임말. 115 Morpheus Document, Release Lastest • Android GCM 서버와 HTTP 프로토콜을 이용하여, Server 대 Server 로 연계하여 구동하는 WAS(Web Application Server) 이다. • Receiver 라고도 불림 Service 등록 • GCM 로 부터 Token 을 할당 받고 UPMC 로 Push 서비스를 사용하겠다고 등록하는 절차 Service 해제 • UPMC 로 Push 서비스를 사용하지 않겠다고 등록을 삭제하는 절차 User 등록 • UPMC 로 Push 서비스에 대한 사용자를 등록 또는 변경하는 절차 수신 확인 • 메시지를 수신 후 UPMC 로 Ack를 주는 절차 • Android 6.0 Doze 모드에 따라, 라이브러리 자동 처리 방식에서, App에서 method를 호출하는 방식으로 변 경됨 읽음 확인 • App에서 메세지를 읽었을때 UPMC 로 Ack를 주는 절차 Application ID • AppID라고도 함 • App의 lic 파일에 포함된 application_id 값으로 앱을 구분하기 위한 코드값. GCM Sender ID – GCM 서비스 등록을 위한 ID Client ID • 사용자로 등록할 Client 의 고유한 ID (CUID 라고도 함) • Email, UserID, Phone Number 또는 Device-UUID 등을 CUID 로 사용 Client Name • 사용자로 등록할 Client 의 이름 (CNAME 라고도 함) • 사용자의 이름이나 Nickname 또는 Device Name 을 CNAME 으로 사용 116 Chapter 3. Push Morpheus Document, Release Lastest GROUPSEQ • Group Sequence Number 의 준말로 User Group의 고유한 Sequence Number PSID • Push Service ID 의 줄임말 • Push 서비스에 대한 고유 ID • GCM에서 할당 받은 Device Token을 사용 CHECK ON SERVICE • 단말이 Push 서비스에 등록되어 있는지를 확인함 • 4.0EE 이상 지원 Push Notification System ID • PNSID라고 함. • GCM, UPNS, APNS등이 여기에 속함 App Alive • 앱의 설치여부를 24시간 주기로 체크 할 수 있도록 함 • 체크 방식 : 앱 구동 후 Push Resister method를 사용시(내부적으로 작동) 4.0EE • 대용량 Push(100만 이상)를 위해 설계된 push 시스템 Packge Name • google play에서 안드로이드 앱을 구별하기 위한 unique 값으로, AndoridManifest.xml 에 선언한다. 3. Push 서비스 절차 버전별 서비스 순서 UPMC 3.5 이하 버전 initPushService => 토큰 요청 => User 등록 => Service 등록 => 메시지 수신 UPMC 3.6 이상 버전 initPushService => Service 등록 (자동으로 Token 요청) => User 등록 => 메시지 수신 0 Chapter 3. Push Morpheus Document, Release Lastest DataFlow Diagram Service Register Sequence Diagram > User Register Sequence Diagram Read Message Sequence Diagram 0 Chapter 3. Push Morpheus Document, Release Lastest >>> 4. 라이브러리 및 설정 파일 라이브러리 • PushLibrary.jar – UPNS/GCM Push 를 활용할 수 있는 라이브러리 4.2. iOS 용 라이브러리 • MPushLibrary.framework – APNS Push 를 활용할 수 있는 라이브러리가 담긴 framework 파일 • MPushLibrary.bundle – framework 을 사용함에 있어 필요한 resource가 담긴 bundle 파일 4.3. 공통 설정 파일 • mcore.mobile.lic – Push 라이센스 정보가 담긴 Push 라이센스 파일 • Manifest.xml – Push 구동을 위한 설정 파일 5. SDK 및 설정 파일 SDK 버전 • Android 용 SDK 파일 – MPushLibrary * GCM / UPNS Push를 활용할 수 있는 라이브러리 – mcore.mobile.lic – Push 라이센스 정보가 담긴 Push 라이센스 파일 – Manifest.xml – Push 구동을 위한 설정 파일 • SDK 적용 방법 – Android Project 의 libs 폴더에 Library 파일에 추가 * Push Library.jar * google-play-gcm.jar – Android Project의 assets/res 폴더에 라이선스 및 설정 파일 추가 * Manifest.xml * mcore.mobile.lic 3.1. Push for Android 1 Morpheus Document, Release Lastest 플러그인 버전 • MPush 플러그인 파일 – MPush.framework * MPushLibrary 기반으로 구현된 Morpheus Push Plugin – MPush.bundle * MPush.framework 을 사용함에 있어 필요한 resource가 담긴 bundle 파일 • 플러그인 적용 방법 – IDE 에서 MPush Plugin 을 업데이트 후 적용 공통 설정 파일 • mcore.mobile.lic – Push 라이센스 정보가 담긴 Push 라이센스 파일 – application_id 값을 Application ID 로 사용 #Tue Feb 17 09:53:27 KST 2015 application_id=xxx.xxx.xxxx.xxxx expiration_date=xxxx-xx-xx mpsn=hZK................X sn=AhA....E.... New in version 3.8.1: Library – 라이센스 파일을 바탕으로 생성한 Security Indexes 값으로 Push 서비스를 운용하는 중에 생성되는 사용자 또는 단말기의 식별 가능한 데이타를 암호화 하여 저장 • Manifest.xml 2 Chapter 3. Push Morpheus Document, Release Lastest – Push 구동을 위한 설정 파일 <?xml version="1.0" encoding="UTF-8"?> <settings> <push> <receiver> <!-- UPMC 설정 정보 --> <log>y</log> <!-- 푸시 알림을 핸들링하기 위한 페이지 설정 --> <page>www/html/common/push.html</page> <!-- 서버 버전 3.6/3.7/4.0--> <version>4.0EE</version> <!-- receiver server url(필수 설정) --> <server>http://pushxx.morpheus.co.kr:18080/</server> <timeout>20000</timeout> <!-- GCM설정 --> <!-- GCM sender-id (push-type이 GCM일경우 필수설정, sender id가 여러개인 <gcm-sender-id>xxxxxxxxxxxx,bbbbbbbbbbb</gcm-sender-id> <!-- 푸쉬타입(필수설정) GCM:구글GCM(Public Push) UPNS:유라클UPNS(Private Push) ALL : Doze Mode 대응 (GCM : Dummy Data, UPNS : real Data) --> <android-push-type>GCM</android-push-type> <!-- stb(셋탑)/mobile(모바일)/mobile_old(디바이스 아이디 이전 버전) --> <device-type>mobile</device-type> </receiver> </push> </settings> – settings.push.receiver 에 대한 설정값 Key log version server device-type Type String String String String Description Push Service 에 대한 Debugging 로그 출력 여부 ( y / n ) UPMC Version ( 3.0, 3.5, 3.6, 3.7, 3.8, 4.0 ) UPMC WAS 서버 URL 서비스 디바이스에 대한 성정 (빈값 : mobile, mobile : mobile용, stb : 셋탑용) String UPNS 서비스 방식 (inapp : 라이브러리형, agent : 별도의 Agent 앱 구현시) String 앱이 살아 있는지 체크를 위한 시간 설정 (단위 : sec) agent-servicetype agent-restartinterval agent-receiveconfirm String upns 메시지 수신 결과에 대한 ack 전송 방법 (auto : 자동 (default), manual : 수동, 직접 구현) AndroidManifest.xml 설정 (ver 3.6 이상 ~ ver 4.0 이하) • Push 구동을 위한 Android 설정 파일 3.1. Push for Android 3 Morpheus Document, Release Lastest <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="[패키지명]" android:versionCode="1" android:versionName="1.0"> <!-- push service&receiver --> <receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <!-- for Gingerbread GSF backward compat --> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="[패키지명]" /> </intent-filter> </receiver> <receiver android:name="[패키지명].receiver.MessageArrivedReceiver"> <intent-filter> <action android:name="[패키지명].GCM_MESSAGE_ARRIVED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <receiver android:name="[패키지명].receiver.PushActionReceiver"> <!--주의 : 오타로 인해, 일부 filter 명이 COMPLETELED 로 정의됨--> <intent-filter> <action <action <action <action <action <action android:name="[패키지명].REG_PUSHSERVICE_COMPLETELED" /> android:name="[패키지명].UNREG_PUSHSERVICE_COMPLETELED" /> android:name="[패키지명].REG_USER_COMPLETELED" /> android:name="[패키지명].UNREG_USER_COMPLETELED" /> android:name="[패키지명].SEND_MESSAGE_COMPLETELED" /> android:name="[패키지명].READ_CONFIRM_COMPLETELED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <receiver android:name="m.client.push.library.receiver.GcmActionReceiver"> <intent-filter> <action android:name="[패키지명].GCM_REG_PUSHSERVICE" /> <action android:name="[패키지명].GCM_UNREG_PUSHSERVICE" /> <action android:name="[패키지명].GCM_UPDATE_PUSHSERVICE_DATE" /> <action android:name="[패키지명].GCM_REG_USER" /> <action android:name="[패키지명].GCM_UNREG_USER" /> <action android:name="[패키지명].GCM_SEND_MESSAGE" /> <action android:name="[패키지명].GCM_READ_CONFIRM" /> <action android:name="[패키지명].GCM_RECEIVE_CONFIRM" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </application> 4 Chapter 3. Push Morpheus Document, Release Lastest <!-- GCM & C2DM --> <permission android:name="[패키지명].permission.C2D_MESSAGE" android:protectionLevel="sign <uses-permission android:name="[패키지명].permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> </manifest> AndroidManifest.xml 설정 (ver 4.0EE 이상) • Push 구동을 위한 Android 설정 파일 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="[패키지명]" android:versionCode="1" android:versionName="1.0"> <!-- push service&receiver --> <receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <!-- for Gingerbread GSF backward compat --> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="[패키지명]" /> </intent-filter> </receiver> <receiver android:name="[패키지명].receiver.MessageArrivedReceiver"> <intent-filter> <action android:name="[패키지명].GCM_MESSAGE_ARRIVED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <receiver android:name="[패키지명].receiver.PushActionReceiver"> <intent-filter> <action android:name="[패키지명].ACTION_COMPLETED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <receiver android:name="m.client.push.library.receiver.GcmActionReceiver"> <intent-filter> <action android:name="[패키지명].ACTION_GCM" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </application> <!-- GCM & C2DM --> <permission android:name="[패키지명].permission.C2D_MESSAGE" android:protectionLevel="sign <uses-permission android:name="[패키지명].permission.C2D_MESSAGE" /> 3.1. Push for Android 5 Morpheus Document, Release Lastest <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> </manifest> GCM 구현시 주의 사항 • Public Push 로 제공되는 안드로이드 GCM 에 대한 설정은 기본적으로 안드로이드에서 제공되는 설정 가이 드와 다르지 않으며 다만 패키지 명을 주의하여 설정해야 한다. • GCMBroadcastReceiver와 GCMIntentService 는 필수 적으로 정의되어야 한다. 6. Push Service 연동 라이브러리 버전 Case #1. Push service 등록 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //앱 실행시점에서 호출 (4.0 EE) PushManager.getInstance().initPushServer(getApplicationContext()); //앱 실행 기준, 1일 1회 호출 권장 (4.0 이하) //앱 실행시마다 호출 (4.0EE이상) PushManager.getInstance().registerPushService(getApplicationContext()); ... } 플러그인 버전 수정중 (2016.4.12) 7. Push APIs Initialize Push Server PushManager.getInstance().initPushServer(Context context); •Manifest.xml 설정 파일에서 라이브러리를 초기화하기 위한 정보를 가져온다. Parameters • context (Context) – 현재 Context PushManager.getInstance().initPushServer(Context context, JSONObject params); •Manifest.xml 설정 파일에서 라이브러리를 초기화하기 위한 정보를 가져온다 6 Chapter 3. Push Morpheus Document, Release Lastest Parameters • context (Context) – 현재 Context • params (JSONObject) – 정보셋팅 •JSONObject key 값에 대한 설명 Key PushConstants.KEY_CNAME PushConstants.KEY_STB_ID PushConstants.KEY_DEVICE_ID PushConstants.KEY_CUSTOM_RECEIVER_SERVER_URL PushConstants.KEY_CUSTOM_UPNS_SERVER_URL Type String String String String String Description 사용자 닉네임 셋탑 아이디 디바이스id UPMC url UPNS url - 예시 : JSONObject params = new JSONObject(); // http://xxx.xxx.x.xx:xxxx 연결할 리시버 서버 url params.put(PushConstants.KEY_CUSTOM_RECEIVER_SERVER_URL, "http://xxx.xxx.x.xx:xxxx"); // tcp://xxx.xxx.x.xx:xxxx 연결할 UPNS 서버 url params.put(PushConstants.KEY_CUSTOM_UPNS_SERVER_URL, "tcp://xxx.xxx.x.xx:xxxx"); Register Service PushManager.getInstance().registerPushService(Context context); •GCM or UPNS에 푸시 서비스를 등록 한다. Parameters • context (Context) – 현재 context PushManager.getInstance().registerPushService(Context context, JSONObject params); •GCM or UPNS에 푸시 서비스를 등록한다. Parameters • context (Context) – 현재 Context • params (JSONObject) – 정보셋팅 •JSONObject key 값에 대한 설명 Key PushConstants.KEY_DEVICE_ID PushConstants.KEY_CUSTOM_RECEIVER_SERVER_URL PushConstants.KEY_CUSTOM_UPNS_SERVER_URL Type String String String Description 디바이스id UPMC url UPNS url - 예시 : JSONObject params = new JSONObject(); params.put(PushConstants.KEY_STB_ID, "{A73E9E2E-9C6B-11E4-AFAE-C55006B96D3C}"); params.put(PushConstants.KEY_DEVICE_ID, "DEVICE-A73E9E2E9C6B11E4AFAEC55006B96D3C"/*생성하여 추 params.put(PushConstants.KEY_CNAME, "GUEST-A73E9E2E9C6B11E4AFAEC55006B96D3C"); 3.1. Push for Android 7 Morpheus Document, Release Lastest 8 Chapter 3. Push Morpheus Document, Release Lastest Register User PushManager.getInstance().registerPushUser(Context context, String cuid, String cname); •Client ID 와 Client Name 으로 User 등록 •GCM or UPNS에 푸시 서비스를 이용할 사용자를 등록한다. 서비스 등록이 성공한 이후 사용자 등록이 가능하다. Parameters • context (Context) – 현재 Context • cuid (String) – Client ID 값 • cname (String) – Client Name 값 -결과값 : Reciver 를 통해, 처리 결과 통보 PushManager.getInstance().registerPushUser (Context context, JSONObject params); •Client ID 와 Client Name 으로 User 등록 •GCM or UPNS에 푸시 서비스를 이용할 사용자를 등록한다. 서비스 등록이 성공한 이후 사용자 등록이 가능하다. Parameters • context (Context) – 현재 Context • params (JSONObject) – 정보셋팅 •JSONObject key 값에 대한 설명 Key PushConstants.KEY_CUID PushConstants.KEY_CNAME PushConstants.KEY_STB_ID PushConstants.KEY_DEVICE_ID Type String String String String Necessary 필수 필수 선택 선택 Description Client ID Client Name STB ID Device ID -결과값 : Reciver 를 통해, 처리 결과 통보 Unregister Service PushManager.getInstance().unregisterPushService(Context context); •GCM or UPNS에 푸시 서비스를 해제 한다. Parameters • context (Context) – 현재 context -결과값 : Reciver 를 통해, 처리 결과 통보 PushManager.getInstance().unregisterPushService(Context context, JSONObject params); •GCM or UPNS에 푸시 서비스를 해제 한다. Parameters 3.1. Push for Android 9 Morpheus Document, Release Lastest • context (Context) – 현재 Context • params (JSONObject) – 정보셋팅 •JSONObject key 값에 대한 설명 Key PushConstants.KEY_CNAME PushConstants.KEY_STB_ID PushConstants.KEY_DEVICE_ID Type String String String Necessary 선택 선택 선택 Description Client Name STB ID Device ID - 예시 : JSONObject params = new JSONObject(); params.put(PushConstants.KEY_STB_ID, "{A73E9E2E-9C6B-11E4-AFAE-C55006B96D3C}"); params.put(PushConstants.KEY_DEVICE_ID, "DEVICE-A73E9E2E9C6B11E4AFAEC55006B96D3C"); Read Push Message PushManager.getInstance().pushMessageReadConfirm (Context context, String notification) •사용자가 메시지를 확인 하는 경우, 메시지 확인 전문을 전송한다. Parameters • context (Context) – 현재 context • notification (String) – 수신한 push message(JSONObject의 string 값) PushManager.getInstance().pushMessageReadConfirm (Context context, String notification, •사용자가 메시지를 확인 하는 경우, 메시지 확인 전문을 전송하며, 서버와 badge count를 동기화 한다. New in version 4.0EE: UPMC Parameters • context (Context) – 현재 context • notification (String) – 수신한 push message(JSONObject의 string 값) • badgeCountType (int) – •badgeCountType key 값에 대한 설명 Key Type PushConString stants.BADGE_TYPE_KEEP PushConString stants.BADGE_TYPE_RESET PushConString stants.BADGE_TYPE_UPDATE 10 Description 1개 읽음 처리, 다음 메시지 수신시, 동일한 값 유지 (Default, -1 후 +1 이 됨) 입력 값으로 초기화, 다음 수신된 값은 입력값 +1로 처리됨 카운트에 따라 업데이트 됨 (읽음여부에 상관없이, push 수신 ++) Chapter 3. Push Morpheus Document, Release Lastest Receive Push Message PushManager.getInstance().pushMessageReceiveConfirm (Context context, String notificati •GCM Only •메시지 수신 시 메시지 수신 전문을 전송한다. Parameters • context (Context) – 현재 context • notification (String) – 수신한 push message(JSONObject의 string 값) PushManager.getInstance().upnsMessageReceiveConfirm (Context context, String msgID); •UPNS Only •mqtt를 통해 수신한 메시지에 대한 응답 (Manifest.xml 에서 <agent-receive-confirm> 값이 “manual”인 경우 작동한다) Parameters • context (Context) – 현재 context • msgID (String) – 수신된 푸시 인텐트로부터 받은 MESSAGEID UPNS Subscribe PushManager.getInstance().upnsSubscribe(Context context); •UPNS Only •서버에 subscribe 요청을 다시한다. (요청 시 오프라인 메시지 수신 [서버로 부터 발송이 실패되어 저장중인 메시지] – 부하가 될 수 있으므로 주의 사용) Parameters • context (Context) – 현재 context Register Group PushManager.getInstance().registerUserGroup (Context context, String groupSeq); •사용자 그룹에 등록한다. Parameters • context (Context) – 현재 context • groupSeq (String) – 등록하고자 하는 그룹의 sequence number UnRegister Group PushManager.getInstance().unregisterUserGroup (Context context, String groupSeq); •사용자 그룹에서 등록을 해제 한다. 3.1. Push for Android 11 Morpheus Document, Release Lastest Parameters • context (Context) – 현재 context • groupSeq (String) – 해제하고자 하는 그룹의 sequence number Init Badge Number PushManager.getInstance().initBadgeNo (Context context, String badgeNo); •서버의 Badge NO를 강제 셋팅 또는 초기화 •Badge NO 최소값 : 0 •Badge NO 최대값 : 1000 Parameters • context (Context) – 현재 context • badgeNo (String) – 서버에서 관리되는 뱃지 count에 대한 초기값 (0을 셋팅하는 경우, push수신시 1로 셋팅됨) Set DeviceBadge Count PushManager.getInstance().setDeviceBadgeCount (Context context, String badgeNo); •폰의 Badge NO를 표기함 •폰의 설치된 런처에 따라, 작동하지 않을 수 있음 •Badge NO 최소값 : 0 •Badge NO 최대값 : 1000 Parameters • context (Context) – 현재 context • badgeNo (String) – 서버에서 관리되는 뱃지 count에 대한 초기값 (0을 셋팅하는 경우, push수신시 1로 셋팅됨) 8. Push APIs 키값 정의 ver 4.0EE 이상 • API 호출에 따른 결과값 (BroadCastReceiver bundle key) 12 Chapter 3. Push Morpheus Document, Release Lastest Key Description (결과값) PushConstant사용자 등록 sEx.COMPLETE_BUNDLE.REG_USER PushConstant사용자 등록 sEx.COMPLETE_BUNDLE.UNREG_USER PushConstantpush service 갱신 sEx.COMPLETE_BUNDLE.UPDATE_PUSHSERVICE_DATE PushConstant푸시 서비스 등록 sEx.COMPLETE_BUNDLE.REG_PUSHSERVICE PushConstant푸시 서비스 해제 sEx.COMPLETE_BUNDLE.UNREG_PUSHSERVICE PushConstant읽음 ack sEx.COMPLETE_BUNDLE.READ_CONFIRM PushConstant수신 ack (gcm only) sEx.COMPLETE_BUNDLE.RECEIVE_CONFIRM PushConstant서비스 등록 여부 (register service sEx.COMPLETE_BUNDLE.IS_REGISTERED_SERVICE 호출 시, 수신 될 수 있음) PushConstant뱃지 넘버 초기화 sEx.COMPLETE_BUNDLE.INITBADGENO PushConstant그룹 등록 sEx.COMPLETE_BUNDLE.REG_GROUP PushConstant그릅 해제 sEx.COMPLETE_BUNDLE.UNREG_GROUP – BroadCastReceiver bundle key return 값 (STATUS CODE - 통신관련) Key Description (결과값) PushCon정상 stants.RESULTCODE_OK PushCon통신 오류 - UPMC서버에 접속할 수 없을때 stants.RESULTCODE_HTTP_ERR - connection 관련 error PushCon인증키 획득 오류 stants.RESULTCODE_AUTHKEY_ERR PushCon응답 오류 - 오류코드를 수신한 경우 stants.RESULTCODE_RESPONSE_ERR PushCon정의되지 않은 예기치 못한 오류가 발생한 stants.RESULTCODE_INTERNAL_ERR 경우 PushCon인증키 획득 오류 stants.RESULTCODE_AUTHKEY_ERR2 – BroadCastReceiver Intent 관련 키값 (처리 결과 ) Key PushConstants.KEY_RESULT PushConstants.KEY_BUNDLE PushConstants.KEY_ISREGISTER PushConstants.KEY_RESULT_CODE PushConstants.KEY_RESULT_MSG 3.1. Push for Android Description (결과값) ACTION_COMPLETED에 Extras용 전체 호출값 번들용 KEY 서비스 등록 여부에 대한 결과값 결과 코드 (정상 : 200) upmc 통신 이후, 수신된 메시지 13 Morpheus Document, Release Lastest 9. UPMC용 BroadcastReceiver 등록 방법 (예시) receiver 등록 private BroadcastReceiver mLoginBroadcastReceiver; public void registerReceiver() { if (mLoginBroadcastReceiver != null) { return; } IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(LoginActivity.this.getPackageName() + PushConstantsEx.ACTION_COM mLoginBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if(!PushUtils.checkValidationOfCompleted(intent, context)){ return; } //intent 정보가 정상적인지 판단 String result = intent.getExtras().getString(PushConstants.KEY_RESULT); String bundle = intent.getExtras().getString(PushConstantsEx.KEY_BUNDLE) JSONObject result_obj = null; String resultCode = ""; String resultMsg = ""; try { result_obj = new JSONObject(result); resultCode = result_obj.getString(PushConstants.KEY_RESULT_CODE) resultMsg = result_obj.getString(PushConstants.KEY_RESULT_MSG); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } //Action에 따라 분기 (이미 서비스 등록이 된 경우 다음 process 이동) if(bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.REG_USER)) { if (resultCode.equals(PushConstants.SUCCESS_RESULT_CODE)) { Toast.makeText(context, "로그인 성공!", Toast.LENGTH_SHORT setSendTest(); }else { Toast.makeText(context, "[LoginActivity] error code: " + } }else if (bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.UNREG_PUSHSERVIC if (resultCode.equals(PushConstants.SUCCESS_RESULT_CODE)) { Toast.makeText(context, "해제 성공!", Toast.LENGTH_SHORT). }else { Toast.makeText(context, "[LoginActivity] error code: " + } }else if (bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.REG_GROUP)) { 14 Chapter 3. Push Morpheus Document, Release Lastest if (resultCode.equals(PushConstants.SUCCESS_RESULT_CODE)) { Toast.makeText(context, "그룹 등록 성공!", Toast.LENGTH_SHO }else { Toast.makeText(context, "[LoginActivity] error code: " + } }else if (bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.UNREG_GROUP)) { if (resultCode.equals(PushConstants.SUCCESS_RESULT_CODE)) { Toast.makeText(context, "그룹 해제 성공!", Toast.LENGTH_SHO }else { Toast.makeText(context, "[LoginActivity] error code: " + } }else if (bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.REG_SERVICE_AND_ if (resultCode.equals(PushConstants.SUCCESS_RESULT_CODE)) { Toast.makeText(context, "로그인 성공!", Toast.LENGTH_SHORT setSendTest(); }else { Toast.makeText(context, "[LoginActivity] error code: " + } }else if (bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.INITBADGENO)) { if (resultCode.equals(PushConstants.SUCCESS_RESULT_CODE)) { Toast.makeText(context, "Badge Number 초기화 성공 !", Toas PushManager.getInstance().setDeviceBadgeCount(getApplica }else { Toast.makeText(context, "[LoginActivity] error code: " + } }else if(bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.IS_REGISTERED_SER String isRegister = ""; try { isRegister = result_obj.getString(PushConstants.KEY_ISRE } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(isRegister.equals("C")){ Toast.makeText(context, "CHECK ON [ 사용자 재등록 필요 !! ]" }else if(isRegister.equals("N")){ Toast.makeText(context, "CHECK ON [ 서비스 재등록 필요 !! ]" }else{ Logger.i("서비스 정상 등록 상태 "); } } } }; this.registerReceiver(mLoginBroadcastReceiver, intentFilter); } receiver 해제 public void unregisterReceiver() { if (mLoginBroadcastReceiver != null) { this.unregisterReceiver(mLoginBroadcastReceiver); 3.1. Push for Android 15 Morpheus Document, Release Lastest mLoginBroadcastReceiver = null; } } 10. GCM Push Payload [ GCM ] • 아래 기술된 메시지는 샘플에 대한 예시이며, 프로젝트에서 표현하고자 하는 방식에 따라, Interface 정의서에 의해, 변경이 가능함. – JSONObject key 값에 대한 설명 [key가 소문자임] Key alert alert.aif ext 활용방법 메시지 타이틀로 이용 수신음 파일명 (적용여부는 상황에 맞게 판단) 일반 메시지인 경우, 메시지로 이용가능하며, Rich 메시지인 경우, 세부 정보를 추가로 획득하여, 표현 Push message의 고유 키값 Push 서비스가 관리되는 앱 ID ( Application ID) 발송자 코드 (서버관점) 발송된 시간 (서버관점) seqno appid sender senddate db_in DB에 저장 여부 (서버 관점) badge 뱃지값 pushkey public push의 토큰 유효성을 위해 관리되는 키 (서버관점) 일반(text) push 메시지 예시 { “aps”:{ “badge”:”14”, “sound”:”alert.aif”, “alert”:”일반 알림” }, “mps”:{ “appid”:”com.uracle.push.test”, “ext”:”메세지 테스트”, “seqno”:”288”, “sender”:”device-android”, “senddate”:”2016041409”, “db_in”:”Y”, “pushkey”:”2427efdf1b62cd9dbdf174bbdff048f8051461e1” } } 16 Chapter 3. Push Morpheus Document, Release Lastest 웹 브라우저 호출 push 메시지 예시 { “aps”:{ “badge”:”15”, “sound”:”alert.aif”, “alert”:”Web 알림” }, “mps”:{ “appid”:”com.uracle.push.test”, “ext”:”1|웹페이지|http://lab.morpheus.kr/push/sample/image|http://lab.morpheus.kr/push/sample/webpage”, “seqno”:”290”, “sender”:”device-android”, “senddate”:”2016041409”, “db_in”:”Y”, “pushkey”:”2427efdf1b62cd9dbdf174bbdff048f8051461e1” } } 동영상 push 메시지 예시 { “aps”:{ “badge”:”16”, “sound”:”alert.aif”, “alert”:”동영상 알림” }, “mps”:{ “appid”:”com.uracle.push.test”, “ext”:”2|기본동영상|http://lab.morpheus.kr/push/sample/image|https://youtu.be/IIu0VMdOe10”, “seqno”:”292”, “sender”:”device-android”, “senddate”:”2016041409”, “db_in”:”Y”, “pushkey”:”2427efdf1b62cd9dbdf174bbdff048f8051461e1” } } 3.1. Push for Android 17 Morpheus Document, Release Lastest 이미지 push 메시지 예시 { “aps”:{ “badge”:”17”, “sound”:”alert.aif”, “alert”:”이미지 알림” }, “mps”:{ “appid”:”com.uracle.push.test”, “ext”:”3|기본이미지|http://lab.morpheus.kr/push/sample/image”, “seqno”:”294”, “sender”:”device-android”, “senddate”:”2016041409”, “db_in”:”Y”, “pushkey”:”2427efdf1b62cd9dbdf174bbdff048f8051461e1” } } 3.1.2 Push for UPNS 1. 개요 Morpheus Push 는 스마트폰 OS에서 지원하는 PNS(Push Notification Server)를 기반으로 한 메세지 전송 플랫폼이다. Android Client 에서는 UPMC WAS 에서 제공하는 Push API 를 각각 버전 규격에 맞춰 연동하여 원할하게 Push Service 를 운영하기 위한 라이브러리를 제공한다. 2. 용어 UPNS • Uracle Push Notification System 의 줄임말. • UPNS는 MQTT Protocol 기반으로 Android 애플리케이션으로 테이터를 전송하게 해주는 private 서비스 이다. • 서버에서 가져와야할 새로운 데이터가 있음을 Android 애플리케이션에 알리는 적은 용량의 메시지이거나, 최대 256Mbyte를 지원하나, 4k를 권고한다. • Android application은 message를 받기 위해 background service가 실행되고 있음. • UPNS는 단순히 원시 data를 android 단말로 보내며, 이 data를 통해 application에서 제어함. • Android 2.2 이상을 지원. 18 Chapter 3. Push Morpheus Document, Release Lastest UPMC • Uracle Push Message Center 의 줄임말. • Android GCM 서버와 HTTP 프로토콜을 이용하여, Server 대 Server 로 연계하여 구동하는 WAS(Web Application Server) 이다. • Receiver 라고도 불림 Service 등록 • UPNS 로 부터 PSID 를 할당 받고 UPMC 로 Push 서비스를 사용하겠다고 등록하는 절차 Service 해제 • UPMC 로 Push 서비스를 사용하지 않겠다고 등록을 삭제하는 절차 User 등록 • UPMC 로 Push 서비스에 대한 사용자를 등록 또는 변경하는 절차 수신 확인 • 메시지를 수신 후 UPNS 로 Ack를 주는 절차 • MQTT 프로토콜 규약을 따르며, 라이브러리 내부적으로 처리한다. 읽음 확인 • App에서 메세지를 읽었을때 UPMC 로 Ack를 주는 절차 Application ID • AppID라고도 함 • App의 lic 파일에 포함된 application_id 값으로 앱을 구분하기 위한 코드값. – GCM 서비스 등록을 위한 ID Client ID • 사용자로 등록할 Client 의 고유한 ID (CUID 라고도 함) • Email, UserID, Phone Number 또는 Device-UUID 등을 CUID 로 사용 3.1. Push for Android 19 Morpheus Document, Release Lastest Client Name • 사용자로 등록할 Client 의 이름 (CNAME 라고도 함) • 사용자의 이름이나 Nickname 또는 Device Name 을 CNAME 으로 사용 GROUPSEQ • Group Sequence Number 의 준말로 User Group의 고유한 Sequence Number PSID • Push Service ID 의 줄임말 • Push 서비스에 대한 고유 ID • UPNS에서 할당 받은 Device Token을 사용 CHECK ON SERVICE • 단말이 Push 서비스에 등록되어 있는지를 확인함 • 4.0EE 이상 지원 Push Notification System ID • PNSID라고 함. • GCM, UPNS, APNS등이 여기에 속함 App Alive • 앱의 설치여부를 24시간 주기로 체크 할 수 있도록 함 • 체크 방식 : 앱 구동 후 Push Resister method를 사용시(내부적으로 작동) 4.0EE • 대용량 Push(100만 이상)를 위해 설계된 push 시스템 Packge Name • google play에서 안드로이드 앱을 구별하기 위한 unique 값으로, AndoridManifest.xml 에 선언한다. 20 Chapter 3. Push Morpheus Document, Release Lastest 3. Push 서비스 절차 버전별 서비스 순서 UPMC 3.5 이하 버전 initPushService => User 등록 => Service 등록 => 메시지 수신 UPMC 3.6 이상 버전 initPushService => Service 등록 (자동으로 PSID 요청) => User 등록 => 메시지 수신 DataFlow Diagram Sequence Diagram Service Register Sequence Diagram User Register Sequence Diagram 3.1. Push for Android 21 Morpheus Document, Release Lastest 22 Chapter 3. Push Morpheus Document, Release Lastest Read Message Sequence Diagram 4. 라이브러리 및 설정 파일 4.1. 라이브러리 • PushLibrary.jar – UPNS/GCM Push 를 활용할 수 있는 라이브러리 4.2. iOS 용 라이브러리 • MPushLibrary.framework – APNS Push 를 활용할 수 있는 라이브러리가 담긴 framework 파일 • MPushLibrary.bundle – framework 을 사용함에 있어 필요한 resource가 담긴 bundle 파일 4.3. 공통 설정 파일 • mcore.mobile.lic – Push 라이센스 정보가 담긴 Push 라이센스 파일 3.1. Push for Android 23 Morpheus Document, Release Lastest • Manifest.xml – Push 구동을 위한 설정 파일 5. SDK 및 설정 파일 SDK 버전 • Android 용 SDK 파일 – MPushLibrary * GCM / UPNS Push를 활용할 수 있는 라이브러리 – mcore.mobile.lic – Push 라이센스 정보가 담긴 Push 라이센스 파일 – Manifest.xml – Push 구동을 위한 설정 파일 • SDK 적용 방법 – Android Project 의 libs 폴더에 Library 파일에 추가 * Push Library.jar * mqtt-android-push.jar – Android Project의 assets/res 폴더에 라이선스 및 설정 파일 추가 * Manifest.xml * mcore.mobile.lic 플러그인 버전 • MPush 플러그인 파일 – MPush.framework * MPushLibrary 기반으로 구현된 Morpheus Push Plugin 24 Chapter 3. Push Morpheus Document, Release Lastest – MPush.bundle * MPush.framework 을 사용함에 있어 필요한 resource가 담긴 bundle 파일 • 플러그인 적용 방법 – IDE 에서 MPush Plugin 을 업데이트 후 적용 공통 설정 파일 • mcore.mobile.lic – Push 라이센스 정보가 담긴 Push 라이센스 파일 – application_id 값을 Application ID 로 사용 #Tue Feb 17 09:53:27 KST 2015 application_id=xxx.xxx.xxxx.xxxx expiration_date=xxxx-xx-xx mpsn=hZK................X sn=AhA....E.... • Manifest.xml (ver 3.6 이상 ~ ver 4.0 이하) – Push 구동을 위한 설정 파일 <?xml version="1.0" encoding="UTF-8"?> <settings> <push> <receiver> <!-- UPMC 설정 정보 --> <log>y</log> <!-- 푸시 알림을 핸들링하기 위한 페이지 설정 --> <page>www/html/common/push.html</page> <!-- 서버 버전 3.6/3.7/4.0--> <version>4.0EE</version> <!-- receiver server url(필수 설정) --> <server>http://pushxx.morpheus.co.kr:18080/</server> <timeout>20000</timeout> <!-- GCM설정 --> <!-- GCM sender-id (push-type이 GCM일경우 필수설정, sender id가 여러개인 <gcm-sender-id>xxxxxxxxxxxx</gcm-sender-id> <!-- 푸쉬타입(필수설정) GCM:구글GCM(Public Push) UPNS:유라클UPNS(Private Push) --> <android-push-type>UPNS</android-push-type> 3.1. Push for Android 25 Morpheus Document, Release Lastest <!-- stb(셋탑)/mobile(모바일)/mobile_old(디바이스 아이디 이전 버전) --> <device-type>mobile</device-type> </receiver> <upns> <!-- agent, inapp --> <agent-service-type>inapp</agent-service-type> <!-- assets 안에 agent apk 파일이 있는 경우 --> <!-- <agent-apk-name></agent-apk-name> <agent-classpath></agent-classpath> <agent-package-name></agent-package-name> --> <!-- UPNS설정 --> <!-- UPNS SERVER URL (push-type이 UPNS일경우 4.0 이하 버전 필수설정, 4.0E <agent-server-url>tcp://xxx.morpheus.co.kr:1883</agent-server-url> <!-- UPNS RESTART ALARM INTERVAL (초단위) --> <agent-restart-interval>60</agent-restart-interval> <!-- auto/manual --> <agent-receive-confirm>auto</agent-receive-confirm> </upns> </push> </settings> • Manifest.xml (ver 4.0EE 이상) – Push 구동을 위한 설정 파일 <?xml version="1.0" encoding="UTF-8"?> <settings> <push> <receiver> <!-- UPMC 설정 정보 --> <log>y</log> <!-- 푸시 알림을 핸들링하기 위한 페이지 설정 --> <page>www/html/common/push.html</page> <!-- 서버 버전 4.0EE--> <version>4.0EE</version> <!-- receiver server url(필수 설정) --> <server>http://pushxx.morpheus.co.kr:18080/</server> <timeout>20000</timeout> <!-- GCM설정 --> <!-- GCM sender-id (push-type이 GCM일경우 필수설정) --> <gcm-sender-id>xxxxxxxxxxxx</gcm-sender-id> <!-- 푸쉬타입(필수설정) GCM:구글GCM(Public Push) UPNS:유라클UPNS(Private Push) ALL : doze mode 대응 (gcm : dummy data, upns : real data) --> <android-push-type>UPNS</android-push-type> 26 Chapter 3. Push Morpheus Document, Release Lastest <!-- stb(셋탑)/mobile(모바일)/mobile_old(디바이스 아이디 이전 버전) --> <device-type>mobile</device-type> </receiver> <upns> <!-- agent, inapp --> <agent-service-type>inapp</agent-service-type> <!-- assets 안에 agent apk 파일이 있는 경우 --> <!-- <agent-apk-name></agent-apk-name> <agent-classpath></agent-classpath> <agent-package-name></agent-package-name> --> <!-- UPNS RESTART ALARM INTERVAL (초단위) --> <agent-restart-interval>60</agent-restart-interval> <!-- auto/manual --> <agent-receive-confirm>auto</agent-receive-confirm> </upns> </push> </settings> – settings.push.receiver 에 대한 설정값 Key log version server device-type Type String String String String Description Push Service 에 대한 Debugging 로그 출력 여부 ( y / n ) UPMC Version ( 3.0, 3.5, 3.6, 3.7, 3.8, 4.0 ) UPMC WAS 서버 URL 서비스 디바이스에 대한 성정 (빈값 : mobile, mobile : mobile용, stb : 셋탑용) String UPNS 서비스 방식 (inapp : 라이브러리형, agent : 별도의 Agent 앱 구현시) String 앱이 살아 있는지 체크를 위한 시간 설정 (단위 : sec) agent-servicetype agent-restartinterval agent-receiveconfirm String upns 메시지 수신 결과에 대한 ack 전송 방법 (auto : 자동 (default), manual : 수동, 직접 구현) AndroidManifest.xml 설정 (ver 3.6 이상 ~ ver 4.0 이하) • Push 구동을 위한 Android 설정 파일 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="[패키지명]" android:versionCode="1" android:versionName="1.0"> <!-- push service&receiver --> <service android:name="m.client.push.library.service.UPNSService" android:exported="tr <receiver android:name="m.client.push.library.receiver.ServiceHandleReceiver"> <intent-filter> <action android:name="[패키지명].START_PUSHSERVICE" /> <action android:name="[패키지명].STOP_PUSHSERVICE" /> 3.1. Push for Android 27 Morpheus Document, Release Lastest <action android:name="[패키지명].RESTART_PUSHSERVICE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.USER_PRESENT" /> <action android:name="android.intent.action.SCREEN_OFF" /> <action android:name="android.intent.action.SCREEN_ON" /> </intent-filter> </receiver> <receiver android:name="[패키지명].receiver.MessageArrivedReceiver"> <intent-filter> <action android:name="[패키지명].UPNS_MESSAGE_ARRIVED" /> </intent-filter> </receiver> <receiver android:name="[패키지명].receiver.PushActionReceiver"> <intent-filter> <action android:name="[패키지명].REG_PUSHSERVICE_COMPLETELED" /> <action android:name="[패키지명].UNREG_PUSHSERVICE_COMPLETELED" /> <action android:name="[패키지명].REG_USER_COMPLETELED" /> <action android:name="[패키지명].UNREG_USER_COMPLETELED" /> <action android:name="[패키지명].SEND_MESSAGE_COMPLETELED" /> <action android:name="[패키지명].READ_CONFIRM_COMPLETELED" /> <action android:name="[패키지명].REG_GROUP_COMPLETELED" /> <action android:name="[패키지명].UNREG_GROUP_COMPLETELED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <receiver android:name="m.client.push.library.receiver.UpnsActionReceiver"> <intent-filter> <action android:name="[패키지명].UPNS_REG_PUSHSERVICE" /> <action android:name="[패키지명].UPNS_REG_SERVICE_AND_USER" /> <action android:name="[패키지명].UPNS_UNREG_PUSHSERVICE" /> <action android:name="[패키지명].UPNS_UPDATE_PUSHSERVICE_DATE" /> <action android:name="[패키지명].UPNS_REG_USER" /> <action android:name="[패키지명].UPNS_UNREG_USER" /> <action android:name="[패키지명].UPNS_SEND_MESSAGE" /> <action android:name="[패키지명].UPNS_READ_CONFIRM" /> <action android:name="[패키지명].UPNS_RECEIVE_CONFIRM" /> <action android:name="[패키지명].UPNS_SUBSCRIBE" /> <action android:name="[패키지명].UPNS_REG_GROUP" /> <action android:name="[패키지명].UPNS_UNREG_GROUP" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </manifest> 28 Chapter 3. Push Morpheus Document, Release Lastest AndroidManifest.xml 설정 (ver 4.0EE 이상) • Push 구동을 위한 Android 설정 파일 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="[패키지명]" android:versionCode="1" android:versionName="1.0"> <!-- push service&receiver --> <service android:name="m.client.push.library.service.UPNSService" android:exported="tr <receiver android:name="m.client.push.library.receiver.ServiceHandleReceiver"> <intent-filter> <action android:name="[패키지명].START_PUSHSERVICE" /> <action android:name="[패키지명].STOP_PUSHSERVICE" /> <action android:name="[패키지명].RESTART_PUSHSERVICE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.USER_PRESENT" /> <action android:name="android.intent.action.SCREEN_OFF" /> <action android:name="android.intent.action.SCREEN_ON" /> </intent-filter> </receiver> <receiver android:name="[패키지명].receiver.MessageArrivedReceiver"> <intent-filter> <action android:name="[패키지명].UPNS_MESSAGE_ARRIVED" /> </intent-filter> </receiver> <receiver android:name="[패키지명].receiver.PushActionReceiver"> <intent-filter> <action android:name="[패키지명].ACTION_COMPLETED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <receiver android:name="m.client.push.library.receiver.UpnsActionReceiver"> <intent-filter> <action android:name="[패키지명].ACTION_UPNS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </manifest> UPNS 구현시 주의 사항 • UPNSService: UPNS 푸시를 수신하기 위한 중요한 역할을 하므로 반드시 추가되어야 한다. • ServiceHandleReceiver: 라이브러리 내에 존재하는 리시버로 서비스의 생명 주기를 담당하는 리시버이다. 3.1. Push for Android 29 Morpheus Document, Release Lastest • MessageArrivedReceiver: 서버로부터 메시지를 수신하는 리시버로 데이터 수신 시 화면에 보여줄 방법을 정의하여 사용한다. • UPNSActionReceiver: 라이브러리 내에 존재하는 리시버로 UPNS 기능에 대한 요청을 받아서 처리한다 6. Push Service 연동 라이브러리 버전 Case #1. Push service 등록 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //앱 실행시점에서 호출 (4.0 EE) PushManager.getInstance().initPushServer(getApplicationContext()); //앱 실행 기준, 1일 1회 호출 권장 (4.0 이하) //앱 실행시마다 호출 (4.0EE이상) PushManager.getInstance().registerPushService(getApplicationContext()); ... } 플러그인 버전 – 수정중 (2016.04.12) 7. Push APIs Initialize Push Server PushManager.getInstance().initPushServer(Context context); •Manifest.xml 설정 파일에서 라이브러리를 초기화하기 위한 정보를 가져온다. Parameters • context (Context) – 현재 Context PushManager.getInstance().initPushServer(Context context, JSONObject params); •Manifest.xml 설정 파일에서 라이브러리를 초기화하기 위한 정보를 가져온다 Parameters • context (Context) – 현재 Context • params (JSONObject) – 정보셋팅 •JSONObject key 값에 대한 설명 30 Chapter 3. Push Morpheus Document, Release Lastest Key PushConstants.KEY_CNAME PushConstants.KEY_STB_ID PushConstants.KEY_DEVICE_ID PushConstants.KEY_CUSTOM_RECEIVER_SERVER_URL PushConstants.KEY_CUSTOM_UPNS_SERVER_URL Type String String String String String Description 사용자 닉네임 셋탑 아이디 디바이스id UPMC url UPNS url - 예시 : JSONObject params = new JSONObject(); // http://xxx.xxx.x.xx:xxxx 연결할 리시버 서버 url params.put(PushConstants.KEY_CUSTOM_RECEIVER_SERVER_URL, "http://xxx.xxx.x.xx:xxxx"); // tcp://xxx.xxx.x.xx:xxxx 연결할 UPNS 서버 url params.put(PushConstants.KEY_CUSTOM_UPNS_SERVER_URL, "tcp://xxx.xxx.x.xx:xxxx"); Register Service PushManager.getInstance().registerPushService(Context context); •GCM 및 UPNS에 푸시 서비스를 등록 한다. Parameters • context (Context) – 현재 context PushManager.getInstance().registerPushService(Context context, JSONObject params); •GCM / UPNS 에 푸시 서비스를 등록한다. Parameters • context (Context) – 현재 Context • params (JSONObject) – 정보셋팅 •JSONObject key 값에 대한 설명 Key PushConstants.KEY_DEVICE_ID PushConstants.KEY_CUSTOM_RECEIVER_SERVER_URL PushConstants.KEY_CUSTOM_UPNS_SERVER_URL Type String String String Description 디바이스id UPMC url UPNS url - 예시 : JSONObject params = new JSONObject(); params.put(PushConstants.KEY_STB_ID, "{A73E9E2E-9C6B-11E4-AFAE-C55006B96D3C}"); params.put(PushConstants.KEY_DEVICE_ID, "DEVICE-A73E9E2E9C6B11E4AFAEC55006B96D3C"/*생성하여 추 params.put(PushConstants.KEY_CNAME, "GUEST-A73E9E2E9C6B11E4AFAEC55006B96D3C"); Register User PushManager.getInstance().registerPushUser(Context context, String cuid, String cname); •Client ID 와 Client Name 으로 User 등록 3.1. Push for Android 31 Morpheus Document, Release Lastest •푸시 서비스를 이용할 사용자를 등록한다. 서비스 등록이 성공한 이후 사용자 등록이 가능 하다. Parameters • context (Context) – 현재 Context • cuid (String) – Client ID 값 • cname (String) – Client Name 값 -결과값 : Reciver 를 통해, 처리 결과 통보 PushManager.getInstance().registerPushUser (Context context, JSONObject params); •Client ID 와 Client Name 으로 User 등록 •푸시 서비스를 이용할 사용자를 등록한다. 서비스 등록이 성공한 이후 사용자 등록이 가능 하다. Parameters • context (Context) – 현재 Context • params (JSONObject) – 정보셋팅 •JSONObject key 값에 대한 설명 Key PushConstants.KEY_CUID PushConstants.KEY_CNAME PushConstants.KEY_STB_ID PushConstants.KEY_DEVICE_ID Type String String String String Necessary 필수 필수 선택 선택 Description Client ID Client Name STB ID Device ID -결과값 : Reciver 를 통해, 처리 결과 통보 Unregister Service PushManager.getInstance().unregisterPushService(Context context); •GCM 및 UPNS에 푸시 서비스를 해제 한다. Parameters • context (Context) – 현재 context -결과값 : Reciver 를 통해, 처리 결과 통보 PushManager.getInstance().unregisterPushService(Context context, JSONObject params); •GCM / UPNS 에 푸시 서비스를 해제 한다. Parameters • context (Context) – 현재 Context • params (JSONObject) – 정보셋팅 •JSONObject key 값에 대한 설명 32 Chapter 3. Push Morpheus Document, Release Lastest Key PushConstants.KEY_CNAME PushConstants.KEY_STB_ID PushConstants.KEY_DEVICE_ID Type String String String Necessary 선택 선택 선택 Description Client Name STB ID Device ID - 예시 : JSONObject params = new JSONObject(); params.put(PushConstants.KEY_STB_ID, "{A73E9E2E-9C6B-11E4-AFAE-C55006B96D3C}"); params.put(PushConstants.KEY_DEVICE_ID, "DEVICE-A73E9E2E9C6B11E4AFAEC55006B96D3C"); Read Push Message PushManager.getInstance().pushMessageReadConfirm (Context context, String notification) •사용자가 메시지를 확인 하는 경우, 메시지 확인 전문을 전송한다. Parameters • context (Context) – 현재 context • notification (String) – 수신한 push message(JSONObject의 string 값) PushManager.getInstance().pushMessageReadConfirm (Context context, String notification, •사용자가 메시지를 확인 하는 경우, 메시지 확인 전문을 전송하며, 서버와 badge count를 동기화 한다. New in version 4.0EE: UPMC Parameters • context (Context) – 현재 context • notification (String) – 수신한 push message(JSONObject의 string 값) :param int badgeCountType •badgeCountType key 값에 대한 설명 Key Type PushConString stants.BADGE_TYPE_KEEP PushConString stants.BADGE_TYPE_RESET PushConString stants.BADGE_TYPE_UPDATE Description 1개 읽음 처리, 다음 메시지 수신시, 동일한 값 유지 (Default, -1 후 +1 이 됨) 입력 값으로 초기화, 다음 수신된 값은 입력값 +1로 처리됨 카운트에 따라 업데이트 됨 (읽음여부에 상관없이, push 수신 ++) Receive Push Message PushManager.getInstance().pushMessageReceiveConfirm (Context context, String notificati •GCM Only •메시지 수신 시 메시지 수신 전문을 전송한다. Parameters 3.1. Push for Android 33 Morpheus Document, Release Lastest • context (Context) – 현재 context • notification (String) – 수신한 push message(JSONObject의 string 값) PushManager.getInstance().upnsMessageReceiveConfirm (Context context, String msgID); •UPNS Only •mqtt를 통해 수신한 메시지에 대한 응답 (Manifest.xml 에서 <agent-receive-confirm> 값이 “manual”인 경우 작동한다) Parameters • context (Context) – 현재 context • msgID (String) – 수신된 푸시 인텐트로부터 받은 MESSAGEID UPNS Subscribe PushManager.getInstance().upnsSubscribe(Context context); •UPNS Only •UPNS 서버에 subscribe 요청을 다시한다. (요청 시 오프라인 메시지 수신 [서버로 부터 발송이 실패되어 저장중인 메시지] – 부하가 될 수 있으므로 주의 사용) Parameters • context (Context) – 현재 context Register Group PushManager.getInstance().registerUserGroup (Context context, String groupSeq); •사용자 그룹에 등록한다. Parameters • context (Context) – 현재 context • groupSeq (String) – 등록하고자 하는 그룹의 sequence number UnRegister Group PushManager.getInstance().unregisterUserGroup (Context context, String groupSeq); •사용자 그룹에서 등록을 해제 한다. Parameters • context (Context) – 현재 context • groupSeq (String) – 해제하고자 하는 그룹의 sequence number 34 Chapter 3. Push Morpheus Document, Release Lastest Init Badge Number PushManager.getInstance().initBadgeNo (Context context, String badgeNo); •서버의 Badge NO를 강제 셋팅 또는 초기화 •Badge NO 최소값 : 0 •Badge NO 최대값 : 1000 Parameters • context (Context) – 현재 context • badgeNo (String) – 서버에서 관리되는 뱃지 count에 대한 초기값 (0을 셋팅하는 경우, push수신시 1로 셋팅됨) Set DeviceBadge Count PushManager.getInstance().setDeviceBadgeCount (Context context, String badgeNo); •폰의 Badge NO를 표기함 •폰의 설치된 런처에 따라, 작동하지 않을 수 있음 •Badge NO 최소값 : 0 •Badge NO 최대값 : 1000 Parameters • context (Context) – 현재 context • badgeNo (String) – 서버에서 관리되는 뱃지 count에 대한 초기값 (0을 셋팅하는 경우, push수신시 1로 셋팅됨) 8. Push APIs 키값 정의 ver 4.0EE 이상 • API 호출에 따른 결과값 (BroadCastReceiver bundle key) 3.1. Push for Android 35 Morpheus Document, Release Lastest Key Description (결과값) PushConstant사용자 등록 sEx.COMPLETE_BUNDLE.REG_USER PushConstant사용자 등록 sEx.COMPLETE_BUNDLE.UNREG_USER PushConstantpush service 갱신 sEx.COMPLETE_BUNDLE.UPDATE_PUSHSERVICE_DATE PushConstant푸시 서비스 등록 sEx.COMPLETE_BUNDLE.REG_PUSHSERVICE PushConstant푸시 서비스 해제 sEx.COMPLETE_BUNDLE.UNREG_PUSHSERVICE PushConstant읽음 ack sEx.COMPLETE_BUNDLE.READ_CONFIRM PushConstant수신 ack (gcm only) sEx.COMPLETE_BUNDLE.RECEIVE_CONFIRM PushConstant서비스 등록 여부 (register service sEx.COMPLETE_BUNDLE.IS_REGISTERED_SERVICE 호출 시, 수신 될 수 있음) PushConstant뱃지 넘버 초기화 sEx.COMPLETE_BUNDLE.INITBADGENO PushConstant그룹 등록 sEx.COMPLETE_BUNDLE.REG_GROUP PushConstant그릅 해제 sEx.COMPLETE_BUNDLE.UNREG_GROUP – BroadCastReceiver bundle key return 값 (STATUS CODE - 통신관련) Key Description (결과값) PushCon정상 stants.RESULTCODE_OK PushCon통신 오류 - UPMC서버에 접속할 수 없을때 stants.RESULTCODE_HTTP_ERR - connection 관련 error PushCon인증키 획득 오류 stants.RESULTCODE_AUTHKEY_ERR PushCon응답 오류 - 오류코드를 수신한 경우 stants.RESULTCODE_RESPONSE_ERR PushCon정의되지 않은 예기치 못한 오류가 발생한 stants.RESULTCODE_INTERNAL_ERR 경우 PushCon인증키 획득 오류 stants.RESULTCODE_AUTHKEY_ERR2 – BroadCastReceiver Intent 관련 키값 (처리 결과 ) Key PushConstants.KEY_RESULT PushConstants.KEY_BUNDLE PushConstants.KEY_ISREGISTER PushConstants.KEY_RESULT_CODE PushConstants.KEY_RESULT_MSG 36 Description (결과값) ACTION_COMPLETED에 Extras용 전체 호출값 번들용 KEY 서비스 등록 여부에 대한 결과값 결과 코드 (정상 : 200) upmc 통신 이후, 수신된 메시지 Chapter 3. Push Morpheus Document, Release Lastest 9. UPMC용 BroadcastReceiver 등록 방법 (예시) receiver 등록 private BroadcastReceiver mLoginBroadcastReceiver; public void registerReceiver() { if (mLoginBroadcastReceiver != null) { return; } IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(LoginActivity.this.getPackageName() + PushConstantsEx.ACTION_COM mLoginBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if(!PushUtils.checkValidationOfCompleted(intent, context)){ return; } //intent 정보가 정상적인지 판단 String result = intent.getExtras().getString(PushConstants.KEY_RESULT); String bundle = intent.getExtras().getString(PushConstantsEx.KEY_BUNDLE) JSONObject result_obj = null; String resultCode = ""; String resultMsg = ""; try { result_obj = new JSONObject(result); resultCode = result_obj.getString(PushConstants.KEY_RESULT_CODE) resultMsg = result_obj.getString(PushConstants.KEY_RESULT_MSG); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } //Action에 따라 분기 (이미 서비스 등록이 된 경우 다음 process 이동) if(bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.REG_USER)) { if (resultCode.equals(PushConstants.SUCCESS_RESULT_CODE)) { Toast.makeText(context, "로그인 성공!", Toast.LENGTH_SHORT setSendTest(); }else { Toast.makeText(context, "[LoginActivity] error code: " + } }else if (bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.UNREG_PUSHSERVIC if (resultCode.equals(PushConstants.SUCCESS_RESULT_CODE)) { Toast.makeText(context, "해제 성공!", Toast.LENGTH_SHORT). }else { Toast.makeText(context, "[LoginActivity] error code: " + } }else if (bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.REG_GROUP)) { 3.1. Push for Android 37 Morpheus Document, Release Lastest if (resultCode.equals(PushConstants.SUCCESS_RESULT_CODE)) { Toast.makeText(context, "그룹 등록 성공!", Toast.LENGTH_SHO }else { Toast.makeText(context, "[LoginActivity] error code: " + } }else if (bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.UNREG_GROUP)) { if (resultCode.equals(PushConstants.SUCCESS_RESULT_CODE)) { Toast.makeText(context, "그룹 해제 성공!", Toast.LENGTH_SHO }else { Toast.makeText(context, "[LoginActivity] error code: " + } }else if (bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.REG_SERVICE_AND_ if (resultCode.equals(PushConstants.SUCCESS_RESULT_CODE)) { Toast.makeText(context, "로그인 성공!", Toast.LENGTH_SHORT setSendTest(); }else { Toast.makeText(context, "[LoginActivity] error code: " + } }else if (bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.INITBADGENO)) { if (resultCode.equals(PushConstants.SUCCESS_RESULT_CODE)) { Toast.makeText(context, "Badge Number 초기화 성공 !", Toas PushManager.getInstance().setDeviceBadgeCount(getApplica }else { Toast.makeText(context, "[LoginActivity] error code: " + } }else if(bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.IS_REGISTERED_SER String isRegister = ""; try { isRegister = result_obj.getString(PushConstants.KEY_ISRE } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(isRegister.equals("C")){ Toast.makeText(context, "CHECK ON [ 사용자 재등록 필요 !! ]" }else if(isRegister.equals("N")){ Toast.makeText(context, "CHECK ON [ 서비스 재등록 필요 !! ]" }else{ Logger.i("서비스 정상 등록 상태 "); } } } }; this.registerReceiver(mLoginBroadcastReceiver, intentFilter); } receiver 해제 public void unregisterReceiver() { if (mLoginBroadcastReceiver != null) { this.unregisterReceiver(mLoginBroadcastReceiver); 38 Chapter 3. Push Morpheus Document, Release Lastest mLoginBroadcastReceiver = null; } } 10. UPNS Push Payload [ UPNS ] • 아래 기술된 메시지는 샘플에 대한 예시이며, 프로젝트에서 표현하고자 하는 방식에 따라, Interface 정의서에 의해, 변경이 가능함. – JSONObject key 값에 대한 설명 Key MESSAGE EXT SEQNO PSID APPID CUID PUBLIC SENDERCODE SENDDATE DB_IN BADGENO 활용방법 메시지 타이틀로 이용 일반 메시지인 경우, 메시지로 이용가능하며, Rich 메시지인 경우, 세부 정보를 추가로 획득하여, 표현 Push message의 고유 키값 Push 서비스에 대한 고유 ID( PSID) Push 서비스가 관리되는 앱 ID( Application ID) 사용자 ID( Client ID) Public 망을 이용하는 push 여부 발송자 코드 (서버관점) 발송된 시간 (서버관점) DB에 저장 여부 (서버 관점) 뱃지값 일반(text) push 메시지 예시 { “BODY”:{ “MESSAGE”:”일반 알림”, “EXT”:”메세지 테스트”, “SEQNO”:”304”, “PSID”:”9ca385ad63c4cbd5eeda33c2e7a7a024ea83c2d4”, “APPID”:”com.uracle.push.test”, “CUID”:”test1”, “PUBLIC”:”N”, “SENDERCODE”:”device-android”, “SENDDATE”:”2016041410”, “DB_IN”:”Y”, “BADGENO”:”9” } } 3.1. Push for Android 39 Morpheus Document, Release Lastest 웹 브라우저 호출 push 메시지 예시 { “BODY”:{ “MESSAGE”:”Web 알림”, “EXT”:”1|웹페이지|http://lab.morpheus.kr/push/sample/image|http://lab.morpheus.kr/push/sample/webpage”, “SEQNO”:”305”, “PSID”:”9ca385ad63c4cbd5eeda33c2e7a7a024ea83c2d4”, “APPID”:”com.uracle.push.test”, “CUID”:”test1”, “PUBLIC”:”N”, “SENDERCODE”:”device-android”, “SENDDATE”:”2016041410”, “DB_IN”:”Y”, “BADGENO”:”10” } } 동영상 push 메시지 예시 { “BODY”:{ “MESSAGE”:”동영상 알림”, “EXT”:”2|기본동영상|http://lab.morpheus.kr/push/sample/image|https://youtu.be/IIu0VMdOe10”, “SEQNO”:”306”, “PSID”:”9ca385ad63c4cbd5eeda33c2e7a7a024ea83c2d4”, “APPID”:”com.uracle.push.test”, “CUID”:”test1”, “PUBLIC”:”N”, “SENDERCODE”:”device-android”, “SENDDATE”:”2016041410”, “DB_IN”:”Y”, “BADGENO”:”11” } } 40 Chapter 3. Push Morpheus Document, Release Lastest 이미지 push 메시지 예시 { “BODY”:{ “MESSAGE”:”이미지 알림”, “EXT”:”3|기본이미지|http://lab.morpheus.kr/push/sample/image”, “SEQNO”:”307”, “PSID”:”9ca385ad63c4cbd5eeda33c2e7a7a024ea83c2d4”, “APPID”:”com.uracle.push.test”, “CUID”:”test1”, “PUBLIC”:”N”, “SENDERCODE”:”device-android”, “SENDDATE”:”2016041410”, “DB_IN”:”Y”, “BADGENO”:”12” } } 3.1.3 GCM KEY 발급 절차 3.2 Push for iOS 3.2.1 1. 개요 Morpheus Push 는 스마트폰 OS에서 지원하는 PNS(Push Notification Server)를 기반으로 한 메세지 전송 플랫폼이다. iOS Client 에서는 UPMC WAS 에서 제공하는 Push API 를 각각 버전 규격에 맞춰 연동하여 원할하게 Push Service 를 운영하기 위한 라이브러리를 제공한다. 3.2.2 2. 용어 APNS • Apple Push Notification Service 의 줄임말. • Apple 에서 직접 제공하는 영구적인 보안 채널에 공급자를 연결하여 대상 장치에 알림을 보낼 수 있는 서 비스. UPMC • Uracle Push Message Center 의 줄임말. • Apple APNS 서버와 TLS 인증으로 연결된 APNS Provider 서버를 Server 대 Server 로 연계하여 구동하는 WAS(Web Application Server) 이다. • Receiver 라고도 불림 3.2. Push for iOS 41 Morpheus Document, Release Lastest Service 등록 • APNS 로 부터 Token 을 할당 받고 UPMC 로 Push 서비스를 사용하겠다고 등록하는 절차 Service 해제 • UPMC 로 Push 서비스를 사용하지 않겠다고 등록을 삭제하는 절차 User 등록 • UPMC 로 Push 서비스에 대한 사용자를 등록 또는 변경하는 절차 수신 확인 • 메세지를 제대로 받았을 때 UPMC 로 Ack를 주는 절차 읽음 확인 • App에서 메세지를 읽었을때 UPMC 로 Ack를 주는 절차 Application ID • App의 lic 파일에 포함된 application_id 값으로 앱을 구분하기 위한 코드값. Client ID • 사용자로 등록할 Client 의 고유한 ID (CUID 라고도 함) • Email, UserID, Phone Number 또는 Device-UUID 등을 CUID 로 사용 Client Name • 사용자로 등록할 Client 의 이름 (CNAME 라고도 함) • 사용자의 이름이나 Nickname 또는 Device Name 을 CNAME 으로 사용 GROUPSEQ – Group Sequence Number 의 준말로 User Group의 고유한 Sequence Number PSID – Push Service ID 의 줄임말 - Push 서비스에 대한 고유 ID - APNS에서 할당 받은 Device Token을 사용 42 Chapter 3. Push Morpheus Document, Release Lastest 3.2.3 3. Push 서비스 절차 버전별 서비스 순서 UPMC 3.5 이하 버전 토큰 요청 => User 등록 => Service 등록 => 메시지 수신 UPMC 3.6 이상 버전 Service 등록 (자동으로 Token 요청) => User 등록 => 메시지 수신 DataFlow Diagram Sequence Diagram 3.2.4 4. SDK 및 설정 파일 SDK 버전 • iOS 용 SDK 파일 – MPushLibrary.framework * APNS Push를 활용할 수 있는 라이브러리가 담긴 framework 파일 – MPushLibrary.bundle * MPushLibrary.framework 을 사용함에 있어 필요한 resource가 담긴 bundle 파일 • SDK 적용 방법 – XCode Project 에 Library 와 설정 파일에 추가 * MPushLibrary.framework * MPushLibrary.bundle * Manifest.xml * mcore.mobile.lic – 적용시 Project 내 파일이 없는 경우 Copy items if needed 선택 3.2. Push for iOS 43 Morpheus Document, Release Lastest 44 Chapter 3. Push Morpheus Document, Release Lastest 3.2. Push for iOS 45 Morpheus Document, Release Lastest 플러그인 버전 • MPush 플러그인 파일 – MPush.framework * MPushLibrary 기반으로 구현된 Morpheus Push Plugin – MPush.bundle * MPush.framework 을 사용함에 있어 필요한 resource가 담긴 bundle 파일 • 플러그인 적용 방법 – IDE 에서 MPush Plugin 을 업데이트 후 적용 공통 설정 파일 • mcore.mobile.lic – Push 라이센스 정보가 담긴 Push 라이센스 파일 – application_id 값을 Application ID 로 사용 #Tue Feb 17 09:53:27 KST 2015 application_id=xxx.xxx.xxxx.xxxx expiration_date=xxxx-xx-xx mpsn=hZK................X sn=AhA....E.... New in version 3.8.1: Library – 라이센스 파일을 바탕으로 생성한 Security Indexes 값으로 Push 서비스를 운용하는 중에 생성되는 사용자 또는 단말기의 식별 가능한 데이타를 암호화 하여 저장 • Manifest.xml – Push 구동을 위한 설정 파일 <manifest useDirectView="false"> ... <settings> <push> <receiver> <log>y</log> <version>x.x</version> <server>http://pushxx.morpheus.co.kr:8080/upmc</server> </receiver> </push> </settings> ... </manifest> – settings.push.receiver 에 대한 설정값 Key log version server 46 Type String String String Description Push Service 에 대한 Debugging 로그 출력 여부 ( y / n ) UPMC Version ( 3.0, 3.5, 3.6, 3.7, 3.8, 4.0 ) UPMC WAS 서버 URL Chapter 3. Push Morpheus Document, Release Lastest 3.2.5 5. Push Service 연동 라이브러리 버전 Case #1. Push Notification 관련 UIApplicationDelegate 를 직접 연동 #import <MPushLibrary/PushManager.h> - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... [[PushManager defaultManager] application:application didFinishLaunchingWithOptions:launchOptions]; return YES; } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [[PushManager defaultManager] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; } - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { [[PushManager defaultManager] application:application didFailToRegisterForRemoteNotificationsWithError:error]; } - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { [[PushManager defaultManager] application:application didReceiveLocalNotification:notification]; } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { [[PushManager defaultManager] application:application didReceiveRemoteNotification:userInfo]; } /* // Background 모드에서 호출하는 경우에 사용 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { [[PushManager defaultManager] application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler]; } */ 3.2. Push for iOS 47 Morpheus Document, Release Lastest - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { [[PushManager defaultManager] application:application didRegisterUserNotificationSettings:notificationSettings]; } Case #2. <MPushLibrary/AppDelegate+PushManager.h> 로 바로 연동 #import <MPushLibrary/PushManager.h> #import <MPushLibrary/AppDelegate+PushManager.h> - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... [[PushManager defaultManager] application:application didFinishLaunchingWithOptions:launchOptions]; return YES; } 플러그인 버전 Case #1 - Push Notification 관련 UIApplicationDelegate 를 직접 연동 #import <MPush/PushManager.h> - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... [[PushManager defaultManager] application:application didFinishLaunchingWithOptions:launchOptions]; return YES; } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [[PushManager defaultManager] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; } - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { [[PushManager defaultManager] application:application didFailToRegisterForRemoteNotificationsWithError:error]; } - (void)application:(UIApplication *)application 48 Chapter 3. Push Morpheus Document, Release Lastest didReceiveLocalNotification:(UILocalNotification *)notification { [[PushManager defaultManager] application:application didReceiveLocalNotification:notification]; } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { [[PushManager defaultManager] application:application didReceiveRemoteNotification:userInfo]; } /* // Background 모드에서 호출하는 경우에 사용 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { [[PushManager defaultManager] application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler]; } */ - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { [[PushManager defaultManager] application:application didRegisterUserNotificationSettings:notificationSettings]; } Case #2 - <MPush/AppDelegate+PushManager.h> 로 바로 연동 #import <MPush/PushManager.h> #import <MPush/AppDelegate+PushManager.h> - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... [[PushManager defaultManager] application:application didFinishLaunchingWithOptions:launchOptions]; return YES; } 3.2.6 6. Push APIs Initialize with delegate [[PushManager defaultManager] initializeWithDelegate:delegate] •Push Manager 를 시작하면서 delegate(대리자) 을 등록 3.2. Push for iOS 49 Morpheus Document, Release Lastest •등록된 delegate 을 통해 message 수신 등 push 와 괸련된 business logic controller 역활을 대행 •delegate 이 등록되지 않으면 앱이 시작되면서 전달받은 push message 들은 자동으로 지연 전달됨 Changed in version 3.6.4. Parameters • delegate (id<PushManagerDelegate>) – delegate 값, NotNull Register Service [[PushManager defaultManager] registerService:activity completionHandler:^(BOOL success •Token 을 자동 요청하고 서비스 등록 Changed in version 3.6.4. Parameters • activity (UIViewController) – 호출하는 화면 전달, NotNull • token (NSString) – token string 값, NotNull • completionHandler (BlockHandler) – Service 등록 완료 후 호출, Nullable [[PushManager defaultManager] registerService:activity token:@"TOKEN-STRING" completion •직접 Token 값을 전달하여 서비스 등록 Changed in version 3.6.4. Parameters • activity (UIViewController) – 호출하는 화면 전달, NotNull • token (NSString) – token string 값, NotNull • completionHandler (BlockHandler) – Service 등록 완료 후 호출, Nullable • activity 가 UIViewController 가 아닌 경우 (id) 로 casting 하여 전달 [[PushManager defaultManager] registerService:(id)activity completionHandler:^(BOOL success) {}] Register User [[PushManager defaultManager] registerUser:activity, clientUID:@"CUID" clientName:@"CNA •Client ID 와 Client Name 으로 User 등록 Changed in version 3.6.4. Parameters • activity (UIViewController) – 호출하는 화면 전달, NotNull • clientUID (NSString) – Client ID 값, NotNull • clientName (NSString) – Client Name 값, NotNull 50 Chapter 3. Push Morpheus Document, Release Lastest • completionHandler (BlockHandler) – User 등록 완료 후 호출, Nullable Unregister Service [[PushManager defaultManager] unregisterService:activity completionHandler:^(BOOL succe •서비스 해제 Changed in version 3.6.4. Parameters • activity (UIViewController) – 호출하는 화면 전달, NotNull • completionHandler (BlockHandler) – Service 해제 완료 후 호출, Nullable Register Group [[PushManager defaultManager] registerGroup:activity groupSequenceNumber:@"GROUP-NUMBER •현재 등록된 User 를 Group 에 등록 •서버에 등록된 Group Sequence Number 값을 알고 있어야 등록 가능 Changed in version 3.6.4. Parameters • activity (UIViewController) – 호출하는 화면 전달, NotNull • groupSequenceNumber (NSString) – Group Sequence Number 값, NotNull • completionHandler (BlockHandler) – Group 등록 완료 후 호출, Nullable Unregister Group [[PushManager defaultManager] unregisterGroup:activity groupSequenceNumber:@"GROUP-NUMB •현재 등록된 User 를 Group 에서 해제 •서버에 등록된 Group Sequence Number 값을 알고 있어야 해제 가능 Changed in version 3.6.4. Parameters • activity (UIViewController) – 호출하는 화면 전달, NotNull • groupSequenceNumber (NSString) – Group Sequence Number 값, NotNull • completionHandler (BlockHandler) – Group 해제 완료 후 호출, Nullable 3.2. Push for iOS 51 Morpheus Document, Release Lastest Send Message [[PushManager defaultManager] send:activity clientUID:@"CUID" message:@"PUSH-MESSAGE" s •앱에서 직접 Remote Push 발송 요청 •ServiceCode 는 서버에 미리 등록 후 발송 Changed in version 3.6.4. Parameters • activity (UIViewController) – 호출하는 화면 전달, NotNull • clientUID (NSString) – Client ID 값, NotNull • message (NSString) – 발송할 Push Message, NotNull • serviceCode (NSString) – 발송 Service Code, NotNull • ext (NSString) – 확장 데이타로 발송할 String 으로 변환된 JSON 데이 타를 전달, NotNull • completionHandler (BlockHandler) – Group 해제 완료 후 호출, Nullable Read Message [[PushManager defaultManager] read:activity messageUniqueKey:@"MESSAGE-UNIQUE-KEY" seqN •읽음 확인 발송 •payload 에 전달된 messageuniquekey 값과 seqno 값을 추출하여 전달 •payload 에 messageuniquekey 은 Receiver 3.5 버전 이하에서만 전달됨 Deprecated since version 3.6: Receiver Parameters • activity (UIViewController) – 호출하는 화면 전달, NotNull • messageUniqueKey (NSString) – Message Unique Key 값, NotNull • seqNo (NSString) – Sequence Number 값, NotNull • completionHandler (BlockHandler) – 읽음 확인 발송 완료 후 호 출, Nullable [[PushManager defaultManager] read:activity notification:userInfo completionHandler:^(B •읽음 확인 발송 •didReceiveRemoteNotification: 로 전달된 userInfo 를 그대로 전달 New in version 3.6: UPMC Parameters • activity (UIViewController) – 호출하는 화면 전달, NotNull • userInfo (NSDictionary) – 수신된 Notification 데이타, NotNull • completionHandler (BlockHandler) – 읽음 확인 발송 완료 후 호 출, Nullable 52 Chapter 3. Push Morpheus Document, Release Lastest Read Message for Enterprise PushManagerBadgeOption Constant PushManagerBadgeOptionKeep PushManagerBadgeOptionReset PushManagerBadgeOptionUpdate PushManagerBadgeOptionForce Description 서버에서 관리되는 counting 하나 줄여 count 를 유지시킴 서버에서 관리되는 counting 을 0으로 reset 서버에서 관리되는 counting 을 특정 count 로 업데이트 서버에서 관리되는 counting 을 Update API 를 통해 특정 count 로 업데이트 Example: [[PushManager defaultManager] read:activity notification:userInfo badgeOption:PushManagerBadgeOptionKeep completionHandler:^(BOOL success) { }]; or [[PushManager defaultManager] read:activity notification:userInfo badgeOption:PushManagerBadgeOptionReset completionHandler:^(BOOL success) { }]; [[PushManager defaultManager] read:activity notification:userInfo badgeOption:badgeOpti •엔터프라이즈 버전에서 읽음 확인 발송 •읽음 확인에 대한 counting 을 특정 badge 값으로 업데이트 •최소 1이상, 최대 1000 값 New in version 4.0EE: UPMC Parameters • activity (UIViewController) – 호출하는 화면 전달, NotNull • userInfo (NSDictionary) – 수신된 Notification 데이타, NotNull • badgeOption (PushManagerBadgeOption) – 수신된 Notification 데이 타, NotNull • badge (NSNumber) – 업데이트할 counting 값, 1-1000 • completionHandler (BlockHandler) – 읽음 확인 발송 완료 후 호 출, Nullable Example: [[PushManager defaultManager] read:activity 3.2. Push for iOS 53 Morpheus Document, Release Lastest notification:userInfo badgeOption:PushManagerBadgeOptionUpdate badge:@(10) completionHandler:^(BOOL success) { }]; - (void)update:(UIViewController *)activity badge:(NSNumber *)badge completionHandler:( •읽음 확인에 대한 counting 을 강제로 특정 badge 값으로 업데이트 •최소 1이상, 최대 1000 값 New in version 4.0EE: UPMC Parameters • activity (UIViewController) – 호출하는 화면 전달, NotNull • badge (NSNumber) – 업데이트할 counting 값, 1-1000 • completionHandler (BlockHandler) – 읽음 확인 발송 완료 후 호 출, Nullable Example: [[PushManager defaultManager] update:self badge:@(3) completionHandler:^(BOOL success) { }]; 3.2.7 7. PushManager Delegate PushStatus Push Message 가 발송된 상태값 Constant START ACTIVE BACKGROUND Description Push Message 로 앱을 시작한 경우 Application Forground Status 에서 Push Message 를 받은 경우 Application Background Status 에서 Push Message 가 전달된 경우 Delegate 설정 Push Message 수신을 대행하는 대리자를 등록 - (void)initilaizeWithDelegate:(id <PushManagerDelegate>)delegate {} Parameters • delegate (PushManagerDelegate) – PushManager 의 역활을 대행 할 대리자 등록 Example: 54 Chapter 3. Push Morpheus Document, Release Lastest [[PushManager defaultManager] initializeWithDelegate:self]; Push Message 수신 처리 - (void)manager:(PushManager *)manager didReceiveRemoteNotification:(NSDictionary *)use Deprecated since version 3.7.4: Library Parameters • manager (PushManager) – PushManager Instance, NotNull • userInfo (NSDictionary) – 수신된 Notification 데이타, NotNull • status (PushStatus) – 수신된 Notification 의 상태, NotNull - (void)manager:(PushManager *)manager didReceiveUserNotification:(NSDictionary *)userI status:(NSString *)status messageUID:(NSString *)messageUID {} New in version 3.7.4: Library Parameters • manager (PushManager) – PushManager Instance, NotNull • userInfo (NSDictionary) – 수신된 Notification 데이타, NotNull • status (PushStatus) – 수신된 Notification 의 상태, NotNull • messageUUID (NSString) – 앱에서 부여한 수신된 메세지의 고유 ID, NotNull Example: - (void)manager:(PushManager *)manager didReceiveUserNotification:(NSDictionary *)userInfo statu PushManager *manager = [PushManager defaultManager]; NSDictionary *apsInfo = [userInfo objectForKey:@"aps"]; if ( [apsInfo objectForKey:@"badge"] ) { NSNumber *badge = [apsInfo objectForKey:@"badge"]; // 뱃지 숫자 변경 manager.notificationCenter.badgeNumber = badge; // 뱃지 숫자 초기화 manager.notificationCenter.badgeNumber = [NSNumber numberWithInteger:0]; } // 읽음 확인 [manager read:self notification:notification.userInfo completionHandler:^(BOOL success) NSString *message = ( ! success ) ? @"Confirming Read-Message is FAIL !!" : @"Co NSLog( @"%@", message ); }]; // 알림 메세지 NSString *title = [NSString stringWithFormat:@"PUSH (%@)", status]; NSString *message = [apsInfo objectForKey:@"alert"]; if ( NSClassFromString(@"UIAlertController") ) { 3.2. Push for iOS 55 Morpheus Document, Release Lastest UIAlertController *alert = [UIAlertController alertControllerWithTitle:title mes [alert addAction:[UIAlertAction actionWithTitle:@"취소" style:UIAlertActionStyleC }]]; [alert addAction:[UIAlertAction actionWithTitle:@"확인" style:UIAlertActionStyleD }]]; UIViewController *viewController = [[UIApplication sharedApplication] keyWindow] if ( viewController.presentedViewController ) { viewController = viewController.presentedViewController; } [viewController presentViewController:alert animated:YES completion:^{ }]; } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:message de [alert show]; } } 3.2.8 8. APNS Push Payload UPMC 에서 APNS 로 발송되는 Payload JSON 형태 APNS Payload Keys (APN) APNS 로 보내지는 JSON dictionary object 에 기본적으로 정의되는 aps 대한 키값 정의 Key alert badge Value Type String Number sound String Description Push Message 내용 앱 아이콘에 Badge 표시, 값이 정 의되지 않으면 변경되지 않음 Library/Sounds 폴더에 있는 파일명을 정의하면 알림시 Sound 와 함께 알림. 값이 정의되지 않으면 default 로 처리 UPMC Payload Keys (MPS) APNS 로 보내지는 JSON dictionary object 에 UPMC에서 추가정의되는 mps 대한 키값 정의 56 Chapter 3. Push Morpheus Document, Release Lastest Key appid sender Value Type String String seqno ext Number String Description 발송 타겟의 Application ID 값 발송 주체 ( admin, deviceandroid, device-ios ) DB 처리되고 있는 확장 데이타, 보통 JSON String 형태로 전달. 만약 데이타가 대용량(Rich)인 경우 서버에서 데이타를 HTML형태로 생성하여 해당 URL을 전달 senddate messageuniquekey db_in pushkey String String String String 발송된 시간 발송된 메세지의 고유키 DB Insert 여부 (“Y” or “N”) 발송 대상에 대한 고유 키, 4.0EE 버전에서 출력 History: • 3.6 : senddate 추가 • 3.7 : messageuniquekey 제외, db_in 추가 Example: • Simple Data Push { "aps": { "alert": "", "badge": 1, "sound": "alert.aif" }, "mps": { "appid": "com.uracle.push.test", "seqno": "104", "sender": "admin", "senddate": "2016041417", "db_in": "N", "ext": "", "pushkey": "2b9256f6f959240f4dc5ea2f7ed4095ca693884d" } } • Rich Data Push { "aps": { "alert": "", "badge": 1, "sound": "alert.aif" }, "mps": { "appid": "com.uracle.push.test", "seqno": "387", "sender": "admin", 3.2. Push for iOS 57 Morpheus Document, Release Lastest "senddate": "2016041417", "db_in": "N", "ext": "http://domain.com:8080/resources/totalInfo/0414172200_msp.html", "pushkey": "2b9256f6f959240f4dc5ea2f7ed4095ca693884d" } } 58 Chapter 3. Push CHAPTER 4 IDE 4.1 개요 4.1.1 구성 1. IDE는 Eclipse Plug-In 기반으로 개발되었으며, Eclipse와 동일한 형태의 개발 환경을 제공합니다. 2. 기본 메뉴는 File | Edit | Navigate | Search | Project | Run | Windows | Help 로 구성 됩니다. 4.1.2 실행환경 1. 권장 OS : Windwos XP 이상, mac os x 10.7(64bit) 이상 - 버전에 맞는 실행 파일을 다운로드 받아 설치 해야 합니다. 2. JAVA 버전 : 1.7 이상 4.2 소프트웨어 설치 4.2.1 JDK 설치 Windows 용 1. JDK(Java Developer’s Kit) 설치 Fig. 4.1: <그림 2-1. Java 설치> Java 홈페이지에서 (http://www.oracle.com/) 자신의 OS 환경에 맞는 Java 설치 파일을 다운로드 받아 설치합니다 59 Morpheus Document, Release Lastest 2. 시스템 환경변수 설정 시작 메뉴를 클릭하여 환경변수를 검색하면 그림 2-2와 같이 계정의 환경변수 편집 메뉴가 검색됩니다. Fig. 4.2: <그림 2-2. 환경변수 메뉴 찾기> 또는 환경 변수(N)를 설정하는 창은 위와 같은 방법으로 간단히 접근하거나, ‘내 컴퓨터’ 우 클릭 후 속성 또는 ‘윈도우 키 + Pause/Break 키’를 통해 들어간 시스템 창의 고급 탭 하단의 환경 변수 버튼을 클릭합니다. 윈도우에 설치된 Java 설치 경로를 확인합니다. Java를 설치할 때 경로를 수정하지 않았다면 보통 C:Program FilesJava에 설치되게 됩니다. 그림 2-4와 같이 환경변수 창에 하단 새로 만들기 버튼을 누르고 아래와 같은 값을 입력한 후 확인 버튼을 누릅니다. • 변수 이름(N): JAVA_HOME • 변수 값(V): Java 설치 경로 그림 2-5 와 같이 시스템 변수 리스트에서 Path항목을 찾아 선택한 후 편집 버튼을 누릅니다. 변수 값(V)의 마지막에 세미콜론(;)을 붙여준 뒤 %JAVA_HOME%bin을 추가로 붙여줍니다. 다음으로 그림 2-6과 같이CLASSPATH 항목을 찾아 편집 버튼을 누르고 위에서와 마찬가지로 변수 값 (V) 마지막에 세미콜론(;)을 붙여준 뒤 %JAVA_HOME%libtools.jar을 추가로 붙여줍니다. 윈도우의 커맨드 창을 열어서 java혹은 javac라고 쳤을 때 반응이 있으면 Java 설정이 정상적으로 완료 된 것입니다. Mac 용 MAC OS는 기본적으로 JAVA가 설치되어 있습니다. 현재 OS 버전에 맞게 SE 업데이트 합니다. 4.2.2 안드로이드 SDK 설치 • 안드로이드 개발자 홈페이지에서 안드로이드 SDK 실행파일을 다운로드 받을 수 있습니다. (https://developer.android.com/studio/index.html#downloads) 라이선스 동의와 개발 컴퓨터 환경을 선택 후 다운로드 버튼을 클릭합니다. 다운받은 파일의 압축을 풀면 아래와 같이 eclipse, sdk, SDK Manager가 생성 됩니다.SDK Manager를 더블 클릭하여 실행합니다. 4.2. 소프트웨어 설치 63 Morpheus Document, Release Lastest Fig. 4.3: <그림 2-3. 환경변수 메뉴 찾기(2)> 64 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.4: <그림 2-4. JAVA_HOME 추가> 4.2. 소프트웨어 설치 65 Morpheus Document, Release Lastest Fig. 4.5: <그림 2-5. Path 추가> 66 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.6: <그림 2-6. ClASSPATH 추가> Fig. 4.7: <그림 2-7. Java 설치 확인> 4.2. 소프트웨어 설치 67 Morpheus Document, Release Lastest Fig. 4.8: <그림 2-8 Java 설치 또는 업데이트> Fig. 4.9: <그림 2-9 안드로이드 SDK 다운로드> 68 Chapter 4. IDE Morpheus Document, Release Lastest 안드로이드 버전별 플랫폼 다운로드 Android SDK Manager를 이용하여 필요한 버전의 플랫폼을 다운로드 받아야 합니다. 기본적인 Android Tools은 설치되어 있으며 상황에 따라 Android SDK Build-tools을 업그레이드 및 다운그레이드를 할 수 있습니다. 4.2.3 Xcode 설치 아이폰 프로그래밍을 하기 위해선 필요한 것 중의 하나가 Xcode라고 불리는 애플리케이션 제작 툴입니다. Eclipse, Visual Studio, J빌더 와 같은 개발도구이며 Xcode는 개발자들에게 간결하고 쉽게 프로그래밍 할 수 있도록 다양한 방법을 제공 합니다. Xcode는 Apple App Store에서 무료 다운받아 설치할 수 있습니다. Fig. 4.12: <그림 2-12 Xcode 설치> 4.2. 소프트웨어 설치 69 Morpheus Document, Release Lastest 4.3 IDE(Intergrated Development Environment) 4.3.1 IDE 시작 IDE는 하이브리드 앱을 개발하기 위한 도구로 M 프래임워크에서 제공하는 기능을 쉽고 빠르게 적용하고 개발하 기 위한 도구 입니다. 실행 파일을 더블 클릭하여 프로그램을 실행시키면 그림 3-1 과 같은 로그를 볼 수 있으며, 프로그램 로딩 진행상황을 나타내는 진행 바가 나타나고 IDE가 실행 됩니다. Fig. 4.13: <그림 3-1 Workspace 설정> 실행 후 첫 번째로 나타나는 화면은 IDE를 통해 생성되는 프로젝트들을 저장할 작업 공간을 선택하는 화면입니다. 프로젝트를 저장할 작업공간을 선택하고, OK 버튼을 누르면 아래와 같은 초기 화면이 나타납니다. IDE 상단 메뉴모음에는 M 라이브러리를 관리하는 리소스 매니저 호출 버튼이 있고 도구 왼쪽에는 프로젝트 리 소스들을 관리할 수 있는 기능이 있습니다. 도구 중앙에 위치한 편집기 영역에는 파일의 특성에 맞는 에디터가 열리게 됩니다. 중앙 에디터 영역 오른쪽과 아래엔 에디터 기능을 보조하는 기능들이 위치해 있습니다. 만약 도구 실행 후 위와 같은 레이아웃이 아닐 경우 도구 메뉴 중 Window → Open Perspective → Other를 선택한 후 Mobile 항목을 선택하면 위와 같은 화면으로 재구성 됩니다. 4.3.2 리소스 매니저 IDE를 이용하여 하이브리드앱을 개발하기에 앞서 개발에 필요한 파일들을 리소스 매니저를 통해 설치해야 합니 다. 리소스 매니저를 통해 개발에 필요한 파일들을 설치, 삭제, 업데이트 할 수 있습니다. 도구 상단 메뉴 중 리소스 매니저 열기 버튼을 클릭하면 리소스 매니저 대화상자가 그림 3-5와 같이 나오게 됩니다. 70 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.14: <그림 3-2 IDE 초기화면> 4.3. IDE(Intergrated Development Environment) 71 Morpheus Document, Release Lastest Fig. 4.11: <그림 2-11 안드로이드 플랫폼 다운로드> 72 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.15: <그림 3-3 퍼스팩티브 지정> Fig. 4.16: <그림 3-4 툴바 메뉴> 4.3. IDE(Intergrated Development Environment) 73 Morpheus Document, Release Lastest Fig. 4.17: <그림 3-5 리소스 매니저> 리소스 매니저 왼쪽에는 설치 항목들이 트리 구조로 나열되고 여기서 선택되는 아이템에 대한 설명이 오른쪽 화면 에 나오게 됩니다. 각 항목들에 대한 설치 상태를 보고 설치할 항목들을 선택합니다. 설치가 되어있지 않을 경우 미 설치로 상태 값이 표기되며, 설치된 파일들 중 업데이트된 항목이 있을 경우 업데이트를 받을 수 있습니다. 리소스 매니저의 각 기능들은 다음과 같습니다. • 목록 업데이트 : 서버에서 최신목록을 받아와 화면에 표시 합니다. • 전체 선택해제 : 선택된 아이템을 해제 합니다. • 리소스 설치 : 선택된 파일을 설치합니다. • 리소스 삭제 : 선택된 파일을 삭제합니다. • 리소스 가져오기 : 네트워크에 연결되지 않아 서버에서 직접 파일들을 설치하기가 어려운 경우 이용하게 됩니다. 압축파일 형태의 리소스를 선택하여 설치하게 됩니다. • 리소스 내보내기 : 현재 설치되어 있는 리소스를 압축파일 형태로 배포합니다. 리소스 매니저에 나오는 항목들은 모두 개발에 필요한 파일들이므로 모두 설치 후 개발 시작하는 것을 권장합니다. 4.3.3 프로젝트 프로젝트 생성 Application Project Wizard를 통해 신규 프로젝트를 생성 하게 됩니다. Application Project Wizard를 호출 하는 방법은 다음과 같습니다. • 상단 메뉴 중 File → New → Application Project 선택 • 마우스 오른쪽 버튼 → New → Application Project 선택 • 메뉴 바 New 아이콘 → Application Project 선택 프로젝트를 생성하고 프로젝트 기본 정보를 입력하는 첫 번째 페이지가 호출 됩니다. 각 입력 항목들에 대한 설명은 다음과 같습니다. 74 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.18: <그림 3-6 프로젝트 생성 위자드 첫번째 페이지> 4.3. IDE(Intergrated Development Environment) 75 Morpheus Document, Release Lastest • 프로젝트 이름 : 프로젝트 이름을 입력합니다. • 라이선스 정보 : 앱에 적용할 라이선스를 선택합니다. 만약 라이선스가 없을 경우 교육용 라이 선스를 선택하여 앱을 생성할 수 있고 발급받은 라이선스가 존재한다면 추가하기 버튼을 눌러 라이선스를 추가한 후 선택 할 수 있습니다. 라이선스가 선택되면 라이선스에서 정의하고 있는 앱 아이디가 자동으로 안드로이드 패키지 이름, iOS 번들 아이디에 적용됩니다. • 동일한 애플리케이션 정보 사용하기 : 애플리케이션 정보 중 동일한 애플리케이션 정보 사용하기 선택 시에는 Android, iOS 서로 동일한 애플리케이션 이름을 사용합니다. • 서로 다른 애플리케이션 정보 사용하기 : 애플리케이션 정보 중 서로 다른 애플리케이션 정보 사용하기 선택 시에는 Android, iOS 각각 서로 다른 애플리케이션을 사용합니다 • 프로젝트 이름 : 프로젝트로 사용할 이름을 입력합니다. • 애플리케이션 이름 : 애플리케이션 이름을 입력합니다. 기기에 설치되면, 표시되는 앱 이름입 니다. • 안드로이드 SDK 버전 : 안드로이드 SDK 버전 선택 : compile시 참조할 SDK 버전을 선택합니다. • 안드로이드 패키지 아이디와 iOS 번들 아이디 는 Google play 와 App Store에서 앱을 등록하기 위한 고유 식별자 입니다. Morpheus Manifest Editor의 overview 탭을 통해, 수정할 수 있습니다. (적용된 라이선스에 따라, 기능이 제한될 수 있습니다.) • iOS Deployment Target : 배포할 iOS 버전을 선택합니다. 첫 페이지에 입력할 정보들을 모두 입력했으면 하단의 Next 버튼이 활성화 됩니다. Next 버튼을 눌러 다음단계로 넘어갑니다. 그림 3-7은 샘플로 제공하는 Template을 선택하는 화면입니다. 왼쪽에 위치한 프로젝트 항목을 선택 하면 생성하는 프로젝트에 선택한 템플릿이 적용됩니다. 중앙에 위치한 미리 보기 기능 상단에 Page1, Page2 를 클릭하면 템플릿 프로젝트의 주요화면을 확인할 수 있습니다. 오른쪽에 위치한 프로젝트 설명 영역에는 현재 선택된 템플릿 프로젝트에 대한 필수 라이브러리가 표시 돕니다. 만약 템플릿 프로젝트가 보이지 않는다면 하단에 있는 리소스 매니저 열기 버튼을 클릭하여 최신 라이브러리 및 에뮬레이터, 템플릿을 업데이트 하고, 설치할 수 있습니다. 프로젝트에 적용할 템플릿 프로젝트를 선 택했으면 Next 버튼을 눌러 다음단계로 넘어갑니다. 다음은 그림 3-8과 같은 프로젝트에 적용할 라이브러리를 선택하는 화면입니다. 코어 라이브러리 API 버전 선택 항목은 제공되는 라이브러리의 버전을 선택하고, 애드온 라이브러리를 선택적으로 사용 할 수 있습니다. 애드온 라이브러리는 default가 전체 선택되어 있으며, 필요 시 해제 할 수도 있으나 전체 선택하여 사용하는 것을 권장합니다. 플러그인 라이브러리는 플랫폼에서 제공하는 플러그인 라 이브러리가 표시되는 영역으로 Native 제어가 필요한 부분에 대해, 미리 Plug-In화 하여 제공합니다. 플러그인이 필요한 사항은 게시판(컨설팅팀)을 통해 요청이 가능하며 플러그인 개발 여부 및 개발일 정은 자체 일정을 감안하여, 판단합니다. 늦어지는 경우, 프로젝트 조직에서 자체 개발이 필요할 수 있습니다. 만약 적용할 라이브러리가 없다면 하단 리소스 매니저 열기 버튼을 클릭하여 최신 라이브러 리 및 에뮬레이터, 템플릿을 업데이트 하고, 설치할 수 있습니다. 라이브러리를 모두 적용 했으면 Next 버튼을 눌러 다음단계로 넘어갑니다. 그림 3-9 는 앱에 적용될 부가정보를 설정하기 위한 페이지 입니다. 위에는 각 항목들을 입력할 수 있게 되어있고 제목 링크를 클릭하면 선택한 항목에 대한 설명이 하단 설명 영역에 나타납니다. 각 항목들에 대한 설명은 아래와 같습니다. • Log : 개발 시 콘솔창에서 Log를 보기 위해 설정 입니다. • Language : 기본 언어를 선택합니다. • Base Version : 다운로드 된 리소스를 관리하기 위한 버전입니다. 사용자가 마켓에서 앱을 다운 로드 후, 실행하면 기본 버전부터 최신 버전까지 리소스를 차례로 업데이트 하여, 최신 버전으로 유지 시켜 줍니다. • Target [리소스 다운로드 위치를 설정합니다. 서비스 시에는 “doc”를 권장합니다.] 76 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.19: <그림 3-7 프로젝트 생성 위자드 두번째 페이지> 4.3. IDE(Intergrated Development Environment) 77 Morpheus Document, Release Lastest Fig. 4.20: <그림 3-8 프로젝트 생성 위자드 세번째 페이지> 78 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.21: <그림 3-9 프로젝트 생성 위자드 네번째 페이지> 4.3. IDE(Intergrated Development Environment) 79 Morpheus Document, Release Lastest – app : 앱 안에 포함된 리소스를 사용한다.(개발 및 리소스 업데이트를 사용하지 않는 경우 사용) – doc : 앱에 할당된 read/write 가 가능한 공간에 있는 리소스를 사용한다.(리소스 업데 이트와 리소스 복사 기능을 이용하여 배포하는 경우 사용) – sdcard : sdcard 영역에 포함된 리소스를 사용한다.(개발시 사용) - 지원 OS : Android (OS 정책에 따라, 지원이 제한될 수 있습니다.) • Start Page Name : 앱 실행 후, 가장 먼저 호출하는 Page 입니다. • Start Page Orientation : 앱 실행 시, 초기 화면의 방향을 지정합니다. • Start Page Orientation(Tablet) : 앱이 실행되는 단말기가 태블릿인 경우 앱 실행 시, 초기 화면의 방향을 지정합니다. • Default Orientations : 앱의 기본 회전 방향을 선택합니다. • Default Orientations(Tablet) : 앱이 실행되는 단말기가 태블릿인 경우 앱의 기본 회전방향을 선택 합니다. • Default Animation : 앱의 화면 전환 시 기본 Animation 을 선택합니다. • Default Indicator : 화면 전환 및 통신으로 인한 Indicator 표시 여부를 선택합니다. • Hardware Acceleration : 안드로이드 하드웨어 가속 기능 사용 유무를 선택합니다. • Theme : 안드로이드 Theme 사용 유무를 선택합니다. 모든 설정이 끝난 후 Finish 버튼을 누르면 설정정보를 반영한 프로젝트가 생성됩니다. 프로젝트 구조 프로젝트는 하이브리드 앱을 만들기 위한 파일 구조로 Android, iOS 리소스 + 프래임워크 파일 + 화 면을 구성하는 HTML, Javascript 파일로 구성됩니다. Application Project Wizard를 통해 프로젝트가 생성되면 그림 3-10 과 같이 IDE 왼쪽에 위치한 Project Explorer에서 프로젝트를 확인할 수 있습니다. 프로젝트 트리를 열어보면 위 그림과 같은 구조를 확인할 수 있습니다. 각 파일들은 다음과 같은 역할을 합니다. • M-Core : 프로젝트에 적용된 M 라이브러리들을 확인 할 수 있습니다. • Android x.x : 프로젝트에 적용된 안드로이드 SDK 라이브러리를 확인할 수 있습니다. • Android Private Libraries : 안드로이드 프로젝트에 적용된 JAVA 라이브러리들을 확인할 수 있습 니다. • src : 안드로이드 Java 소스파일이 위치해 있습니다. 이곳에서 안드로이드 Native Source를 수정할 수 있습니다. • gen : 안드로이드 리소스를 자동관리하는 R.java 파일이 위치하게 됩니다. • assets [화면을 구성하는 HTML, Javascript, img, js 파일이 위치하게 됩니다. assets 폴더를 열 어서 내부를 살펴보면 아래 그림과 같습니다. res 폴더 안으로 www 폴더가 있고 그 안에 프로젝트 생성과정에서 선택한 템플릿 화면을 구성하는 HTML 구성요소들이 폴더로 구분 되어 들어가 있습니다. 그 밑으로 앱 설정정보를 담고있는 Manifest.xml 파일과 라이선스 정보가 있는 mcore.mobile.lic 파일이 있습니다. 앱 화면 구성을 위해 대부분의 작업을 이 폴더 내부에서 하게 될 것 입니다.] <그림 3-11 assets> • bin : 빌드 과정에서 생성되는 파일들이 저장됩니다. • libs : 안드로이드 Java 라이브러리 파일을 추가하는 폴더 입니다. 80 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.22: <그림 3-10 프로젝트 구조> 4.3. IDE(Intergrated Development Environment) 81 Morpheus Document, Release Lastest • native : iOS 앱을 위한 프로젝트 파일이 위치해 있습니다. (주의)iOS Native Source 수정은 xcode 를 통해 지원하고 있습니다. • res : 안드로이드 리소스들을 저장하는 위치 입니다. • AndroidManifest.xml : 안드로이드 앱 설정 정보를 담고있는 Manifest 파일입니다. • application.xml : 프로젝트 설정 정보를 담고있는 파일입니다. • 기타 파일 : 프로젝트 빌드 설정 정보를 담고있습니다. 4.3.4 Application Editor Application Editor는 개요, Manifest, 라이브러리 매니저, Manifest.xml 탭으로 구성되며 앱의 기본 정보 및 각종 설정 정보를 확인하고 변경할 수 있습니다. Application Editor는 프로젝트 생성과 동시에 열리게 되며, Project Explorer에서 프로젝트 내부에 있는 application.xml 파일이나 assets/res/www/Manifest.xml 파일을 더블 클릭하여 열 수 있습니다. Application Editor에서 설정 정보를 변경한 후에는 Ctrl + S(Mac : command + S) 버튼을 눌러 변경 내용을 저장 할 수 있습니다. 개요 Fig. 4.23: <그림 3-12 개요> 개요 탭에서는 앱의 기본정보를 설정하고 실행과 배포를 할 수 있는 링크들을 제공합니다. 각 그룹별 기능은 다음과 같습니다. • 프로젝트 기본정보 – 프로젝트 이름 : 해당 프로젝트 이름입니다. – 라이선스 상태 [라이선스 적용 유무를 나타냅니다. 라이선스를 변경해야 할 경우 변 경하기 버튼을 이용해 라이선스를 변경할 수 있습니다.] 82 Chapter 4. IDE Morpheus Document, Release Lastest <그림 3-13 라이선스 변경> 변경할 라이선스를 선택하게 되면 그림 3-13 과 같은 대화상자가 나타나는데 라이선스에 등록되어 있는 애플리케이션 아이디로 변경을 선택할 경우 안드로이드 패키지 이름과 iOS 번들 아이디를 입력 창이 나타나고 입력된 정보가 자동으로 변경됩니다. • Android 프로젝트 기본정보 – 애플리케이션 이름 : 안드로이드 단말기에 설치될 때 보여지게 될 이름입니다. – 안드로이드 패키지 이름 : 안드로이드 프로젝트 고유 ID값 입니다. • iOS 프로젝트 기본정보 – 애플리케이션 이름 : iOS 단말기에 설치되고 보여지게 될 이름입니다. – Bundle Identifier : iOS 프로젝트 고유 ID값 입니다. • 설정 페이지들 – Manifest : Manifest 탭으로 이동합니다. – 라이브러리 매니저 : 라이브러리 매니저 탭으로 이동합니다. • 실행 / 배포 – 실행하기 * 안드로이드 디바이스/에뮬레이터에서 애플리케이션을 실행 합니다. * 아이폰 디바이스/시뮬레이터에서 애플리케이션을 실행합니다. * 브라우저 에뮬레이터에서 애플리케이션을 실행 합니다. – 배포하기 * 애플리케이션을 안드로이드 패키지로(APK) 배포합니다. * 애플리케이션을 iOS 패키지로(IPA) 배포합니다. * 애플리케이션 프로젝트를 압축파일(Zip)으로 배포합니다. * 애플리케이션 프로젝트 리소스를 압축파일(Zip)로 배포합니다. – 프로젝트들 * iOS 프로젝트를 Xcode 로 엽니다. 4.3. IDE(Intergrated Development Environment) 83 Morpheus Document, Release Lastest Fig. 4.24: <그림 3-14 Manifest> Manifest Manifest 탭에서는 앱 관련 설정들을 합니다. 왼쪽에 설정 항목들이 있고 항목을 클릭하면 오른쪽 설명 영역에 선택한 항목에 대한 설명을 확인할 수 있습니다. • 기본설정 – Log : 개발 시 콘솔 창에서 Log를 보기 위해 설정 입니다. – Language : 기본 언어를 선택합니다. – Base Version : 다운로드 된 리소스를 관리하기 위한 버전입니다. 사용자가 마켓에서 앱을 다운로드 후, 실행하면 기본 버전부터 최신 버전까지 리소 스를 차례로 업데이트 하여, 최신 버전으로 유지 시켜 줍니다. – Target : 리소스 다운로드 위치를 설정합니다. 서비스 시에는 “doc”를 권장 합니다. • app : 앱 안에 포함된 리소스를 사용한다.(개발 및 리소스 업데이트를 사용하지 않는 경우 사용) • doc : 앱에 할당된 read/write 가 가능한 공간에 있는 리소스를 사용한다.(리소스 업 데이트와 리소스 복사 기능을 이용하여 배포하는 경우 사용) • sdcard : sdcard 영역에 포함된 리소스를 사용한다.(개발 시 사용) - 지원 OS : Android • sdcard 사용은 os 버전에 따라, 기능이 제한될 수 있으므로, 권장하지 않음 – Start Page Name : 앱 실행 후, 가장 먼저 호출하는 Page 입니다. – Start Page Orientation : 앱 실행 시, 초기 화면의 방향을 지정합니다. – Start Page Orientation(Tablet) : 앱이 실행되는 단말기가 태블릿인 경우 앱 실행 시, 초기 화면의 방향을 지정합니다. 84 Chapter 4. IDE Morpheus Document, Release Lastest – DirectView [UI / Script 수정 후, 단말기에 컴파일시 소요 되는 시간을 단 축하기 위해 IDE 내부의 로컬웹서버를 통해 데이터를 호출 할 수 있 도록 하는 기능입니다.] 주의) 해당 기능을 사용하기 위해서는 동일한 네트워크상에 있어야 합니다. 즉, IDE환경의 PC와 단말기가 같은 와 이파이 망에 접속되어 있어야 합니다. – Default Orientations : 앱의 기본 회전 방향을 선택합니다. – Default Orientations(Tablet) : 앱이 실행되는 단말기가 태블릿인 경우 앱의 기본 회전방향을 선택합니다. – Default Animation : 앱의 화면 전환 시 기본 Animation 을 선택합니다. – Default Indicator : 화면 전환 및 통신으로 인한 Indicator 표시 여부를 선택 합니다. • 네트워크 설정 애플리케이션과 연동할 서버를 추가, 삭제 합니다. 네트워크 그룹 에서 추가하기 버튼을 누르면 아래와 같은 대화상자가 나타납니다. .. figure:: ../../../_static/ide/client/3/3-15.png <그림 3-15 네트워크 설정> – Type : 서버와 연결할 연결 Protocol을 선택합니다. – Name : 서버 이름을 입력합니다. – Path [선택된 Protocol에 대해 생성된 Class 가 보여집니다.] 주의) Network Class AsyncHttpNetwork (http type)또는 AsyncSocketNetwork (TCP/IP type)을 상속받아 구현되어야 합니다. – Address : 서버 주소를 입력합니다. – Timeout : 서버와 연결 지연 제한 시간을 입력합니다. – Encoding : 문자 인코딩 방식을 입력합니다. – RESTful : HTTP를 선택한 경우 RESTful 사용 유무를 선택합니다. – Port : TCP/IP를 선택한 경우 연결 포트를 입력합니다. • 리소스 업데이트 리소스 업데이트 기능을 이용한 앱 배포일 경우(Target = doc) 리소스 업데이트 받을수 있는 서버 정보를 설정합니다. • Server : 네트워크 설정에서 추가한 서버 리스트 중 업데이트 서버를 선택합 니다. • Tr code : 리소스 업데이트 서비스 코드를 설정합니다. Tr code는 업데이트 서 버가 서비스를 지원하는 형태에 따라 rest 방식과 interface.do 방식으로 구분됩 니다. • Mode : 업데이트 서버가 갖고 있는 개발배포(dev), 운영배포(real)중 어떤 리소 스를 요청할 것인지를 선택합니다. • 애플리케이션 – Hardware Acceleration : 안드로이드 하드웨어 가속 기능 사용 유무를 선택 합니다. – Theme : 안드로이드 Theme 사용 유무를 선택합니다. 4.3. IDE(Intergrated Development Environment) 85 Morpheus Document, Release Lastest Fig. 4.25: <그림 3-16 라이브러리 매니저> 라이브러리 매니저 앱에 적용된 라이브러리들을 추가, 삭제, 업데이트 할 수 있습니다. 그림 3 16의 왼쪽에 있는 라이브 러리 목록에서 라이브러리를 선택하면 오른쪽 설명 그룹에서 해당 라이브러리에 대한 정보 및 상세 히스토리를 확인 할 수 있습니다. • 코어 라이브러리 API : 리소스 매니저를 통해 최신의 코어 라이브러리를 받은 경우 이 그룹에서 최신 코어 라이브러리를 앱에 적용할 수 있습니다. 최신의 코어라이브 러리가 확인된 경우 새 버전으로 업데이트하기 버튼이 활성화 됩니다. • 애드온/플러그인 라이브러리 : 애드온/플러그인 라이브러리를 추가, 삭제, 업데이트 할 수 있습니다. 주의) 라이브러리 / 플러그인을 선택 / 해제 후 반영을 위해 반드시 라이브러리 적용 /적용 해제 버튼을 선택해야 합니다. Manifest.xml Manifest 탭과 라이브러리 매니저 탭 설정을 통해 생성되는 Manifest.xml 파일을 확인 할 수 있습니다. 파일 포멧 유지를 위해 직접 수정은 제한됩니다. 4.3.5 프로젝트 실행 IDE 에서는 안드로이드, iOS, 브라우저 에뮬레이터를 통한 프로젝트 실행을 지원합니다. 프로젝트를 실행하는 방법으로 Application Manifest Editor를 이용하는 방법과 도구 상단 Run 버튼을 이용하는 방법이 있습니다. • Application Manifest Editor를 열고 실행 / 배포 그룹에서 원하는 실행 방법을 선택합니다. 86 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.26: <그림 3-12 실행 메뉴> • Project Explorer에서 실행하려는 프로젝트를 선택하고 도구 상단 Run 메뉴 옆에 세모 버튼을 누르면 그럼 아래 그림과 같이 드롭다운 메뉴가 나타납니다. Fig. 4.27: <그림 3-18 실행 메뉴(2)> Run As메뉴에서 Application for Android, Application for Browser Emulator, Application for iOS 메뉴 중 원하는 실행방법을 선택합니다. 안드로이드 디바이스 / 에뮬레이터에서 실행 • 안드로이드 디바이스로 실행 안드로이드 디바이스가 PC에 연결된 상태에서 앱을 실행하면 그림 3-19와 같 은 안드로이드 디바이스 선택 대화상자가 나타납니다. 연결한 안드로이드 디바이스를 선택하고 OK 버튼을 누르면 선택한 디바이스에 앱이 설치되고 실행됩 니다. • 에뮬레이터로 실행 앱을 에뮬레이터로 실행하기에 앞서 안드로이드 에뮬레이터를 생성해야 합니다. 도구 상단에서 Android Virtual Device Manager 버튼을 클릭합니다. Android Virtual Device Manager(그림 3-20) 대화상자 중앙에는 설치된 안드로이드 에뮬레이터 리스트 가 나타나고 오른쪽에 있는 Create 버튼을 클릭하면 그림 3-21과 같은 새로운 안드로이드 에뮬레이터를 설정할 수 있는 대화상자가 나타납니다 4.3. IDE(Intergrated Development Environment) 87 Morpheus Document, Release Lastest Fig. 4.28: <그림 3-19 디바이스 선택> 88 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.29: <그림 3-20 안드로이드 에뮬레이터 선택> 4.3. IDE(Intergrated Development Environment) 89 Morpheus Document, Release Lastest Fig. 4.30: <그림 3-21 안드로이드 에뮬레이터 생성> – AVD Name : 생성하려는 안드로이드 에뮬레이터 이름을 입력합니다. – Device : 타겟 디바이스를 선택합니다. – Target : 안드로이드 OS 버전을 선택합니다. – CPU/ABI : CPU 종류를 선택합니다. – Keyboard : PC 키보드를 에뮬레이터에서 사용할지 선택합니다. – Skin : 선택한 OS에서 지원하는 하면 사이즈를 선택합니다. – Front Camera : 전면 카메라를 선택합니다. – Back Camera : 후면 카메라를 선택합니다. – Memory Options : 메모리 용량을 설정합니다. – Internal Storage : 에뮬레이터 저장공간 용량을 설정합니다. – SD Card : SD 카드를 생성하거나 이미지 파일이 있는경우 설정할 수 있습니다. – Emulation Options : 기타 안드로이드 에뮬레이터에서 지원하는 옵션을 선택합니다. 90 Chapter 4. IDE Morpheus Document, Release Lastest 모든 설정이 끝났으면 Finish 버튼을 눌러 안드로이드 에뮬레이터를 생성합니다. 에뮬레이터 생성이 완료 된 후 다시 앱을 안드로이드로 실행 하면 안드로이드 에뮬레이터를 통해서 앱이 실행됩니다. 아이폰 디바이스 / 시뮬레이터에서 실행 앱을 iOS 실행하기를 선택하면 그림 3 22와 같은 iOS 애플리케이션으로 실행하기 대화 상자가 나타납 니다. • 시뮬레이터로 실행하기 iOS 애플리케이션으로 실행하기 대화상자에서 iPhone / ipad 시뮬레이터로 실행하기를 선택하고 시뮬레이터 정보 – SDK Version : 실행하려는 iOS 버전을 선택합니다. – Device Family : iPhone / ipad를 선택합니다. – Retina Display로 실행하기를 선택합니다. 설정을 마친 후 OK 버튼을 누르면 시뮬레이터가 실행되고 앱이 실행됩니다. • 디바이스로 실행하기 iPhone 디바이스가 연결하고 iOS 애플리케이션으로 실행하기 대화상자 에서 iPhone / ipad 디바이스로 실행하기를 선택합니다. 디바이스 목록에서 앱을 실행할 디바이스를 선택한 후 OK 버튼을 누릅니다. 브라우저 에뮬레이터에서 실행 Browser Emulator는 UI / Script를 PC 환경에서 빠르고 편리하게, 개발 / 디버깅 할 수 있도록 편의 기 능을 제공하기 위한 툴입니다. Browser Emulator 실행 시 크롬 브라우저에서 Ajax 통신을 위해 보안 설정을 해제하고 실행되어야 합니다. 브라우저 에뮬레이터로 실행하기를 선택하면 그림 3-23와 같이 브라우저 에뮬레이터를 선택하는 대화상자가 나오게 됩니다. 브라우저 에뮬레이터를 선택하고 OK 버튼을 누르면 실행중인 크롬 브라우저는 종료 강제 종료 후 재실행 됩니다. 브라우저 에뮬레이터에서는 로컬 웹 서버를 통해 실행되므로 수정되는 화면을 실시 간으로 확인할 수 있습니다. 주의) Browser Emulator는 Direct View가 사용 안함으로 선택되어 있어야 합니다. 4.3.6 프로젝트 배포하기 IDE 에서는 안드로이드 APK, iOS IPA, 프로젝트 압축, 리소스 배포를 지원합니다. 프로젝트를 배포하는 방법으로 Application Manifest Editor를 이용하는 방법과 Export 메뉴를 이용하는 방법이 있습니다. • Application Manifest Editor를 열고 배포하기 그룹에서 원하는 배포 방법을 선택합니다. Fig. 4.33: <그림 3-24 배포하기> 4.3. IDE(Intergrated Development Environment) 63 Morpheus Document, Release Lastest • 상단 메뉴 중 File → Export를 선택하면 그림 3-25와 같은 Export 대화상자가 나타납니다. 트리를 열고 원하는 배포 방법을 선택합니다. Fig. 4.34: <그림 3-25 Export> 안드로이드 패키지로 배포하기 안드로이드 패키지로 배포하기를 선택하면 그림 3 26과 같이 Android APK Export Wizard가 실행됩 니다. Wizard 왼쪽에서 내보내려는 프로젝트를 선택하면 오른쪽에 선택한 프로젝트가 가지고 있는 리소스들이 나타납니다. 프로젝트 선택 초기에는 모든 리소스들이 선택되어 있고 마우스 클릭을 통 해 선택을 해제할 수 있습니다. 해제된 리소스들은 패키지에 포함되지 않게 되므로 리소스 업데이트 기능을 사용시 이용할 수 있습니다. 주의) 반드시 포함되어야 할 항목 Manifest.xml, mcore.mobile.lic, mcore.min.js, wninterface.js와 리소 스 최초 업데이트와 관련된 기본 파일 64 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.35: <그림 3-26 안드로이드 APK 배포(1)> 4.3. IDE(Intergrated Development Environment) 65 Morpheus Document, Release Lastest 리소스 파일 선택의 편의성을 제공하기 위해 필터 기능을 제공하고 있습니다. 필터 옵션 버튼을 누르면 그림 3-27과 같은 화면이 나타납니다. Fig. 4.36: <그림 3-27 파일 필터> 필터기능에는 파일 확장자, 파일 이름, 수정 기간, 결과내 재검색, 대소문자 구분등의 필터 기능을 제공 하고 있습니다. • 파일 확장자 선택 : 선택된 확장자 파일만 선택합니다. 만약 선택하려는 확장자가 리스트에 없 을 경우 Other extensions 항목에 입력하시면 됩니다. 이때 입력 형식은 *.확장자 이름이 되어야 합니다. • 파일 이름 : 파일 이름으로 검색할 경우 검색하려는 이름을 입력합니다. “*” 문자를 이용해 시작 문자열, 끝나는 문자열 검색도 가능합니다.(ex) NewFile*, *system) • 기간 : 파일의 수정 날짜로 검색합니다. • 결과 내 재검색 : 현재 선택되어있는 파일들을 재 검색합니다. • 대소문자 구분 : 파일 이름의 대소문자를 구분해서 검색합니다. 필터 옵션을 모두 선택하고 OK 버튼을 누르면 선택된 필터 기능들이 AND 연산되어 파일을 선택합니 다. 리소스 파일 선택을 하고 Next 버튼을 눌러 다음 단계로 이동합니다. 이번 단계는 배포되는 앱에 서명을 위한 Keystore 선택 페이지 입니다. 이미 생성해 놓은 Keystore가 있다면 Location의 Browse 버튼을 눌러 Keystore 파일을 선택하고 설정된 비밀번호를 입력합니다. 만 약 생성된 Keystore가 없다면 Create new keystore를 선택하고 Location의 Browse 버튼을 눌러 새로운 Keystore를 저장할 경로와 이름을 입력합니다. 파일을 입력하였으면 Keystore 비밀번호와 비밀번호 확인을 위해 Confirm에 다시 한번 입력합니다. Keystore선택 혹은 생성 설정이 완료 되면 Next 버튼을 눌러 다음단계로 넘어갑니다. • 이미 생성되어 있는 Keystore를 선택한 경우 66 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.37: <그림 3-28 안드로이드 APK 배포(2)> 4.3. IDE(Intergrated Development Environment) 67 Morpheus Document, Release Lastest Fig. 4.38: <그림 3-29 안드로이드 APK 배포(3)> 68 Chapter 4. IDE Morpheus Document, Release Lastest • Keystore 생성을 선택한 경우 Fig. 4.39: <그림 3-30 안드로이드 APK 배포(4)> Alias를 생성하는 페이지가 나타납니다. • Alias : Alias을 입력합니다. • Password : Alias 비밀번호를 입력합니다. • Confirm : Alias 비밀번호 확인을 위해 위에서 입력한 비밀번호를 다시 한번 입력합 니다. • Validity : 생성하는 Alias의 유효기간을 숫자로 입력합니다. • First and Last Name : 개발자 이름을 입력합니다. 4.3. IDE(Intergrated Development Environment) 69 Morpheus Document, Release Lastest 위 5개 항목을 입력하면 Next 버튼이 활성화 되고 다음 단계로 넘어갈 수 있습니다. Next 버튼을 눌러 다음 단계로 넘어갑니다. Fig. 4.40: <그림 3-30 안드로이드 APK 배포(5)> 배포 파일의 경로를 설정합니다. Destination APK file의 Browse 버튼을 눌러 경로를 선택 하고 배포 파일의 이름을 입력합니다. 여기까지 모든 설정을 했으면 Finish 버튼이 활성화 됩니다. Finish 버튼을 누르면 선택한 경로에 안드로이드 배포 파일이 생성됩니다. iOS 패키지로 배포하기 iOS 패키지로 배포하기를 선택하면 그림 3-32와 같이 iOS IPA Export Wizard가 실행됩니다. Wizard 왼쪽에서 내보내려는 프로젝트를 선택하면 오른쪽에 선택한 프로젝트가 가지고 있는 리소스들이 나 70 Chapter 4. IDE Morpheus Document, Release Lastest 타납니다. 리소스 선택 및 필터 적용법은 안드로이드 패키지 배포하기에서 설명한 내용과 동일합니다. 파일 경로의 Browser 버튼을 눌러 IPA 파일이 배포될 경로와 파일 이름을 입력한 후 Next 버튼을 눌러 다음 단계로 넘어갑니다. 그림 3-33에서는 빌드 하려는 iOS SDK 버전과 사인하려는 개발자 인증서를 선택합니다. IOS 개발자 인증서는 iOS Provisioning Portal 을 통해 생성하여 PC에 저장되어 있어야 리스트에 나오게 됩니다. 모든 설정을 마치고 Finish 버튼을 누르면 설정한 경로에 ipa 파일이 생성됩니다. 프로젝트를 압축파일로 배포하기 프로젝트에서 찾기... 버튼을 눌러 zip파일로 내보내려는 프로젝트를 선택합니다. 프로젝트가 선택되 면 프로젝트 정보에 프로젝트 이름 및 프로젝트에 적용된 라이브러리 정보가 나타납니다. 대상파일의 찾기... 버튼을 눌러 내보내려는 파일의 경로와 파일명을 입력합니다. 모든 설정 완료 후 Finish 버튼을 누르면 선택한 경로에 zip 형식으로 압축된 파일이 생성됩니다. 리소스 배포하기 본 기능은 리소스 업데이트 기능을 사용하여 업데이트를 지원하는 앱이 리소스 업데이트가 있을 경우 서버에 등록하기 위한 리소스 파일을 배포하기 위한 기능 입니다. 그림 3-35 위자드의 왼쪽에서 프 로젝트를 선택하고 오른쪽에서 배포하려는 리소스 파일을 선택합니다. 파일 필터 기능은 안드로이드 내보내기의 기능과 동일합니다. 파일경로에 내보내려는 파일 경로를 선택하고 Finish 버튼을 누르면 설정한 경로에 리소스 업데이트 서버에 올릴 수 있는 압축 파일이 생성됩니다. 4.3.7 프로젝트 가져오기 IDE 에서는 디텍터리 구조, 압축파일의 프로젝트 가져오기를 지원합니다. 상단 메뉴 중 File → Import 를 선택하면 그림 3-36과 같은 Import 대화상자가 나타납니다. 트리를 열고 Import Application Project를 선택하고 Next 버튼을 누릅니다. 가져오려는 프로젝트를 선택하고 Finish 버튼을 누르면 프로젝트를 Project Explorer에서 확인 할 수 있습니다. 4.3.8 Browser Emulator Browser Emulator는 UI / Script를 PC 환경에서 빠르고 편리하게, 개발 / 디버깅 할 수 있도록 편의 기능을 제공하기 위한 툴입니다. 그림 3-38은 브라우저 에뮬레이터를 통해 실행된 샘플 앱 화면 입니다. 직접 입력을 통해서도 해상도를 변경할 수 있고 그 아래 제조사 별 디바이스 선택을 통해서도 해상도 변경이 가능 합니다. 그림 3-40의 오른쪽 영역의 붉은 표시 항목이 미 준수 항목으로 요소 체크가 가능합니다. 4.3.9 IDE 환경 설정 IDE 환경 설정을 하기 위해서는 그림 3-41과 같이 환경설정 메뉴를 선택합니다. 메뉴를 선택하면 환경설정 다이얼로그가 실행된다. 왼쪽 메뉴에 M 트리를 선택 하면 M , License, Local WebServer 3개의 환경 설정 페이지를 확인 할 수 가 있습니다. 4.3. IDE(Intergrated Development Environment) 71 Morpheus Document, Release Lastest Fig. 4.32: <그림 3-23 브라우저 에뮬레이터 실행> 72 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.41: <그림 3-32 iOS IPA 배포(1)> 4.3. IDE(Intergrated Development Environment) 73 Morpheus Document, Release Lastest Fig. 4.42: <그림 3-33 iOS IPA 배포(2)> 74 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.43: <그림 3-34 압축파일 배포> 4.3. IDE(Intergrated Development Environment) 75 Morpheus Document, Release Lastest Fig. 4.44: <그림 3-35 리소스 배포> 76 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.45: <그림 3-24 Import> 4.3. IDE(Intergrated Development Environment) 77 Morpheus Document, Release Lastest Fig. 4.46: <그림 3-37 프로젝트 가져오기> • Select root directory : 가져오려는 프로젝트가 폴더구조로 존재하는 경우 이곳에 경로를 입력합니다. • Select archive file : 가져오려는 프로젝트가 압축파일일 경우 이곳에 경로를 입력합니다. • Projects : 선택된 경로에 있는 프로젝트가 나열됩니다. 가져오려는 프로젝트를 선택할 수 있습니다. • Search for nested projects : 중첩된 프로젝트가 존재하는지 검사합니다. 78 • Copy Projects into workspace : Workspace로 프로젝트 파일을 복사합니다. • Working sets : 생성되어있는 워킹셋에 프로젝트를 추가합니다. Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.47: <3-38 Browser Emulator (1)> 4.3. IDE(Intergrated Development Environment) 79 Morpheus Document, Release Lastest Fig. 4.49: <3-39 Browser Emulator (2)> Fig. 4.50: 현재 화면을 고정시켜 디버깅 및 개발을 하는데 용이하게 사용할 수 있습니다. Fig. 4.51: 전체화면으로 전환이 가능합니다. 기존 화면으로 복귀 시에는 ESC 키를 눌러 복원할 수 있습니다. 80 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.52: 뒤로가기 버튼으로 활용됩니다. Fig. 4.53: 화면 갱신 시 활용됩니다 M IDE 실행에 필요한 기본 설정을 합니다. • IDE 환경설정 : JDK 경로 및 안드로이드 파일 경로, ADB 파일 경로등을 확인 및 변경할 수 있습니다. IDE 최초 실행시 자동 설정 됩니다. 잘못된 경로가 입력되면 IDE 기능에 문제가 생길 수 있기 때문에 올바른 경로를 입력해 줘야 합니다. • IDE 업데이트 : IDE 자동 업데이트 검사 체크가 되어 있으면 IDE 실행 시 업데이트 상태를 체크하여 업그레이드 항목이 있을 경우, 업그레이드를 수행하게 됩니다. License 라이선스를 관리하는 페이지 입니다. • 추가하기 : 라이선스를 추가 합니다. 추가된 라이선스는 프로젝트 생성할 때와 생성된 프로젝트 라이선스 변경할 때 사용 됩니다. • 삭제하기 : IDE에 설치된 라이선스를 삭제합니다. Local WebServer 다이렉트 뷰 기능에서 사용하는 로컬 웹서버에 대한 설정입니다. • Port : 웹서버 포트를 설정합니다. • Host Name : 호스트 이름을 설정합니다. • Session timeout : 클라이언트의 세션 타임아웃 시간을 설정합니다. 단위는 분입니다. • URL Routing : 4.3.10 IDE 정보 확인 IDE 환경 설정을 하기 위해서는 그림 3-45와 같이 환경설정 메뉴를 선택합니다. 그림 3-46과 같은 화면에서 IDE에 대한 상세 정보를 확인 할 수 있습니다. 하단에 모피어스 아이콘 을 누르면 모피어스 플러그인 상세 정보를 확인할 수 있는 대화상자가 나타납니다. Fig. 4.54: 모바일 웹 표준 및 장애인 차별 금지법 준수여부 체크를 위한 메뉴 입니다. 4.3. IDE(Intergrated Development Environment) 63 Morpheus Document, Release Lastest Fig. 4.55: <3-40 Browser Emulator (3)> 64 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.56: <그림 3-41 환경설정 메뉴> • Mac : M → 환경설정 • Window : Window → Preference Fig. 4.57: <그림 3-42 기본 환경설정> 4.3. IDE(Intergrated Development Environment) 65 Morpheus Document, Release Lastest Fig. 4.58: <그림 3-43 라이선스 설정> 66 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.59: <그림 3-44 로컬 웹서버 설정> 그림 3-47의 리스트에서 플러그인을 선택하면 플러그인 버전과 라이선스를 확인할 수 있습니다. 4.3.11 IDE 업데이트 IDE 기능 업데이트나 버그 패치 후에는 플러그인 업데이트를 진행해야 합니다. 보통은 IDE 재시작 시 플러그인 버전 확인을 통해 업데이트 여부를 묻지만 이때 업데이트 수락을 하지 못한 경우 그림 3 48과 같이 Help → Check for Updates 메뉴에서 업데이트 여부를 확인할 수 있습니다 수동으로 플러그인을 설치하거나 업데이트해야 하는 경우에는 Help → Install New Software 메뉴를 이용할 수 있습니다. Install New Software 메뉴를 선택하면 그림 3 49와 같은 Install 대화상자가 실행됩니다. Work with에 http://docs.morpheus.kr/ide/morpheus 를 입력하면 새로 설치하거나 업데이트 받아야 하는 리스트가 나오게 됩니다. Mobile 항목을 선택하고 Next 버튼을 누릅니다. 설치하려는 플러그인에 대한 정보를 확인 하고 Next 버튼을 누릅니다. 라이선스를 확인하고 라이선스에 동의하게 되면 Finish 버튼이 활성화 됩니다. Finish 버튼을 누르면 플러그인 설 치가 진행되고 설치가 완료 후 새로 받은 플러그인 적용을 위해 IDE가 재 시작 됩니다. 4.3.12 공지 사항 IDE를 시작하면 공지 그림 3-52와 같은 공지사항을 확인하실 수 있습니다. 공지사항을 통해 업데이트 내역 및 최신 이슈를 사용자에게 빠르게 전달해 드립니다. 이미 확인한 공지라면 공 지사항 대화상자 하단의 ‘이 공지 다시 보지 않기’를 선택하시면 해당 공지 내용이 다음 시작할 때부터 안보이게 됩니다. 4.3. IDE(Intergrated Development Environment) 67 Morpheus Document, Release Lastest Fig. 4.62: <그림 3-47 플러그인 정보확인> Fig. 4.63: <그림 3-48 업데이트 메뉴> 68 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.64: <그림 3-49 플러그인 선택> 4.3. IDE(Intergrated Development Environment) 69 Morpheus Document, Release Lastest Fig. 4.65: <그림 3-50 플러그인 버전 확인> 70 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.66: <그림 3-51 라이선스 확인> 4.3. IDE(Intergrated Development Environment) 71 Morpheus Document, Release Lastest Fig. 4.61: <그림 3-46 정보확인> 72 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.67: <그림 3-52 공지사항> Fig. 4.68: <그림 3-53 공지사항 보기 메뉴> 4.3. IDE(Intergrated Development Environment) 73 Morpheus Document, Release Lastest 전체 공지 리스트를 확인하려면 도구 상단 메뉴 중 Help -> Open notice를 누르시면 웹 브라우저를 통해 공지사항 리스트가 나오게 됩니다. 4.3.13 MUI Kit HTML Editor IDE에서는 MUI Kit 컴포넌트 삽입과 HTML 편집을 지원하기 위해 MUI Kit HTML Editor를 제공합니다. Project Explorer에서 HTML 파일을 더블 클릭하면 MUI Kit HTML Editor를 통해 파일이 열리게 됩니다. 만약 MUI Kit HTML Editor가 아닌 다른 Editor로 열린다면 Open with -> MUI Kit HTML Editor 메뉴를 이용해 Editor를 선택할 수 있습니다. Fig. 4.69: <그림 3-54 MUI Kit HTML Editor 열기> 최초 MUI Kit HTML Editor가 열리면 그림 3-55와 같이 오른쪽은 HTML이 브라우저를 통해 보이게 될 Visual 화 면이 나타나고 오른쪽에는 Text 에디터를 통해 HTML Source를 직접 수정할 수 있습니다. Visual 화면과 Source 화면 사이에 있는 공간을 드레그 하여 화면의 넓이를 조정할 수 있으며, < 버튼과 > 버튼을 누르면 Visual화면 또는 Source 화면을 가릴 수 있게 됩니다. 만약 Visual 화면이 필요하지 않다면 Editor 하단 Source 탭을 눌러 Source 전체 화면으로 전환 하실 수 있습니다. 에디터 오른쪽 상단에는 에디터를 설정하기 위한 액션 버튼들이 위치해 있습니다. 각 액션 버튼들에 대한 기능은 다음과 같습니다. MUI Kit HTML Editor와 연동하여 UI Framework에서 제공하는 컴포넌트를 삽입/수정하기 위해서 Palette와 Properties를 이용하실 수 있습니다. 각 기능을 이용하기에 앞서서 M-SDK Manager에서 UI Framework 항목을 설치하 셔야 합니다. IDE 상단에 있는 M-SDK Manager 버튼 클릭하여 M-SDK Manager를 열고 UI Framework 아이템을 모두 선택하신 후 설치 버튼을 클릭합니다. Palette Palette는 MUI Kit에서 제공하는 컴포넌트를 설정하고 HTML안에 삽입하는 기능을 가지고 있습니다. Palette는 에디터 영역 오른쪽에 위치하고 있지만 없는 경우 IDE 상단 Window -> Show View -> Other 메뉴를 선택한 후 나오는 Show View 대화상자에서 General -> Palette를 선택하면 Palette가 열리게 됩니다. Palette는 평소에는 비활성화 되어 있지만 MUI Kit HTML Editor를 통해 HTML 파일이 열리면 활성화 그림 3-58과 같이 활성화 됩니다. Palette에는 4개의 카테고리를 제공하며 카테고리를 선택하면 해당 카테고리에서 제공하는 컴포넌트 를 확인하실 수 있습니다. Palette를 이용해 HTML에 컴포넌트를 삽입하기 위해서는 HTML Source에서 컴포넌트를 삽입할 위치 에 커서를 위치시킨 후 Palette에서 삽입할 컴포넌트를 클릭합니다. 74 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.70: <그림 3-55 MUI Kit HTML Editor> Fig. 4.71: MUI Kit HTML Editor를 설정할 수 있는 Preference를 엽니다. Fig. 4.72: Visual 화면의 위치를 변경합니다.(위 -> 오른쪽 -> 아래 -> 왼쪽) Fig. 4.73: 선택된 태그의 경로를 나타내는 Tag bar를 보일지 말지 설정합니다. Fig. 4.74: Visual 화면을 갱신합니다. Fig. 4.75: Editor로 열려있는 HTML 파일을 웹 브라우저를 통해 엽니다. Fig. 4.76: HTML 수정 시 자동 갱신 여부를 설정합니다. Fig. 4.77: HTML 수정 시 자동 저장 여부를 설정합니다. 4.3. IDE(Intergrated Development Environment) 75 Morpheus Document, Release Lastest Fig. 4.78: <그림 3-56. UI Framework 설치> Palette에서 컴포넌트를 클릭하면 그림 3-60과 같은 컴포넌트 설정 위저드가 실행 됩니다. 위저드 왼 쪽에는 선택된 컴포넌트의 옵션을 설정할 수 있는 설정 항목들이 나타나고 위저드 오른쪽에는 설정된 정보를 바탕으로 생성된 HTML Source code와 Visual 화면이 나타납니다. 설정 항목들을 변경되는 경 우 Source와 Visual 화면도 자동으로 갱신되어 변경 사항을 바로 확인 하실 수 있습니다. 왼쪽 설정항목 하단의 Add references to JS/CSS를 선택하시면 이 컴포넌트를 구성하기 위한 JS/CSS가 다음과 같이 프로젝트에 적용됩니다. • BootStrap, MUI Kit : 컴포넌트 구성 파일이 프로젝트 내부로 복사되며 Local 경로의 JS/CSS가 Source code에 추가됩니다. • JQuery Mobile, HTML5 : Web에 올라가있는 JS/CSS URL이 Source code에 추가 됩니다. 컴포넌트 설정 위저드 하단의 Next 버튼이 활성화 된 경우 컴포넌트에 Script를 적용할 수 있습니다.(만 약 컴포넌트에 적용 가능한 Script가 없는 경우 Next 버튼이 활성화 되지 않습니다.) Next 버튼을 눌러 스크립트 삽입 페이지로 이동하면 아래와 같은 화면을 확인 하실 수 있습니다. 왼쪽 Script 목록에서 추가하고자 하는 Script 항목을 채크하면 오른쪽 Source View 에서 추가될 스크립 트 코드를 확인하실 수 있습니다. 모든 설정을 마친 후 Finish 버튼을 클릭하면 선택한 컴포넌트 코드와 Script 코드가 삽입됩니다. Properties MUI Kit HTML Editor에서 이미 삽입된 컴포넌트를 수정하기 위해 Properties 기능을 제공합니다. Properties는 IDE 하단에 위치하지만 만약 없는 경우 IDE 상단 Window -> Show View -> Other메뉴 를 선택한 후 나오는 Show View 대화상자에서 General -> Properties를 선택하면 Properties가 열리게 됩니다. Properties는 평소에는 비활성화 되어 있지만 MUI Kit HTML Editor에서 태그가 선택된 경우 해당 태 그를 지원하는 카테고리가 탭으로 구성되며 그림 3-62와 같이 활성화 됩니다. 각 카테고리 탭을 선택하면 해당 카테고리에서 지원하는 컴포넌트 설정 항목들이 나타나며 설정을 을 변경하는 경우 변경 내용이 MUI Kit HTML Editor에 즉각 반영됩니다. 4.3. IDE(Intergrated Development Environment) 63 Morpheus Document, Release Lastest Fig. 4.79: <그림 3-57 Show View 대화상자> 64 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.80: <그림 3-58 Palette> 4.3. IDE(Intergrated Development Environment) 65 Morpheus Document, Release Lastest Fig. 4.81: <그림 3-59 컴포넌트 삽입> Fig. 4.82: <그림 3-60 컴포넌트 설정 위저드> 66 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.83: <그림 3-61 Script 설정 위저드> 4.3. IDE(Intergrated Development Environment) 67 Morpheus Document, Release Lastest Fig. 4.84: <그림 3-62 Show View 대화상자> 68 Chapter 4. IDE Morpheus Document, Release Lastest 컴포넌트 태그 외에 컴포넌트를 지원하는 Script를 삽입하기 위해서는 위 그림과 같이 Script 탭을 선택 합니다. 왼쪽에는 MUI Kit HTML Editor에서 선택된 컴포넌트에 적용 가능한 Script 목록이 나타나고 오른쪽에는 Script 목록에서 선택된 Script 소스를 확인 할 수 있습니다. 추가하려는 Script를 선택한 후 Script 목록 하단에 있는 Add 버튼을 누르면 선택된 Script가 MUI Kit HTML Editor로 삽입 됩니다. 4.3.14 Example 프로젝트 IDE에서는 하이브리드앱 개발을 다뤄보지 못한 개발자를 위해 Example 프로젝트를 제공 합니다. Example 프로젝 트를 생성하기 앞서서 M-SDK Manager에서 Example 항목을 설치하도록 합니다. Fig. 4.87: <그림 3-14-1 UI Framework 설치> Example Project Wizard를 통해 Example 프로젝트를 생성 하게 됩니다. Example Project Wizard를 호출하기 위해서 Project Explorer에서 마우스 오른쪽 버튼을 누른 후 New → Example Project를 선택합니다. Example Project Wizard가 실행되면 아래 그림과 같은 화면을 확인하실 수 있습니다. Example Project Wizard가 실행되면 위 그림과 같이 왼쪽에는 예제 프로젝트 목록이 나타나며 중앙에는 예제 프 로젝트 목록에서 선택된 프로젝트의 주요 화면을 확인 하실 수 있습니다. 오른쪽에 위치한 리소스 정보 그룹에서 프로젝트의 설명과 업데이트 내역을 확인 하실 수 있습니다. 모든 정보 확인 후 Finish 버튼을 클릭하면 선택된 예제 프로젝트가 생성됩니다. 4.3. IDE(Intergrated Development Environment) 69 Morpheus Document, Release Lastest Fig. 4.88: <그림 3-14-2 Example Project Wizard 실행> Fig. 4.89: <그림 3-14-3 Example Project Wizard> 70 Chapter 4. IDE Morpheus Document, Release Lastest Fig. 4.86: <그림 3-64 Properties - Script > 4.3. IDE(Intergrated Development Environment) 71 Morpheus Document, Release Lastest 72 Chapter 4. IDE CHAPTER 5 HISTORY 5.1 Libraries 5.1.1 코어 라이브러리 • Lastest Version : 2.1.6.1 • 2.1.6.1 ( 2016.05.12 ) – [UI] Browser Emulator 2.0 을 위한 EmulatorInterface 적용 – [Android] page name에 대한 웹 페이지 판단 로직 개선 – [iOS] PPBaseProvider 에서 Status 200 만 Success 로 체크하던 로직을 2xx 는 모두 성공으로 처리하도록 수정 • 2.1.5.5 ( 2016.04.14 ) – [iOS] 일부 오픈소스 C 함수를 독립적으로 처리되도록 수정 • 2.1.5.4 ( 2016.03.10 ) – [UI] 배포되지 않은 2.2 interface 를 호출하던 오류 수정 – [iOS] Local Web Server 안정성 향상 – [Android, iOS] 앱이 업데이트 된 경우 리소스 업데이트가 완료되기 전까지는 다시 Bundle 영역으로 실행되도록 수정 – [Android] 다국어 관련 Interface 2.2 추가 • 2.1.5.3 ( 2016.02.24 HotFix ) – [UI] API 오류 수정 • 2.1.5.2 ( 2016.02.19 HotFix ) – [iOS] Socket 모듈 관련 업데이트 – [iOS] Base Version 을 무조건 000000 으로 초기화 하던 로직을 Manifest 에 설정된 default 값으로 적용되도록 수정 • 2.1.5.1 ( 2016.02.05 ) – [Android, iOS] 라이센스 로직 일부 수�