JailbreakDetection API 가이드 개요
본 가이드 프로그램 에서는 디바이스의 루팅 및 탈옥 정보 조회 기능의 활용을 가이드 할 수 있도록 기기 검사 하기, 인식결과 조회 를 제공하고 있다. 
| 구분 | 내용 | 
|---|---|
| Local 디바이스 개발 환경 | 전자정부표준프레임워크 개발환경3.6, Android SDK API 23(version 6.0 Marshmallow) | 
| 서버 사이드 개발 환경 | 전자정부표준프레임워크 개발환경3.6 | 
| Mash up Open API 연계 | N/A | 
| 테스트 디바이스 | Galaxy S2, G5 | 
| 테스트 플랫폼 | Android 2.3, Android 6.0 | 
| 추가 라이브러리 적용 | N/A | 
| 구분 | 내용 | 
|---|---|
| 지원 디바이스 및 플랫폼 | N/A | 
| 크로스 도메인 사용 | 폰갭에서 특정 외부 도메인이나 외부 도메인의 하위 도메인을 사용해야할 경우, Res/xml/config.xml에서 <access origin=”” />에 외부 도메인 주소를 추가 설정해야 외부 도메인에 접속할 수 있다. | 
| 라이선스 | N/A | 
JailbreakDetectionAPI 가이드 프로그램은 크게 기기검사 하기, 인식결과 조회 기능으로 구성되어 있다.(관련기능 부분참조)
| 유형 | 대상소스명 | 비고 | 
|---|---|---|
| Activity | kr.go.egovframework.hyb.DeviceInfoapi.JailbreakDetectionAPIGuide_AndroidActivity | JailbreakDetectionAPI 가이드 프로그램 Activity Class | 
| CSS | assets/www/css/egovframwork/mbl/hyb/JailbreakDetectionAPI.css | JailbreakDetection 가이드 프로그램 주요 Cascading Style Sheets | 
| IMAGE | assets/www/images/egovframwork/mbl/hyb/ | JailbreakDetection 가이드 프로그램 주요 Image 폴더 | 
| JS | assets/www/js/egovframwork/mbl/hyb/JailbreakDetection.js | JailbreakDetection 가이드 프로그램 주요 JavaScript | 
| JS | assets/www/js/egovframwork/mbl/hyb/messages_ko.js | Validate 메세지 처리 JavaScript | 
| RES | assets/www/res/ | JailbreakDetection 가이드 프로그램 주요 Resource 폴더 | 
| XML | AndroidManiFest.xml | 안드로이드 어플리케이션 설정 XML | 
| HTML | assets/www/JailbreakDetection.html | JailbreakDetection 메인 페이지 | 
| HTML | assets/www/intro.html | JailbreakDetection Intro 페이지 | 
| HTML | assets/www/license.html | JailbreakDetection 라이센스 페이지 | 
| HTML | assets/www/overview.html | JailbreakDetection 기능설명 페이지 | 
	var cordova= device.cordova;
	var platform = device.platform;
	var uuid = device.uuid;
	var version = device.version;
        var isDevicesRooted;
