02. Configuration Data


preConfiguration.json

preConfiguration.json 에서는 아래와 같은 항목에 대해서 설정을 한다.

  1. Operation Center 서버 정보 설정
  2. 암호화 모듈에 대한 선언 및 설정

 

Table. PreConfiguration Data format

NoNameTypeValueRemarkM/O
1launcherAppIdstring*Launcher App IDM
2launcherAppVersionint Launcher App VersionM
3targetDeviceTypestringPhone | Tablet | All대상 단말기 종류M
4operationsjson 하단 Operations Data format 테이블 참조M
5encryptionProvidersjson 암호화 Provider 정의 M
6keyProvidersjson 키 Provider 정의M
      

M : Mandatory, O : Optional 

Table. Operations Data format 

NoNameTypeValueRemarkM/O
1baseAddressstring operation server URLM
2portstring0~65536operation server PortM
3contextPathstring operation server context PathM
4applicationpathstring operation server service PathM
5defaultContentTypestringapplication/json통신 데이터포맷M
6networkEncryptionjson 통신 암호화 정책M
6-1enabledbool 통신 암호화 활성화 여부M
6-2encryptionProviderNamestring encryptionProviders 에 정의 되어있는 암호화 프로바이더 이름M
6-3keyProviderNamestring keyProviders 에 정의 되어 있는 키 프로바이더 이름M
6-4supportedRequestTypesstring
array
application/json
application/xml
Request 통신 시 지원 데이터 포맷M
6-5supportedResponseTypesstring
array
application/json
application/xml
Response 통신 시 지원 데이터 포맷M
7networkCompressionjson 통신 압축 정책M
7-1enabledbooltrue | false통신 압축 활성화 여부M
7-2requestCompressionstring 요청 압축방식M
7-3responseCompressionstring 응답 압축방식M
      

추가적으로 encryptionProviderName 의 값 및 keyProviderName의 값은 아래의 세부 항목을 참조한다.

Table. encryptionProvider Data format

NoNameTypeRemarkM/O
1[EncryptionProvider Name]string정의할 Encryption Provider의 NameM
1-1classNamestringEncryption Provider 가 구현된 Class 경로M
1-2propertiesjson O
     

Table. keyProvider Data format

NoNameTypeRemarkM/O
1[KeyProvider Name]string정의할 Key Provider의 NameM
1-1classNamestringKey Provider 가 구현된 Class 경로M
1-2propertiesjson 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 에서는 아래와 같은 항목에 대해서 설정을 한다.

  1. Hub 서버에 대한 설정
  2. Android / iOS 의 환경이 다르므로 이에 따라 필요한 설정
  3. 비즈앱 에 대한 암호화 설정 및 기타 기능 설정

 

Table. configuration.json Data format

NoNameTypeValueRemarkM/O
1serviceTargetsjson*

허브 서버 설정 

하단 serviceTargets Data format 참조

M
2launcherjson Launcher 설정M
2-1androidjson 

안드로이드 전용 설정

하단 android Data format 참조

M
2-2iosjson 

iOS 전용 설정

iOS Guide의 iOS Data format 참조

M
2-3networkTimeoutInt 네트워크 작업 중 read/connection timeout 값 설정 (ms단위)M
2-4jsDevModebooltrue | false비즈앱 개발 모드 설정 O
3bizAppSecurityjson 비즈앱 위변조 정책M
3-1enabledbooltrue | false비즈앱 위변조 정책 활성화M
4bizAppEncryptionjson 비즈앱 암호화 정책M
4-1enabledbooltrue | false비즈앱 암호화 정책 활성화M
4-2encryptionProviderNamestring encryptionProviders 에 정의 되어있는 암호화 프로바이더 이름M
4-3keyProviderNamestring keyProviders 에 정의 되어 있는 키 프로바이더 이름M
5resourceEncryptionjson 리소스 암호화 정책 설정M
5-1encryptionProviderNamestring encryptionProviders 에 정의 되어있는 암호화 프로바이더 이름M
5-2keyProviderNamestring keyProviders 에 정의 되어 있는 키 프로바이더 이름M
      

