앱케이크_appcake_하이브리드앱제작_Admin.png

*모바일웹소스에 적용한 위치사용기능은 디바이스장치로부터 gps신호를 사용하여 위치값을 조회할수 있게 되지만, 모바일앱의 웹뷰에선 이 기능이 그냥 동작되지 않으며, 위치권한팝업을 앱내에서 뜨게 하여 사용자가 허용을 눌러야 위치 사용이 가능해집니다. ⇒ 위치권한사용을 사용자가 거부하면 모바일웹소스에 적용한 위치값조회가 안됩니다. 위치권한을 거부한 사용자를 그대로 두게되면… 해당 사용자는 거부했단 사실을 잊고 위치기능이 동작되지 않아서 오류라고 인지할수 있게 됩니다.

⇒ 위치권한 거부한 사용자를 위해 자동으로 위치권한 사용여부 체크를 하여 거부한경우 다시 활성화할수 있도록 메세지창을 띄워 알려주고 활성화할 있도록 해주는 기능으로… 위치기능이 중요한 서비스에 적용이 되면 좋은 기능입니다.

image.png

## 아래처럼 위치기능사용이 필요한경우 호출하여 사용해주세요.


// 앱단 메세지 핸들러 호출상태 체크 함수
function waitForCallHandler(callback_func, attempts = 0) {
    if (window.webkit && window.webkit.messageHandlers) {
        callback_func();
    } else if (attempts < 100) { // 100회까지 시도
        setTimeout(function() {
            waitForCallHandler(callback_func, attempts + 1); // 시도 횟수를 증가
        }, 100);
    } else {
        //console.log('waitForCallHandler: 최대 시도 횟수에 도달했습니다.');
    }
}

function get_position(position){
	//position : json규격정보로 넘어옴
	//위치권한 활성화 및 위치기능 사용이 가능하다면 위치값을(위/경도값)을 넘겨받아 사용할수 있음
	alert(JSON.stringify(position));  //확인용
	//alert(position.lat);  //확인용 (위도)
	//alert(position.lng);  //확인용 (경도)
}

//메세지 핸들러 호출함수
waitForCallHandler(function() {
    //위치권한 활성화 및 위치값 조회
	  webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify({"action": "getlocation","callback": "get_position","confirm":"0"}));
			//위치값전달받을 콜백함수명을 get_position 로 이름을 지정하였으며... 위치값을 전달받으려면 이 이름(get_position)의 javascript함수가 정의되어 있어야 함.
			//"confirm":"0" => 0이면 위치권한거부시 권한창을 다시 안보여줌. 1이면 다시 보여주어 위치권한 허용할수 있도록 함.(애플의 심사중에는 꼭 0으로 해주셔야 합니다 : 심사리젝이슈영향)
});

## 버튼 링크로 사용하는 방법

<script>
function get_position(position){
	//position : json규격정보로 넘어옴
	//위치권한 활성화 및 위치기능 사용이 가능하다면 위치값을(위/경도값)을 넘겨받아 사용할수 있음
	alert(JSON.stringify(position));  //확인용
	//alert(position.lat);  //확인용
	//alert(position.lng);  //확인용
}
</script>

// html 태그의 버튼으로 조회는 아래처럼 사용하시면 됩니다.
<div onclick='webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify({"action": "getlocation","callback": "get_position","confirm":"0"}))'>위치값가져오기</div>

Powered by (주)옐로우윈