02. Configuration Data
preConfiguration.json
preConfiguration.json 에서는 아래와 같은 항목에 대해서 설정을 한다.
- Operation Center 서버 정보 설정
- 암호화 모듈에 대한 선언 및 설정
Table. PreConfiguration Data format
No | Name | Type | Value | Remark | M/O |
---|---|---|---|---|---|
1 | launcherAppId | string | * | Launcher App ID | M |
2 | launcherAppVersion | int | Launcher App Version | M | |
3 | targetDeviceType | string | Phone | Tablet | All | 대상 단말기 종류 | M |
4 | operations | json | 하단 Operations Data format 테이블 참조 | M | |
5 | encryptionProviders | json | 암호화 Provider 정의 | M | |
6 | keyProviders | json | 키 Provider 정의 | M | |
Table. Operations Data format
No | Name | Type | Value | Remark | M/O |
---|---|---|---|---|---|
1 | baseAddress | string | operation server URL | M | |
2 | port | string | 0~65536 | operation server Port | M |
3 | contextPath | string | operation server context Path | M | |
4 | applicationpath | string | operation server service Path | M | |
5 | defaultContentType | string | application/json | 통신 데이터포맷 | M |
6 | networkEncryption | json | 통신 암호화 정책 | M | |
6-1 | enabled | bool | 통신 암호화 활성화 여부 | M | |
6-2 | encryptionProviderName | string | encryptionProviders 에 정의 되어있는 암호화 프로바이더 이름 | M | |
6-3 | keyProviderName | string | keyProviders 에 정의 되어 있는 키 프로바이더 이름 | M | |
6-4 | supportedRequestTypes | string array | application/json application/xml | Request 통신 시 지원 데이터 포맷 | M |
6-5 | supportedResponseTypes | string array | application/json application/xml | Response 통신 시 지원 데이터 포맷 | M |
7 | networkCompression | json | 통신 압축 정책 | M | |
7-1 | enabled | bool | true | false | 통신 압축 활성화 여부 | M |
7-2 | requestCompression | string | 요청 압축방식 | M | |
7-3 | responseCompression | string | 응답 압축방식 | M | |
추가적으로 encryptionProviderName 의 값 및 keyProviderName의 값은 아래의 세부 항목을 참조한다.
Table. encryptionProvider Data format
No | Name | Type | Remark | M/O |
---|---|---|---|---|
1 | [EncryptionProvider Name] | string | 정의할 Encryption Provider의 Name | M |
1-1 | className | string | Encryption Provider 가 구현된 Class 경로 | M |
1-2 | properties | json | O | |
Table. keyProvider Data format
No | Name | Type | Remark | M/O |
---|---|---|---|---|
1 | [KeyProvider Name] | string | 정의할 Key Provider의 Name | M |
1-1 | className | string | Key Provider 가 구현된 Class 경로 | M |
1-2 | properties | json | O | |
Example
"launcherAppId": "HoneMobile",
"launcherAppVersion": 0,
"targetDeviceType": "Phone",
"operations": {
"baseAddress": "https://hone.hanwha.co.kr",
"port": "443",
"contextPath": "/smartop_dev",
"applicationPath": "/operations/service",
"defaultContentType": "application/json",
"networkEncryption": {
"enabled": false,
"encryptionProviderName": "secureLayerEncryptionProvider",
"keyProviderName": "operationsSecureLayerKeyProvider",
"supportedRequestTypes":["application/json","application/xml"],
"supportedResponseTypes":["application/json","application/xml"]
},
"networkCompression": {
"enabled": false,
"requestCompression": "gzip",
"responseCompression": "gzip"
}
},
"encryptionProviders": {
"secureLayerEncryptionProvider": {
"className": "honemobile.client.security.crypto.SecureLayerEncryptionProvider"
},
"resourceEncryptionProvider": {
"className": "honemobile.client.security.crypto.AesEncryptionProvider"
},
"bizAppEncryptionProvider": {
"className": "honemobile.client.security.crypto.AesEncryptionProvider"
}
},
"keyProviders": {
"operationsSecureLayerKeyProvider": {
"className": "honemobile.client.security.crypto.SecureLayerKeyProvider"
},
"hub1SecureLayerKeyProvider": {
"className": "honemobile.client.security.crypto.HubSecureLayerKeyProvider"
},
"resourceKeyProvider": {
"className": "honemobile.client.security.crypto.ResourceKeyProvider"
},
"bizAppKeyProvider": {
"className": "honemobile.client.security.crypto.ResourceKeyProvider"
}
}
}
configuration.json
configuration.json 에서는 아래와 같은 항목에 대해서 설정을 한다.
- Hub 서버에 대한 설정
- Android / iOS 의 환경이 다르므로 이에 따라 필요한 설정
- 비즈앱 에 대한 암호화 설정 및 기타 기능 설정
Table. configuration.json Data format
No | Name | Type | Value | Remark | M/O |
---|---|---|---|---|---|
1 | serviceTargets | json | * | 허브 서버 설정 하단 serviceTargets Data format 참조 | M |
2 | launcher | json | Launcher 설정 | M | |
2-1 | android | json | 안드로이드 전용 설정 하단 android Data format 참조 | M | |
2-2 | ios | json | iOS 전용 설정 iOS Guide의 iOS Data format 참조 | M | |
2-3 | networkTimeout | Int | 네트워크 작업 중 read/connection timeout 값 설정 (ms단위) | M | |
2-4 | jsDevMode | bool | true | false | 비즈앱 개발 모드 설정 | O |
3 | bizAppSecurity | json | 비즈앱 위변조 정책 | M | |
3-1 | enabled | bool | true | false | 비즈앱 위변조 정책 활성화 | M |
4 | bizAppEncryption | json | 비즈앱 암호화 정책 | M | |
4-1 | enabled | bool | true | false | 비즈앱 암호화 정책 활성화 | M |
4-2 | encryptionProviderName | string | encryptionProviders 에 정의 되어있는 암호화 프로바이더 이름 | M | |
4-3 | keyProviderName | string | keyProviders 에 정의 되어 있는 키 프로바이더 이름 | M | |
5 | resourceEncryption | json | 리소스 암호화 정책 설정 | M | |
5-1 | encryptionProviderName | string | encryptionProviders 에 정의 되어있는 암호화 프로바이더 이름 | M | |
5-2 | keyProviderName | string | keyProviders 에 정의 되어 있는 키 프로바이더 이름 | M | |
Table. serviceTargets Data format
No | Name | Type | Value | Remark | M/O |
---|---|---|---|---|---|
1 | [Hub Name] | string | 정의할 Hub의 Name | M | |
1-1 | baseAddress | string | Hub server URL | M | |
1-2 | port | number | 0~65536 | Hub server Port | M |
1-3 | contextPath | string | Hub server context Path | M | |
1-4 | applicationPath | string | Hub server service Path | M | |
1-5 | defaultContentType | string | application/json | 허브의 데이터 포맷 | M |
1-6 | networkEncryption | json | 허브의 통신 암호화 정책 | M | |
1-6-1 | enabled | bool | 통신 암호화 활성화 여부 | M | |
1-6-2 | encryptionProviderName | string | encryptionProviders 에 정의 되어있는 암호화 프로바이더 이름 | M | |
1-6-3 | keyProviderName | string | keyProviders 에 정의 되어 있는 키 프로바이더 이름 | M | |
1-6-4 | suppotedRequestTypes | string array | Request 시 사용되는 데이터 포맷의 종류 | M | |
1-6-5 | suppotedResponseTypes | string array | Response 시 사용되는 데이터 포맷의 종류 | M | |
1-7 | networkCompression | json | 통신 압축 정책 | M | |
1-7-1 | enabled | bool | 통신 압축 활성화 여부 | M | |
1-7-2 | requestCompression | string | gzip | 요청 압축방식 | M |
1-7-3 | responseCompression | string | gzip | 응답 압축방식 | M |
Table. android Data format
No | Name | Type | Value | Remark | M/O |
---|---|---|---|---|---|
1 | useExternalStorage | bool | true | false | 리소스를 외부 저장소에 저장. | M |
Example
"serviceTargets": {
"hub1": {
"baseAddress": "https://hone.hanwha.co.kr",
"port": "443",
"contextPath": "/smarthub_dev",
"applicationPath": "/janggyo/service",
"defaultContentType": "application/json",
"networkEncryption": {
"enabled": false,
"encryptionProviderName": "secureLayerEncryptionProvider",
"keyProviderName": "hub1SecureLayerKeyProvider",
"supportedRequestTypes":["application/json","application/xml"],
"supportedResponseTypes":["application/json","application/xml"]
},
"networkCompression": {
"enabled": false,
"requestCompression": "gzip",
"responseCompression": "gzip"
}
}
},
"launcher": {
"networkTimeout" : 10000,
"jsDevMode": false,
"android": {
"useExternalStorage": true
},
"ios": {
"logLevel": "debug"
}
},
"bizAppSecurity": {
"enabled": false
},
"bizAppEncryption": {
"enabled": false,
"encryptionProviderName": "bizAppEncryptionProvider",
"keyProviderName": "bizAppKeyProvider"
},
"resourceEncryption": {
"encryptionProviderName": "resourceEncryptionProvider",
"keyProviderName": "resourceKeyProvider"
}
}
actionflow.json
actionflow.json 에서는 아래와 같은 항목에 대해서 설정을 한다.
- startup - 클라이언트가 시작시 동작해야 하는 Action 지정 및 호출 순서
- resume - 클라이언트가 Pause 이후 Resume 시 동작해야 하는 Action 지정 및 호출 순서
Table. actionflow.json Data format
No | Name | Type | Remark | M/O |
---|---|---|---|---|
1 | startUp | json array | 구동시 실행될 task 순서 목록 (Android 데이터 포맷)을 참조 | M |
2 | resume | json array | App 복귀시 실행될 task 순서 목록 (Android 데이터 포맷) | M |
|
Table. startUp and resume Data format
No | Name | Type | Remark | M/O |
---|---|---|---|---|
1 | name | string | Action 이름 | M |
2 | className | string | Action이 구현된 Class 경로 | M |
3 | properties | json | 각 Action별 하위 테이블 참고 | O |
|
제품에서 startup 및 resume용으로 제공하는 Action의 정보는 아래와 같다.
사용 설정 시 Priority 순서에 맞춰 사용해야 하며 제공되는 Action는 사용 용도 및 영역에 맞게 사용되어야만 정상적으로 기능을 제공한다.
Table. startup용 actionflow
Priority | name | className | Remark | M/O | Version |
---|---|---|---|---|---|
1 | installBuiltinBizAppAction | honemobile.client.actionflow.action.InstallBuiltinBizAppAction | 내장 비즈앱 설치 | O | |
2 | requestLoginAction | honemobile.client.actionflow.action.RequestLoginAction | Operations 로그인 | M | |
3 | updateConfiguratonAction | honemobile.client.actionflow.action.UpdateConfigurationAction | 설정파일 업데이트 | O | |
4 | updateLauncherAction | honemobile.client.actionflow.action.UpdateLauncherAction | 앱 업데이트 | O | |
5 | updateBizAppAction | honemobile.client.actionflow.action.UpdateBizAppAction | BizApp 업데이트 | O | |
6 | verifyBizAppAction | honemobile.client.actionflow.action.VerifyBizAppAction | BizApp 위변조 검사 | O | |
7 | showLauncherBizAppAction | honemobile.client.actionflow.action.ShowLauncherBizAppAction | BizApp 화면 출력 | O | ▼3.3.6 |
8 | showWindowAction | honemobile.client.actionflow.action.ShowWindowAction | 화면 출력 | O | ▲3.5.10 |
Table. resume용 actionflow
Priority | name | className | Remark | M/O | Version |
---|---|---|---|---|---|
1 | checkUpdateAction | honemobile.client.actionflow.action.CheckUpdateAction | 앱과 BizApp 업데이트 확인 | O | ▲3.2.5 |
|
제품에서 제공하는 각 Action의 properties 정보는 아래와 같다
Table. installBuiltinBizAppAction 의 properties
No | Name | Type | Remark | M/O | Version |
---|---|---|---|---|---|
1 | bizAppLauncherId | string | 내장 비즈앱 중 시작 BizApp의 name (config.xml의 name 태그 정보) | M | |
2 | builitInBizAppFileNames | json array | 내장 비즈앱 리스트 정의 (res/raw 내 비즈앱 파일 이름 목록) | M | |
2-1 | [Built-in File Name] | string | 내장 비즈앱의 파일 이름 | M | |
|
Table. updateConfigurationAction 의 properties
No | Name | Type | Value | Remark | M/O | Version |
---|---|---|---|---|---|---|
1 | errorPolicy | string | skip | retry | Action 수행 중 Network 발생 시 처리 정책 (기본값 retry) | O | ▲3.1.1 |
|
Table. updateLauncherAction 의 properties
No | Name | Type | Value | Remark | M/O | Version |
---|---|---|---|---|---|---|
1 | from | string | operations | store | 타깃이 되는 서버 정의 (기본값 operations) | O | |
2 | errorPolicy | string | skip | retry | Action 수행 중 Network 발생 시 처리 정책 (기본값 retry) | O | ▲3.1.1 |
|
Table. updateBizAppAction 의 properties
No | Name | Type | Value | Remark | M/O | Version |
---|---|---|---|---|---|---|
1 | errorPolicy | string | skip | retry | Action 수행 중 Network 발생 시 처리 정책 (기본값 retry) | O | ▲3.1.1 |
|
Table. verifyBizAppAction 의 properties
No | Name | Type | Value | Remark | M/O | Version |
---|---|---|---|---|---|---|
1 | fileObserver | bool | true | false | BizApp위변조 탐지 활성화 유무 (기본값 false) | O | |
2 | errorPolicy | string | skip | retry | Action 수행 중 Network 발생 시 처리 정책 (기본값 retry) | O | ▲3.1.1 |
|
Table. showWindowAction 의 properties
No | Name | Type | Value | Remark | M/O | Version |
---|---|---|---|---|---|---|
1 | windowName | string | 대상 Window 이름 | M | ▲3.5.10 | |
|
Table. checkUpdateAction 의 properties
No | Name | Type | Value | Remark | M/O | Version |
---|---|---|---|---|---|---|
1 | from | string | operations | store | 대상 서버 (기본값 operations) | O | ▲3.2.5 |
2 | checkLevel | string | all | force | all인 경우 Launcher/BizApp의 모든 업데이트 확인 (기본값 all) force인 경우 Launcher/BizApp의 강제 업데이트만 확인 | O | ▲3.2.5 |
|
Example
"startUp" : [
{
"name": "installBuiltinBizAppAction",
"className": "honemobile.client.actionflow.action.InstallBuiltinBizAppAction",
"properties": {
"bizAppLauncherId": "main",
"builtInBizAppFileNames": [
"main_launcher",
"sub_page",
"common",
"bizcommon"
]
}
},
{
"name": "requestLoginAction",
"className": "honemobile.client.actionflow.action.RequestLoginAction"
},
{
"name": "updateConfigurationAction",
"className": "honemobile.client.actionflow.action.UpdateConfigurationAction",
"properties": {
"errorPolicy": "retry"
}
},
{
"name": "updateLauncherAction",
"className": "honemobile.client.actionflow.action.UpdateLauncherAction",
"properties": {
"from": "operations",
"errorPolicy": "retry"
}
},
{
"name": "updateBizAppAction",
"className": "honemobile.client.actionflow.action.UpdateBizAppAction",
"properties": {
"errorPolicy": "retry"
}
},
{
"name": "verifyBizAppAction",
"className": "honemobile.client.actionflow.action.VerifyBizAppAction",
"properties": {
"fileObserver" : false,
"errorPolicy": "retry"
}
},
{
"name": "showWindowAction",
"className": "honemobile.client.actionflow.action.ShowWindowAction",
"properties": {
"windowName": "defaultWebWindow"
}
}
],
"resume" : [
{
"name": "checkUpdateAction",
"className": "honemobile.client.actionflow.action.CheckUpdateAction",
"properties": {
"from": "operations",
"checkLevel": "all"
}
}
]
}
window.json
window.json 에서는 아래와 같은 항목에 대해서 설정을 한다.
- 클라이언트에서 사용할 윈도우 설정
- 필요 시 추가 윈도우 설정
Table. window.json Data format
No | Name | Type | Remark | M/O |
---|---|---|---|---|
1 | windows | json | M | |
1-1 | [Window Name] | string | 정의할 Window의 Name | M |
|
Table. [Window Name] Data format
No | Name | Type | Remark | M/O |
---|---|---|---|---|
1 | className | string | 실제 Plugin인 구현된 Class 경로 | M |
2 | properties | json | 윈도우에 전달되는 데이터 | O |
|
Table. properties Data format
No | Name | Type | Remark | M/O |
---|---|---|---|---|
1 | currentUrl | string | Window가 웹 화면인 경우에 기본 URL 설정 가능 | O |
Example
"windows": {
"defaultWebWindow": {
"className": "honemobile.client.window.DefaultWebWindow",
"properties": {
}
},
"defaultWebPopupWindow": {
"className": "honemobile.client.window.DefaultWebPopupWindow"
},
"defaultWindow": {
"className": "honemobile.client.window.DefaultWindow"
},
"defaultPopupWindow": {
"className": "honemobile.client.window.DefaultPopupWindow"
}
}
}
제품에서 기본으로 제공하는 Window는 다음과 같다.
Table. 제공 window
No | name | className | Remark |
---|---|---|---|
1 | defaultWindow | honemobile.client.window.DefaultWindow | 기본 네이티브 화면 |
2 | defaultPopupWindow | honemobile.client.window.DefaultPopupWindow | 기본 네이티브 팝업 화면 |
3 | defaultWebWindow | honemobile.client.window.DefaultWebWindow | 기본 웹 화면 |
4 | defaultWebPopupWindow | honemobile.client.window.DefaultWebPopupWindow | 기본 웹 팝업 화면 |
plugin.json
plugin.json 에서는 아래와 같은 항목에 대해서 설정을 한다.
- 비즈앱에서 사용할 플러그 인 설정
- 필요 시 추가 플러그 인 설정
Table plugin.json Data format
ID | Name | Type | Remark | M/O |
---|---|---|---|---|
1 | plugins | json | M | |
1-1 | [Plugin Name] | string | 플러그인 이름 | M |
|
Table. [Plugin Name] Data format
No | Name | Type | Remark | M/O |
---|---|---|---|---|
1 | className | string | 플러그인 이 구현된 클래스 전체 경로 | M |
2 | properties | json | 플러그인 에 설정할 데이터 값 | O |
|
Table. Plugin 의 properties
No | Name | Type | Value | Remark | M/O |
---|---|---|---|---|---|
1 | preload | bool | true | false | 앱 구동 시에 메모리에 바로 올리는지 여부 (기본값 false) | O |
|
Example
"plugins": {
"authentication": {
"className": "honemobile.client.plugin.AuthenticationPlugin",
"properties": { "preload": false }
},
"device": {
"className": "honemobile.client.plugin.DevicePlugin",
"properties": { "preload": false }
},
"camera": {
"className": "honemobile.client.plugin.CameraPlugin",
"properties": { "preload": false }
},
"geolocation": {
"className": "honemobile.client.plugin.GeolocationPlugin",
"properties": { "preload": false }
},
"network": {
"className": "honemobile.client.plugin.NetworkPlugin",
"properties": { "preload": false }
},
"preference": {
"className": "honemobile.client.plugin.PreferencePlugin",
"properties": { "preload": false }
},
"contact": {
"className": "honemobile.client.plugin.ContactPlugin",
"properties": { "preload": false }
},
"window": {
"className": "honemobile.client.plugin.WindowPlugin",
"properties": { "preload": false }
},
"fileRepository": {
"className": "honemobile.client.plugin.FileRepositoryPlugin",
"properties": { "preload": false }
},
"sqlite": {
"className": "honemobile.client.plugin.SQLitePlugin",
"properties": { "preload": false }
}
}
}
제품에서 기본으로 제공하는 플러그인은 다음과 같다.
Table. 기본 plugin
No | name | className | Remark |
---|---|---|---|
1 | authentication | honemobile.client.plugin.AuthenticationPlugin | OP 로그인 |
2 | network | honemobile.client.plugin.NetworkPlugin | 서버와의 통신 채널 제공 |
3 | camera | honemobile.client.plugin.CameraPlugin | 디바이스 카메라 기능 |
4 | contact | honemobile.client.plugin.ContactPlugin | 주소록 정보 추가 및 조회 |
5 | sqlite | honemobile.client.plugin.SQLitePlugin | 디바이스 SQL 기능 |
6 | device | honemobile.client.plugin.DevicePlugin | 디바이스 정보 조회 |
7 | fileRepository | honemobile.client.plugin.FileRepositoryPlugin | Local 파일 저장 서비스 |
8 | geolocation | honemobile.client.plugin.GeoLocationPlugin | 위치정보 조회 |
9 | window | honemobile.client.plugin.WindowPlugin | 화면 이동 및 출력 기능 |
10 | preference | honemobile.client.plugin.PreferencePlugin | Preference 기능 |
추가로 제공되는 Plugin은 다음과 같으며 기능을 제공받기 위해선 관련 라이브러리를 개발 프로젝트에 포함시켜야 한다.
각 Plugin 라이브러리에 대한 상세 설명 및 포함 방법은 Android 개발 가이드의 프로젝트 생성을 참고한다.
Table. 추가 plugin
No | name | className | Library Name | Remark | Version |
---|---|---|---|---|---|
1 | applinker | honemobile.client.plugin.AppLinkerPlugin | libhone-applinker-release.aar | 외부앱 연결 기능 | ▲3.0.0 |
2 | barcode | honemobile.client.plugin.BarcodePlugin | libhone-barcode-release.aar | 바코드 기능 | ▲2.6.4 |
3 | clipboard | honemobile.client.plugin.ClipboardPlugin | libhone-clipboard-release.aar | 클립보드 기능 | ▲3.0.0 |
4 | fingerprint | honemobile.client.plugin.FingerprintPlugin | libhone-fingerprint-release.aar | 지문 인증 기능 | ▲3.0.0 |
5 | flashlight | honemobile.client.plugin.FlashlightPlugin | libhone-flashlight-release.aar | 플래쉬 기능 | ▲3.0.0 |
6 | gallery | honemobile.client.plugin.GalleryPlugin | libhone-gallery-release.aar | 갤러리 기능 | ▲3.0.0 |
7 | lockscreen | honemobile.client.plugin.LockscreenPlugin | libhone-lockscreen-release.aar | 잠금화면 기능 | ▲3.1.1 |
8 | log | honemobile.client.plugin.LogPlugin | libhone-log-release.aar | 로그 기능 | ▲3.0.0 |
9 | motion | honemobile.client.plugin.MotionPlugin | libhone-motion-release.aar | 단말 동작 정보 기능 | ▲3.0.0 |
10 | notice | honemobile.client.plugin.NoticePlugin | libhone-notice-release.aar | 공지사항 기능 | ▲2.6.4 |
11 | screen | honemobile.client.plugin.ScreenPlugin | libhone-screen-release.aar | 화면 밝기 기능 | ▲3.0.0 |
12 | secureStorage | honemobile.client.plugin.SecureStoragePlugin | libhone-secure-storage-release.aar | 암호화 저장소 기능 | ▲3.1.1 |
13 | vibrator | honemobile.client.plugin.VibratorPlugin | libhone-vibrator-release.aar | 단말기 진동 기능 | ▲3.0.0 |
logback.xml
HSP 은 로그 메시지 처리를 위해서 외부 라이브러리인 logback 을 이용하여 처리 한다.
logback 은 로그 레벨 설정을 위해 assets 내 logback.xml 을 이용하며 로그 레벨은 trace, debug, info, warn, error 이 존재 한다.
Example
<appender name="logcat" class="ch.qos.logback.classic.android.LogcatAppender">
<tagEncoder><pattern>[HSP]</pattern></tagEncoder>
<encoder><pattern>%class{0}.%M\(%F:%L\) %msg</pattern></encoder>
</appender>
<root level="debug"> <!-- trace, debug, info, warn, error -->
<appender-ref ref="logcat" />
</root>
</configuration>