Table. serviceTargets Data format

NoNameTypeValueRemarkM/O
1[Hub Name]string 정의할 Hub의 NameM
1-1baseAddressstring Hub server URLM
1-2portnumber0~65536Hub server PortM
1-3contextPathstring Hub server context PathM
1-4applicationPathstring Hub server service PathM
1-5defaultContentTypestringapplication/json허브의 데이터 포맷M
1-6networkEncryptionjson 허브의 통신 암호화 정책M
1-6-1enabledbool 통신 암호화 활성화 여부M
1-6-2encryptionProviderNamestring encryptionProviders 에 정의 되어있는 암호화 프로바이더 이름M
1-6-3keyProviderNamestring keyProviders 에 정의 되어 있는 키 프로바이더 이름M
1-6-4suppotedRequestTypesstring
array
 Request 시 사용되는 데이터 포맷의 종류M
1-6-5suppotedResponseTypesstring
array
 Response 시 사용되는 데이터 포맷의 종류M
1-7networkCompressionjson 통신 압축 정책M
1-7-1enabledbool 통신 압축 활성화 여부M
1-7-2requestCompressionstringgzip요청 압축방식M
1-7-3responseCompressionstringgzip응답 압축방식M
      

Table. android Data format

NoNameTypeValueRemarkM/O
1useExternalStoragebooltrue | 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 에서는 아래와 같은 항목에 대해서 설정을 한다.

  1. startup - 클라이언트가 시작시 동작해야 하는 Action 지정 및 호출 순서
  2. resume - 클라이언트가 Pause 이후 Resume 시 동작해야 하는 Action 지정 및 호출 순서

 

Table. actionflow.json Data format

NoNameTypeRemarkM/O
1startUpjson array구동시 실행될 task 순서 목록 (Android 데이터 포맷)을 참조M
2resumejson arrayApp 복귀시 실행될 task 순서 목록 (Android 데이터 포맷)M
    

 

Table. startUp and resume Data format

NoNameTypeRemarkM/O
1namestringAction 이름M
2classNamestringAction이 구현된 Class 경로M
3propertiesjson각 Action별 하위 테이블 참고O
    

 

제품에서 startup 및 resume용으로 제공하는 Action의 정보는 아래와 같다.

사용 설정 시 Priority 순서에 맞춰 사용해야 하며 제공되는 Action는 사용 용도 및 영역에 맞게 사용되어야만 정상적으로 기능을 제공한다.

 

Table. startup용 actionflow

PrioritynameclassNameRemarkM/OVersion
1installBuiltinBizAppActionhonemobile.client.actionflow.action.InstallBuiltinBizAppAction내장 비즈앱 설치O 
2requestLoginActionhonemobile.client.actionflow.action.RequestLoginActionOperations 로그인M 
3updateConfiguratonActionhonemobile.client.actionflow.action.UpdateConfigurationAction설정파일 업데이트O 
4updateLauncherActionhonemobile.client.actionflow.action.UpdateLauncherAction앱 업데이트O 
5updateBizAppActionhonemobile.client.actionflow.action.UpdateBizAppActionBizApp 업데이트O 
6verifyBizAppActionhonemobile.client.actionflow.action.VerifyBizAppActionBizApp 위변조 검사O 
7showLauncherBizAppActionhonemobile.client.actionflow.action.ShowLauncherBizAppActionBizApp 화면 출력O▼3.3.6  
8showWindowActionhonemobile.client.actionflow.action.ShowWindowAction화면 출력O▲3.5.10 
      