| 변수 | 설명 | 비고 | 
|---|---|---|
| cordova | 어플리케이션에서 사용된 폰갭 버전을 반환한다. | |
| platform | 모바일 디바이스의 플랫폼 정보를 반환한다. | |
| uuid | 디바이스 고유의 UUID를 반환한다. | |
| version | 디바이스의 플랫폼 버전을 반환한다. | |
| isDevicesRooted | 디바이스에 루팅 및 탈옥 결과정보를 반환한다. | 
window.addEventListener("batterycritical", yourCallbackFunction, false);
window.addEventListener("batterylow", yourCallbackFunction, false);
window.addEventListener("batterystatus", yourCallbackFunction, false);
| 유형 | 대상소스명 | 비고 | 
|---|---|---|
| Controller | egovframework.hyb.mbl.jai.web.EgovJailbreakDetectionDeviceAPIController.java | JailbreakDetectionAPI 가이드 프로그램 Controller Class | 
| Service | egovframework.hyb.add.dvc.service.EgovJailbreakDetectionDeviceAPIService.java | JailbreakDetectionAPI 가이드 프로그램 Service Class | 
| ServiceImpl | egovframework.hyb.add.dvc.service.impl.EgovJailbreakDetectionDeviceAPIServiceImpl.java | JailbreakDetectionAPI 가이드 프로그램 ServiceImpl Class | 
| VO | egovframework.hyb.add.dvc.service.JailbreakDetectionDeviceAPIVO.java | JailbreakDetectionAPI 가이드 프로그램 VO Class | 
| DAO | egovframework.hyb.add.dvc.service.impl.JailbreakDetectionDeviceAPIDAO.java | JailbreakDetectionAPI 가이드 프로그램 Dao Class | 
| QUERY XML | resources/egovframework/sqlmap/hyb/add/dvc/EgovJailbreakDetectionDeviceAPIGuide_SQL_xxx.xml | JailbreakDetectionAPI 가이드 프로그램 QUERY XML | 
| 테이블명 | 테이블명(영문) | 비고 | 
|---|---|---|
| 탈옥정보 | detection | 탈옥 및 루팅 정보 관리 | 
| No | 컬럼ID | 컬럼명 | 타입 | 길이 | NULL | 
|---|---|---|---|---|---|
| 1 | SN | 일련번호 | NUMERIC | 6 | NotNull | 
| 2 | UUID | UUID | VARCHAR | 45 | NotNull | 
| 3 | OS | OS | VARCHAR | 45 | NotNull | 
| 4 | PG_VER | 폰갭버전 | VARCHAR | 45 | NotNull | 
| 5 | DETECTION | 탈옥여부 | VARCHAR | 45 | NotNull | 
JailbreakDetection 디바이스API 가이드 프로그램에서 제공하는 모바일 디바이스의 메타 정보 조회 기능을 활용하기 위하여 필요한 항목 및 그 환경 설정은 다음과 같다.
<!--전자정부 Interface 디바이스 API를 사용하기 위한 Phonegap Plugin 클래스--> <plugin name="EgovInterfacePlugin" value="kr.go.egovframework.hyb.plugin.EgovInterfacePlugin" />
<!--전자정부 Interface 디바이스 API에서 사용하기 위한 서버경로 설정--> <?xml version="1.0" encoding="utf-8"?> <resources> <string name="SERVER_URL">http://192.168.100.222:8080/DeviceAPIGuideTotal_Web_V1.7.1</string> </resources>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<sqlMap resource="egovframework/sqlmap/hyb/mbl/jai/EgovDeviceAndroidAPIGuide_SQL_[DB명].xml"/>
JailbreakDetectionAPI 가이드 프로그램은 크게 디바이스 내 메타 정보 조회 기능과 조회된 메타 정보를 서버에 전송하고 조회할수 있는 기능으로 구성되어 있다.
/** 디바이스 정보  VO */
var deviceInfoVO = {
    sn : "",
    uuid : "",
    os : "",
    pgVer : "",
    detection : ""
}
function fn_egov_detectio(){
	 
	 
	 var successCallback = function (result) {
		 var  isDevicesRooted = result == 1;
			
						
		    $('.deviceInfo:eq(0)').html(device.platform + " " + device.version);
		    $('.deviceInfo:eq(1)').html(device.uuid);
		    $('.deviceInfo:eq(2)').html(device.cordova);    
		    $('.deviceInfo:eq(3)').html(" " + isDevicesRooted);
	
		};
		var errorCallback = function (error) {
		    console.error(error);
		   
		};
		
		rootdetection.isDeviceRooted(successCallback, errorCallback);
		
		 $.mobile.changePage('#deviceInfo', 'slide', false, false);
		    infoScroll.refresh();
} 
function fn_egov_get_networkInfo() {
    var networkState = navigator.network.connection.type;
    
    var states = {};
    states[Connection.UNKNOWN]  = 'Unknown connection';
    states[Connection.ETHERNET] = 'Ethernet connection';
    states[Connection.WIFI]     = 'WiFi connection';
    states[Connection.CELL_2G]  = 'Cell 2G connection';
    states[Connection.CELL_3G]  = 'Cell 3G connection';
    states[Connection.CELL_4G]  = 'Cell 4G connection';
    states[Connection.NONE]     = 'No network connection';
    
    return states[networkState];
    
}
| 디바이스 정보조회 화면 | 
|---|
|  | 
OS: 플랫폼 정보 및 버전 
UUID : 디바이스의 고유 아이디 
PhoneGap Version : jailbreakdetection가이드 프로그램에 적용된 폰갭 버전 
Jailbreak Detection : 디바이스의 탈옥 및 루팅 여부 
function fn_egov_save_detectioInfo(){
	
	var url = "/jai/addJailbreakDetectionDeviceInfo.do";
	
	var d_os = $(".deviceInfo:eq(0)").text();
	var d_uuid = $(".deviceInfo:eq(1)").text();
	var d_pg_ver = $(".deviceInfo:eq(2)").text();
	var d_detection = $(".deviceInfo:eq(3)").text();
	
	console.log("os > " + d_os + "\n uuid >>>  " + d_uuid + "\n pg_ver : >>>>" + d_pg_ver + "<<<<<< \n detection >>" + d_detection + "<<<<");
	
	var params = {
			os : d_os,
			uuid : d_uuid,
			pgVer : d_pg_ver,
			detection : d_detection		
	};
	window.plugins.EgovInterface.request(url, params, function(jsondata) {
		console.log("jsondata > " + jsondata);
		if (jsondata.resultState == "OK") {
			console.log("send  ok");
		} else {
			$("#alert_dialog").click(function() {
				jAlert('데이터 전송 중 오류가 발생 했습니다.', '전송 오류', 'c');
			});
		}
	}, function(result) {
		console.log("error > " + result);
	});
	console.log("JailbreakDetectionDeviceInfo fn_egov_save_detectioInfo request Completed");
	
	$.mobile.changePage("#main", "slide", false, false);
	detailScroll.refresh();
	
}
| Action | URL | Controller method | QueryID | 
|---|---|---|---|
| JailbreakDetection정보 등록 | /jai/addJailbreakDetectionDeviceInfo.do | insertDeviceInfo | “jailbreakDetectionDeviceAPIDAO.insertJailbreakDetectionDevcie” | 
정보 업로드: JailbreakDetection 결과 정보를 서버로 업로드 한다.
	function fn_egov_move_JailbreakDetectionInfoList() {
	    var url = "/jai/JailbreakDetectionInfoList.do";
	    var accept_type = "json";    
	    
	    var params = {
				uuid : device.uuid,
				};
	    // get the data from server
	    window.plugins.EgovInterface.request(url, params, function(jsonData) {
	        var list_html = "";
	        
	        $(jsonData["JailbreakDetectionDevcieList"]).each(function(idx,obj){
	            var sn = obj.sn;
	            var uuid = obj.uuid;
	            var os = obj.os;
	            var pgVer = obj.pgVer;
	            var detection = obj.detection;
	            
	            console.log("uuid >>>> " + uuid + "\n os >>>>>>> " + os + "\n pgVer >>> " + pgVer + "<<<<<<" + "\n detection >>> " + detection + "<<<<<<");
	            
	            list_html += "<li><h3>UUID : " + uuid + "</h3>";
	            list_html += "<p><strong>OS : " + os + "</strong></p>";
	            list_html += "<p><strong>Version : " + pgVer + "</strong></p>";
	            list_html += "<p>Detection : " + detection + "</p></li>";
	        });
	        
	        console.log("JailbreakDetectionAPIGuide fn_egov_move_JailbreakDetectionInfoList request Completed");
	        
	        var theList = $('#JailbreakDetectionList');
	        theList.html(list_html);
	        $.mobile.changePage("#JailbreakDetectionInfoList", "slide", false, false);
	        theList.listview("refresh");
	        detailScroll.refresh();
	        listScroll.refresh();
	        
	    });    
	}
