document.addEventListener('DOMContentLoaded', function () { setTimeout(loaded, 200); }, false);
* 문제 : iScroll5 컨텐츠 내용 높이 계산 오류.
* 해결방안 : setTimeout() 함수로 컨텐츠에 css 적용이 완료되고 iscroll 생성이 되도록 한다.
setTimeout(function()
{
myScroll = new iScroll(thisPage,
{
checkDOMChanges: true,
onBeforeScrollStart:function(e)
{
}
});
},
500);
== CallBack 함수에서 alert() 를 포함하면 문제가 발생할수 있다 (phoneGap) ==
* 문제 : 폰갭에 지정한 콜백 함수에서 alert() 메시지 호출시 동작 오류.
* 해결 방안 : 비동기 함수를 사용하거나 alert()처럼 스레드를 잡는 함수는 사용하지 않는다.
=== 크로스 도메인 사용 ===
폰갭에서 특정 외부 도메인이나 외부 도메인의 하위 도메인을 사용해야할 경우,\\ [Project_Name]/Supporting Files/config.xml에서
navigator.geolocation.getCurrentPosition
navigator.geolocation.getCurrentPosition(successCallback, failCallback);
^Option^설명^비고^
|successCallback|성공시 리턴되는 함수| |
|failCallback|실패시 리턴되는 함수| |
==== Server Application ====
=== 관련 소스 ===
^유형^대상소스^비고^
|Controller|egovframework.hyb.ios.gps.web.EgovGPSiOSAPIController.java|GPS 정보 관리를 위한 클래스|
|Service|egovframework.hyb.ios.gps.service.EgovGPSiOSAPIService.java|GPS 정보 관리를 위한 서비스 인터페이스|
|VO|egovframework.hyb.ios.gps.service.GPSiOSAPIDefaultVO.java|GPS 관리를 위한 VO 클래스|
|VO|egovframework.hyb.ios.gps.service.GPSiOSAPIVO.java|GPS 관리를 위한 VO 클래스|
|DAO|egovframework.hyb.ios.gps.service.impl.GPSiOSAPIDAO.java|GPS 관리를 위한 데이터처리 클래스|
|DAO|egovframework.hyb.ios.gps.service.impl.EgovGPSiOSAPIServiceImpl.java|요청 서비스 처리를 위한 클래스|
|Query XML|resources/egovframework/sqlmap/hyb/ios/gps/EgovGPSiOSAPIGuide_SQL_mysql.xml|GPS 정보 관리를 위한 Query 파일|
=== 관련 테이블 ===
^테이블명^테이블명(영문)^비고^
|gps(eGov)|GPS_EGOV|gps(eGov) 정보 관리|
=== 테이블 정의서 ===
* GPS
^No^컬럼ID^컬럼명^타입^길이^Null^
|1|SN|일련번호|NUMERIC|6|NotNull|
|2|UUID|UUID|VARCHAR|50|NotNull|
|3|LA|Latitude 값|VARCHAR|40|Null|
|4|LO|longitude 값|VARCHAR|40|Null|
|5|ACCRCY|기울임 값|VARCHAR|10|Null|
|6|USEYN|사용여부|CHAR|1|Null|
=== ERD ===
{{:egovframework:hyb:guide:ios:erd.jpg|}}
===== 환경설정 =====
GPS 디바이스 API 가이드 프로그램에서 제공하는 모바일 디바이스의 GPS 관련 기능을 활용하기 위하여 필요한 항목 및 그 환경 설정은 다음과 같다.
=== config.xml ===
=== eGovModule/EGovComModule.h ===
#define kSERVER_URL @"Server_URL"
==== Server Application ====
=== resource/egovframework/sqlmap/sql-map-config_[DB명].xml ===
===== 관련 기능 =====
GPS 디바이스API 가이드 프로그램은 크게 **GPS API 정보 호출**, **GPS API 정보 DB 목록** 기능으로 구성되어 있다.
==== GPS API 정보 호출 ====
=== 비즈니스 규칙 ===
GPS API 정보 호출을 하여, 맵에서 현재 위치를 조회하고, 현재 위치를 서버에 전송하여 저장한다. \\
=== 관련코드 ===
// GPS API 정보 호출
navigator.geolocation.getCurrentPosition(onSuccess, onError);
// GPS 정보를 맵에 표시
function onSuccess(position) {
console.log("GPSAPIGuide navigator.geolocation.getCurrentPosition Success");
console.log('Latitude: ' + position.coords.latitude + '\nLongitude: ' + position.coords.longitude);
lat = position.coords.latitude;
lon = position.coords.longitude;
var html = "";
html = '위도 : ' + position.coords.latitude + '
';
html += '경도 : ' + position.coords.longitude + '';
$('#latlngInfo').html(html);
// 현재 위치 좌표*
var latlng = new daum.maps.LatLng(position.coords.latitude, position.coords.longitude);
// 지도 설정*
var myOptions = {
level: 4,
center: latlng,
mapTypeId: daum.maps.MapTypeId.ROADMAP
};
// 지도 생성*
var map = new daum.maps.Map(document.getElementById("map"), myOptions);
map.addControl(new daum.maps.ZoomControl());
// 현재 위치 마커 표시*
var curMarker = new daum.maps.Marker({
position: latlng
});
curMarker.setMap(map);
var infowindow = new daum.maps.InfoWindow({
content: '위도:'+position.coords.latitude + '
' + '경도:'+position.coords.longitude+''
});
infowindow.open(map, curMarker);
$.mobile.hidePageLoadingMsg('a');
}
// 현재 위치 정보를 서버에 전송
function fn_egov_go_addGpsInfo()
{
var params = {uuid : device.uuid,
lat: lat,
lon: lon,
useYn: 'Y'};
$.mobile.showPageLoadingMsg('a');
alert('Http Method:POST\nAcceptType:JSON\n전송데이터:' + JSON.stringify(params));
EgovInterface.submitAsynchronous(
[params, "/gps/addGPSInfo.do"],
function(result) {
console.log("GPSAPIGuide fn_egov_go_addGpsInfo request Completed");
var str = '{';
for (myKey in result){
str += myKey + ':' + result[myKey] + '\n';
}
str += '}';
alert('응답방식:RESTful\n응답Type:json, post\nParam:\n' + str);
//window.history.back();
$.mobile.hidePageLoadingMsg('a');
location.href = "index.html";
},
function(error) {
console.log("GPSAPIGuide fn_egov_go_addGpsInfo request Failed");
var str = '{';
for (myKey in error){
str += myKey + ' : ' + error[myKey] + '\n';
}
str += '}';
alert('응답방식:RESTful\n전송Type:json, post\nParam:\n' + str);
$.mobile.hidePageLoadingMsg('a');
}
);
}
=== 관련화면 및 수행매뉴얼 ===
^기능^URL^Controller^method^화면(HTML)^
|GPS 정보 서버로 송신하기|/gps/xml/addGPSInfo.do|EgovGPSiOSAPIController|addGPSInfo|GPSAPI.html#signUp|
입력 데이터는 GPS API 정보를 사용한다.
{{:egovframework:hyb:guide:ios:gps_ios_map.png?320|}}
정보데이터를 서버로 송신하기 위해서는 DB저장 버튼을 클릭하면 된다. \\
DB저장 : GPS 데이터를 서버로 송신한다. \\
Back 버튼 : **GPS 디바이스 API 가이드 프로그램 메뉴** 화면으로 이동한다. \\
==== GPS API 정보 DB 목록 ====
=== 비즈니스 규칙 ===
서버에 저장되어 있는 위치 정보 목록을 수신하고, 확인 후 삭제한다.
=== 관련코드 ===
// 목록 읽기
function fn_egov_go_gpsInfoList()
{
console.log('fn_egov_go_gpsInfoList()');
$.mobile.changePage("#gpsInfoList", "slide", false, false);
$.mobile.showPageLoadingMsg('a');
EgovInterface.submitAsynchronous(
["/gps/gpsInfoList.do"],
function(result) {
console.log("GPSAPIGuide fn_egov_go_gpsInfoList request Completed");
var list_html = "";
var totcnt = result.gpsInfoList.length;
for (var i = 0; i < totcnt; i++) {
var data = result.gpsInfoList[i];
list_html += "UUID : " + data.uuid + "
";
list_html += "위도 : " + data.la + "
";
list_html += "경도 : " + data.lo + "
";
}
var theList = $('#theLogList');
theList.html(list_html);
theList.listview("refresh");
$.mobile.hidePageLoadingMsg('a');
setTimeout(loadiScrollList, 1000);
},
function(error) {
console.log("GPSAPIGuide fn_egov_go_gpsInfoList request Failed");
var str = '{';
for (var myKey in error){
str += myKey + ' : ' + error[myKey] + '\n';
}
str += '}';
alert('응답방식:RESTful\n전송Type:json, post\nParam:\n' + str);
$.mobile.hidePageLoadingMsg('a');
}
);
}
// 위치 정보 목록을 삭제한다.
function fn_egov_go_deleteGpsInfo()
{
console.log('fn_egov_go_deleteGpsInfo()');
jConfirm('전송방식:RESTful\n전송Type:json, post\nParam:\n' + 'url:/gps/deleteGPSInfo.do', '알림', 'c', function(r){
if(r == true){
$.mobile.showPageLoadingMsg('a');
EgovInterface.submitAsynchronous(
["/gps/deleteGPSInfo.do"],
function(result) {
console.log("GPSAPIGuide fn_egov_go_deleteGpsInfo request Completed");
console.log("GPS Log List Request Completed");
var str = '{';
for (myKey in result){
str += myKey + ':' + result[myKey] + '\n';
}
str += '}';
alert('응답방식:RESTful\n응답Type:json, post\nParam:\n' + str);
//window.history.back();
$.mobile.hidePageLoadingMsg('a');
location.href = "index.html";
},
function(error) {
console.log("GPSAPIGuide fn_egov_go_deleteGpsInfo request Failed");
var str = '{';
for (var myKey in error){
str += myKey + ' : ' + error[myKey] + '\n';
}
str += '}';
alert('응답방식:RESTful\n전송Type:json, post\nParam:\n' + str);
$.mobile.hidePageLoadingMsg('a');
}
);
}else{
return;
}
});
}
=== 관련화면 및 수행매뉴얼 ===
^기능^URL^Controller^method^화면(HTML)^
|GPS 위치 목록 수신하기|/gps/gpsInfoList.do|EgovGPSiOSAPIController|gpsInfoList|GPSAPI.html#gpsInfoList|
{{:egovframework:hyb:guide:ios:gps_log.png?320|}}
위치 정보 목록을 삭제하기 위해서는 DB삭제 버튼을 클릭하면 된다. \\
DB삭제 : 위치 정보 목록을 삭제한다. \\
Back 버튼 : **GPS 디바이스 API 가이드 프로그램 메뉴** 화면으로 이동한다. \\
===== 컴파일 디버깅 배포 =====
==== 컴파일 ====
=== GPS Device Applicaton 컴파일 방법 ===
1. 디바이스 또는 시뮬레이터에서 실행하고자 할 경우 빨간 테두리 영역을 클릭한다.\\
{{:egovframework:hyb:guide:ios:xcode실행영역선택1.png|}}\\
2. 디바이스 또는 시뮬레이터를 선택한다.\\
{{:egovframework:hyb:guide:ios:xcode실행영역선택2.png|}}\\
3. 실행 버튼을 클릭한다.\\
{{:egovframework:hyb:guide:ios:xcode실행버튼.png|}}\\
4. 인트로 화면과 메인 화면을 확인한다.\\
{{:egovframework:hyb:guide:ios:gps_intro.png?320|}}{{:egovframework:hyb:guide:ios:gps_main.png?320|}}
=== GPS Server Applicaton 컴파일 방법 ===
* GPSAPI 서버사이드 가이드 프로그램의 실행은 프로젝트를 마우스 오른쪽 버튼을 클릭 한후 Run As>Run On Server 버튼을 통해 실행 할 수 있다.
{{:egovframework:hyb:guide:ios:서버실행.png?640|}}
* 빌드가 성공적으로 수행 되면 이클립스의 콘솔 창에서 'Server Startup in xxx ms' 메시지를 확인 할 수 있다.
{{:egovframework:hyb:guide:ios:웹서버실행성공.png?700|}}
==== 디버깅 ====
디바이스 어플리케이션에서 발생한 오류 내용 확인 및 디버깅을 위해서는 폰갭 프레임워크에서 제공하는 console.log를 이용할 수 있다. console.log 함수는 자바스크립트 구문에서 사용할 수 있는 디버그 코드로 이클립스 및 Xcode에서 확인 할 수 있다.
* 실제 콘솔 로그 예
function fn_egov_network_check(doCheck)
{
console.log('DeviceAPIGuide fn_egov_network_check');
var networkState = navigator.network.connection.type;
...
}
* Xcode 콘솔 창
{{:egovframework:hyb:guide:ios:cameradebugxcode.png?700|}}\\
* Organizer 로그 창
{{:egovframework:hyb:guide:ios:cameradebugorganizer.png?700|}}\\
GPS 디바이스 API 가이드 프로그램 에서는 디버깅을 위하여 다음과 같이 콘솔 정보를 출력한다.
^디버그 코드^디버깅 내용^
|GPSAPIGuide navigator.geolocation.getCurrentPosition Success|GPS 정보 읽기 성공 시|
|GPSAPIGuide navigator.geolocation.getCurrentPosition Failed|GPS 정보 읽기 실패 시|
|GPSAPIGuide fn_egov_go_gpsInfoList request Completed|서버에서 GPS 정보 목록 읽기 성공 시|
|GPSAPIGuide fn_egov_go_gpsInfoList request Failed|서버에서 GPS 정보 목록 읽기 실패 시|
|GPSAPIGuide fn_egov_go_addGpsInfo request Completed|서버에 GPS 정보 저장 성공 시|
|GPSAPIGuide fn_egov_go_addGpsInfo request Failed|서버에 GPS 정보 저장 실패 시|
|GPSAPIGuide fn_egov_go_deleteGpsInfo request Completed|서버의 GPS 목록 삭제 성공 시|
|GPSAPIGuide fn_egov_go_deleteGpsInfo request Failed|서버의 GPS 목록 삭제 실패 시|
==== 배포 ====
GPS 디바이스 API 가이드 다운로드 : [[http://www.egovframe.go.kr/cop/bbs/selectBoardArticle.do?bbsId=BBSMSTR_000000000161&nttId=687&menu=3&submenu=9|Click]]
===== 참고 자료 =====
* UX/UI 라이브러리 : jQuery Mobile[[http://jquerymobile.com/demos/1.4.5/|Click]] \\
* Phonegap 4.3.0 : [[http://docs.phonegap.com/en/4.0.0/|Click]] \\
* Daum Map : [[http://dna.daum.net/apis/maps]]