showLauncherBizAppAction 는 Deprecated 되었고 이를 대체하기 위해 showWindowAction 이 추가 되었다.
showWindowAction 는 Web Window 와 Native Window 모두를 지원 하며 property 에 사용할 윈도우를 지정할 수 있다.  

Table. resume용 actionflow

PrioritynameclassNameRemarkM/OVersion
1checkUpdateActionhonemobile.client.actionflow.action.CheckUpdateAction앱과 BizApp 업데이트 확인O▲3.2.5
     

 

제품에서 제공하는 각 Action의 properties 정보는 아래와 같다

Table. installBuiltinBizAppAction 의 properties

NoNameTypeRemarkM/OVersion
1bizAppLauncherIdstring내장 비즈앱 중 시작 BizApp의 name (config.xml의 name 태그 정보)M 
2builitInBizAppFileNamesjson array내장 비즈앱 리스트 정의 (res/raw 내 비즈앱 파일 이름 목록) M 
2-1[Built-in File Name]string내장 비즈앱의 파일 이름M 
     

 

Table. updateConfigurationAction 의 properties

NoNameTypeValueRemarkM/OVersion
1errorPolicystringskip | retryAction 수행 중 Network 발생 시 처리 정책 (기본값 retry)O▲3.1.1
      

 

Table. updateLauncherAction 의 properties

NoNameTypeValueRemarkM/OVersion
1fromstringoperations | store타깃이 되는 서버 정의 (기본값 operations)O 
2errorPolicystringskip | retryAction 수행 중 Network 발생 시 처리 정책 (기본값 retry)O▲3.1.1
      

 

Table. updateBizAppAction 의 properties

NoNameTypeValueRemarkM/OVersion
1errorPolicystringskip | retryAction 수행 중 Network 발생 시 처리 정책 (기본값 retry)O▲3.1.1
      

 

Table. verifyBizAppAction 의 properties

NoNameTypeValueRemarkM/OVersion
1fileObserverbooltrue | falseBizApp위변조 탐지 활성화 유무 (기본값 false)O 
2errorPolicystringskip | retryAction 수행 중 Network 발생 시 처리 정책 (기본값 retry)O▲3.1.1
      

 

Table. showWindowAction 의 properties

NoNameTypeValueRemarkM/OVersion
1windowNamestring 대상 Window 이름M▲3.5.10
      

 

Table. checkUpdateAction 의 properties

NoNameTypeValueRemarkM/OVersion
1fromstringoperations | store대상 서버 (기본값 operations)O▲3.2.5
2checkLevelstringall | 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 에서는 아래와 같은 항목에 대해서 설정을 한다.

  1. 클라이언트에서 사용할 윈도우 설정
  2. 필요 시 추가 윈도우 설정

 

Table. window.json Data format

NoNameTypeRemarkM/O
1windowsjson M
1-1[Window Name]string정의할 Window의 NameM
    

 

Table. [Window Name] Data format

NoNameTypeRemarkM/O
1classNamestring실제 Plugin인 구현된 Class 경로M
2propertiesjson윈도우에 전달되는 데이터O
    

 

Table. properties Data format

NoNameTypeRemarkM/O
1currentUrlstringWindow가 웹 화면인 경우에 기본 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

NonameclassNameRemark
1defaultWindowhonemobile.client.window.DefaultWindow기본 네이티브 화면
2defaultPopupWindowhonemobile.client.window.DefaultPopupWindow기본 네이티브 팝업 화면
3defaultWebWindowhonemobile.client.window.DefaultWebWindow기본 웹 화면
4defaultWebPopupWindowhonemobile.client.window.DefaultWebPopupWindow기본 웹 팝업 화면
    

plugin.json

plugin.json 에서는 아래와 같은 항목에 대해서 설정을 한다.

  1. 비즈앱에서 사용할 플러그 인 설정
  2. 필요 시 추가 플러그 인 설정

 

Table plugin.json Data format

IDNameTypeRemarkM/O
1pluginsjson M
1-1[Plugin Name]string플러그인 이름M
    

 

