webview에서 모바일 웹페이지를 보여주고 있는데요.
마켓접속하는 url이 로딩되면 shouldOverrideUrlLoading 함수에서
Intent it = new Intent(Intent.ACTION_VIEW, uri); 를 통해서 해결했는데..
결제할 때는 "ahnlabv3mobile:..." 이런 식의 url이 로딩되는데
또는 특정사이트만의 프로토콜도 있던데.. "coupang://" 이런 식의 커스텀 프로토콜 같은 것 말이죠.
이 때 webview에서 지원하지 않는 프로토콜이라며 에러를 뱉어냅니다~
가끔 특정 사이트에서 http가 아닌 해당 사이트만의 url을 사용하는 경우에도 마찬가지인데요.
안드로이드 기본 브라우저를 사용하면 저런 프로토콜이 처리가 되더군요.
Logcat 뒤져보니까 일단 onReceivedError 가 발생하면서 errorCode 가 -10 이 떨어지긴 하는데
커스텀프로토콜을 해석해서 다시 loading을 하더군요.
onReceivedError가 발생한 후에 뭔가 Url Handler를 통해서 제대로된 url을 찾아내는 것 같은데...
그리고, 이런 특정 url을 Intent를 통해 날리더라도 관련된 Activity를 찾을 수 없다는 에러가 나네요.
카톡의 선물하기쪽을 보면 같은 webview인데도 특이한 url을 다 소화하더군요.
뭔가 방법이 있을 법 한데 혹시 아시는 분 있을까요?
이 문제에 대해 명확한 구글 검색어는 아마도
"android webview custom protocol handling" 정도 일 것 같습니다.
이 검색어로 구글링은 하는 중인데 도통 해결됐다는 글이 안나오네요~
넵 shouldOverrideUrlLoading 로 별도처리하고, ActivityNotFoundException 처리도 하고 해서 되긴 하는데,
custom 프로토콜 중에 처리방법을 알고있는 것들은 그렇게 가능한데
제가 모르는 custom 프로토콜이 어딘가 또 있을거라는거죠..
예를들면 samsung://, lotte://, .... 뭐 이런 프로토콜도 있을건데
다 일일히 찾아내서 처리를 해주긴 그렇고,
안드로이드 기본 브라우저처럼 저런 custom 프로토콜을 만나면 그걸 handling해서 http:// 형식의 제대로 된
url 형식을 뽑아내서 webview에 뿌려주고 싶다는거죠 ㅎㅎ
구글링 엄청해보고, Browser.git 소스도 엄청 봤는데 아직 해결이 안되네요 ㅎ




말씀하신대로 shouldOverrideUrlLoading 에서 url 보고 그에 맞게 동작하도록 하면 될 것 같은데 안되나요?;;