[2020기록] 모바일 앱 개발 (OneGuard) - sonsangjun/SimpleTechDesc GitHub Wiki
0. 환경
Angular9, Morpheus(EclipseIDE기반), AndroidStudio3.6(모피어스 컨버팅Ver) 공급자 : 라온시큐어
1. 참고
| 명칭 | 설명 |
|---|---|
| (공란) | (공란) |
2. 내용
3. 문제
OneGuard 정책이 계속 '업무'정책으로 남아있음.
해결책-1
구체적인 증상 한가지를 예시로 들면, App가 종료되었음에도, Bluetooth, 화면Capture 등등이 불가능한 상황이다. 이에 일단, OneGuard에 대한 설명을 먼저 하고 해결책을 기술한다. OneGuard의 정책은 '업무정책', '기본정책' 두 가지가 존재한다. 헌데, 대부분 OneGuard가 적용된 App는 App가 종료되거나, 백그라운드로 상태가 변경되면 일반적으로 '업무정책'->'기본정책'으로 변경된다. 그런데, 간혹 '업무정책'이 스위칭 되지 않는 문제가 발생한다. 이 경우, 방금 종료했던 App을 다시 열어서 그 App를 정상종료하면 문제가 대부분 해결된다. (이유가, 대부분의 App onDestroy에 App종료에 대한 코드가 정의되어 있기 때문이다. (OneGuard같은 경우는 release() 함수가 존재한다.) release()함수 호출시에도 종료가 되지 않는경우는 아래 항목을 참고하면 된다.
[2020기록] 모바일 앱 개발 (Angular9, Morpheus)
해결책-2
Android App가 종료됨에도 onDestroy가 호출되지 않는 경우가 있다. 이 경우, Morpheus기준. BaseActivity의 finish를 Override한다. 안에 안드로이드 마무리 작업 코드를 작성하면 된다. 여기서는 logoutOffice() 같은 OneGuard 종료조치 코드를 작성한다.
해결책-2.1
가끔 Morpheus같은 하이브리드App에서 M.sys.exit()를 호출 시, 안드로이드 생명주기 onDestroy를 호출하지 않고, 곧바로 finish를 호출해버리는 경우가 있다. 만약, onDestroy에 OneGuard해제나, 백신 해제 코드를 작성했다면, 일반적인 생각으로는 'finish를 재정의' 해야겠다는 생각을 할지 모른다. 하지만, finish에 도달시, 이미 Activity의 Context가 없을 가능성이 높고 그에따라, 솔루션을 그 시점에 해제시 Exception이 발생한다.(거의 대부분...) 따라서, onDestroy를 보장할 수 없다면, 사용자가 Android Method를 정의하고 @JavascriptInterface를 붙여 WebView상에서 종료시점에 호출하도록 조치해야한다. 이 부분에 대해서는 Android 항목 참고.
OneGuard 자동업데이트가 안됨
OneGuard는 build.gradle에 정의된 versionName으로 업데이트 여부를 구분하지 않는다. versionName 대신 versionCode로 업데이트 여부를 구분한다. versionCode가 이전 버젼보다 높으면 업데이트 대상으로 간주해서 업데이트를 진행한다. (versionCode는 시퀀셜하게 부여해야한다. 숫자로.)
App이 백그라운드 <-> 포그라운드 전환시 보안경고메시지가 자꾸 토스트
보통 '클립보드'가 차단되었다는 메시지가 반복적으로 토스트 되는 증상이다. MDM자체가 정책Login이 되면 '클립보드' 차단 메시지가 1회 토스트 된다. 문제는, App가 백그라운드로 빠지면 정책이Logout되고, 다시, 포그라운드로 올라오면 정책이Login이 되면서 차단 메시지가 토스트 된다. 이 차단 메시지를 반복적으로 보기 싫다면, 백그라운드로 빠질 시, 정책Logout을 안하던가. MDM자체를 쓰지 말아야 한다. (솔루션 업체 측에서는 '클립보드' 메시지를 뺄 생각을 안하는 것 같다.) (보안키패드 Activity가 잠시 올라왔다 내려가는 것도, BaseActivity 입장에서는 onPause <-> onResume이기 때문에 백그라운드 <-> 포그라운드로 인지한다.)