| Action | URL | Controller method | QueryID | 
|---|---|---|---|
| JailbreakDetection 정보 목록 조회 | /jai/JailbreakDetectionInfoList.do | selectJailbreakDetectionDevcieList | “jailbreakDetectionDeviceAPIDAO.selectJailbreakDetectionDevcieList” | 
| 디바이스 정보목록 조회 화면 | 
|---|
|  | 
 메인화면 이동 : 메인 페이지를 호출한다.
디바이스 어플리케이션에서 발생한 오류 내용 확인 및 디버깅을 위해서는 폰갭 프레임워크에서 제공하는 console.log를 이용할 수 있다. console.log 함수는 자바스크립트 구문에서 사용할 수 있는 디버그 코드로 이클립스 및 Xcode에서 확인 할 수 있다.
console.log의 작성 방법의 예시는 다음과 같다.
function fn_egov_network_check(doCheck)
{
    console.log('DeviceAPIGuide fn_egov_network_check');
    var networkState = navigator.network.connection.type;
    ...
}
디버깅 코드가 실행 되면 아래와 같은 메시지를 개발도구의 콘솔 메시지 창에서 볼 수 있다.
JailbreakDetection 디바이스 API 가이드 프로그램 에서는 디버깅을 위하여 다음과 같이 콘솔 정보를 출력한다.
JailbreakDetection 디바이스 API 가이드 다운로드 : Click