Table. [Plugin Name] Data format

NoNameTypeRemarkM/O
1classNamestring플러그인 이 구현된 클래스 전체 경로M
2propertiesjson플러그인 에 설정할 데이터 값O
    

 

Table. Plugin 의 properties

NoNameTypeValueRemarkM/O
1preloadbooltrue | 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

NonameclassNameRemark
1authenticationhonemobile.client.plugin.AuthenticationPluginOP 로그인
2networkhonemobile.client.plugin.NetworkPlugin서버와의 통신 채널 제공
3camerahonemobile.client.plugin.CameraPlugin디바이스 카메라 기능
4contacthonemobile.client.plugin.ContactPlugin주소록 정보 추가 및 조회
5sqlitehonemobile.client.plugin.SQLitePlugin디바이스 SQL 기능
6devicehonemobile.client.plugin.DevicePlugin디바이스 정보 조회
7fileRepositoryhonemobile.client.plugin.FileRepositoryPluginLocal 파일 저장 서비스
8geolocationhonemobile.client.plugin.GeoLocationPlugin위치정보 조회
9windowhonemobile.client.plugin.WindowPlugin화면 이동 및 출력 기능
10preferencehonemobile.client.plugin.PreferencePluginPreference 기능
    

추가로 제공되는 Plugin은 다음과 같으며 기능을 제공받기 위해선 관련 라이브러리를 개발 프로젝트에 포함시켜야 한다.
각 Plugin 라이브러리에 대한 상세 설명 및 포함 방법은 Android 개발 가이드의 프로젝트 생성을 참고한다.

Table. 추가 plugin

NonameclassNameLibrary NameRemarkVersion
1applinkerhonemobile.client.plugin.AppLinkerPluginlibhone-applinker-release.aar외부앱 연결 기능▲3.0.0
2barcodehonemobile.client.plugin.BarcodePluginlibhone-barcode-release.aar바코드 기능▲2.6.4
3clipboardhonemobile.client.plugin.ClipboardPluginlibhone-clipboard-release.aar클립보드 기능▲3.0.0
4fingerprinthonemobile.client.plugin.FingerprintPluginlibhone-fingerprint-release.aar지문 인증 기능▲3.0.0
5flashlighthonemobile.client.plugin.FlashlightPluginlibhone-flashlight-release.aar플래쉬 기능▲3.0.0
6galleryhonemobile.client.plugin.GalleryPluginlibhone-gallery-release.aar갤러리 기능▲3.0.0
7lockscreenhonemobile.client.plugin.LockscreenPluginlibhone-lockscreen-release.aar잠금화면 기능▲3.1.1
8loghonemobile.client.plugin.LogPluginlibhone-log-release.aar로그 기능▲3.0.0
9motionhonemobile.client.plugin.MotionPluginlibhone-motion-release.aar단말 동작 정보 기능▲3.0.0
10noticehonemobile.client.plugin.NoticePluginlibhone-notice-release.aar공지사항 기능▲2.6.4
11screenhonemobile.client.plugin.ScreenPluginlibhone-screen-release.aar화면 밝기 기능▲3.0.0
12secureStoragehonemobile.client.plugin.SecureStoragePluginlibhone-secure-storage-release.aar암호화 저장소 기능▲3.1.1
13vibratorhonemobile.client.plugin.VibratorPluginlibhone-vibrator-release.aar단말기 진동 기능▲3.0.0
      

logback.xml

HSP 은 로그 메시지 처리를 위해서 외부 라이브러리인 logback 을 이용하여 처리 한다.

logback 은 로그 레벨 설정을 위해 assets 내 logback.xml 을 이용하며 로그 레벨은 trace, debug, info, warn, error 이 존재 한다. 

앱을 릴리즈할 경우에는 반드시 root level을 error로 정의해야 한다.

Example

<configuration>
   <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>