카카오 웹뷰 문의입니다다다다다

안녕하세요.
궁금한게 있어서 글 남깁니다.

카톡 내부 브라우저에서 https://evinfo.co.kr 여기 들어가면 위치를 못잡아요.
navigator.geolocation.getCurrentPosition()의 에러 콜백 함수를 못잡네요.

실제로 최초 실행시, GPS를 키고 들어가면 됩니다.
안키면 무한 로딩 css… (위 에러 콜w백 함수에, 로딩 css를 숨기고 메시지를 뿌려라 있음)

근데 GPS 키고 들어갔다가 중간에 끄고 현재 위치로 가는 버튼을 눌러도 맛탱이.

웹단에서 처리할 수 있는 방법이 있나해서 글 남깁니다.

http://map.daum.net 도 마찬가지로, 처음에 gps 키고 접속 → 위치정보 동의 → 종료 → gps 끄고 접속 → ‘현위치 측정 제한 시간을 초과하였습니다’ 출력

굳이 타임아웃으로 하시는것을 보니… 에러 핸들링을 할 수 없나보네요.
방법이 이렇게… 타임아웃 거는 방법밖에 없을까요?
gps 키고 접속 후 gps 끈 다음에 현재 위치 버튼을 누르는 것도 맛탱이고,
gps 끄고 접속 후 gps 킨 다음에 현재 위치 버튼을 누르는 것도 맛탱이고…
방법이 이것밖에 없다면 웹뷰로 앱을 만들 경우엔 거의 무쓸모 수준인데, 정말 방법이 없을까요? 제가 안드로이드는 무뇌라서 ㅠㅠ

굽신굽신

일단 Native 브라우저의 경우에는 디바이스의 GPS 위치정보 On/Off 에 대한 이벤트를 따로 가지고 있지 않습니다.
그렇기 때문에 말씀하신 것 처럼 현위치 버튼을 따로 누르는 동선을 거치게 됩니다.

센챠, 폰갭, 아이오닉과 같은 프레임웍으로 웹앱을 만드신다면 또 다른 방법이 있을지 모르겠지만
제가 아는 수준에서는 간단히 맛탱이(?)를 벗어나긴 힙듭니다.

그래도 만약 하신다고 하면…
setInterval, watchPosition으로 polling 구조를 만들어서 사용하시면 될것 같기도 합니다.
(주의: 콜백 지옥이 예상됩니다.)

그런데 보통…
위에 말씀하신 동선으로 어플리케이션이 동작한다고 해서 무쓸모 수준까지 될까요?
사용자들은 저 정도는 어느정도 학습이 되었다고 생각하는데
한 번 더 누르는 것이 과연 문제가 될까 싶기도 합니다.

일반 사용자들이 앱을 사용하는데 있어서 일반적인 동선도 아닌것 같고…
(물론 만드시려는 어플리케이션이 어떤건지 모르고 드린 말이니 무시하셔도 됩니다.)

답변 감사드립니다. 일단… 다음이나 네이버처럼 타임아웃 넣어뒀습니다… 그렇게 한 깊은 뜻이 있으리라 생각하며…

저는 항상 개발할때 사용자 스맛폰 활용 수준을 울엄마로 기준을 잡으니 진짜 미춰버릴거같습니다…

ㅠ ㅠ ㅠ ㅠ

워워…
polling 예제를 선물로 드리겠습니다.
정신줄을 놓으시지 마세요.

var STATE = {
    WATCHED: 0,
    ERROR: 1
};

var state = null;
var watchId = null;

setInterval(function() {

    if (watchId !== null) {
        navigator.geolocation.clearWatch(watchId);
    }

    watchId = navigator.geolocation.watchPosition(function(pos) {

        navigator.geolocation.clearWatch(watchId);

        if (state !== STATE.WATCHED) {
            // do something after GPS is turned on
            alert('Watched!!!');

            state = STATE.WATCHED;
        }
    }, function(err) {

        navigator.geolocation.clearWatch(watchId);

        if (state !== STATE.ERROR) {
            // do something after GPS is turned off
            alert('Error Code: ' + err.code);

            state = STATE.ERROR
        }
    });
}, 5000)

컨셉으로 만든 코드라 모든 상황에서 100% 올바르게 동작하는 코드는 아닙니다.
상태가 변했을 때, 무엇인가 해야 한다면 주석으로 표시된 부분에 로직을 작성하시면 됩니다.
setInterval의 5000ms는 느낌으로 지정해 주세요.
저는 저 정도로 했을 경우에 위화감 없이 동작하는 것 같았습니다.

ㅎㅎ친절하신 답변에 깜짝놀랐습니다.
감사합니다 곧 주말이니 빠이팅하십쇼ㅎㅎ

1개의 좋아요