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] 라이센스 로직 일부 수