장군이네집
180226 WebView & WebViewClient & WebChromeClient (하이브리드 앱 개발) 본문
180226 WebView & WebViewClient & WebChromeClient (하이브리드 앱 개발)
kukuku0517 2018. 2. 6. 17:25기본적으로 하이브리드 앱을 만드려면
1. 앱안에서 모든 요청이 이루어져야함
2. Javascript 함수를 call하거나 / call된 함수를 앱에서 실행할수있어야함(alert등)
3. 앱 특화된 행동들과 (backpress, 각종 intent등) 연동 되어야함
1.
1) shouldOverrideUrlLoading
deprecated 되어서 사용해도 되는지는 아직 더 조사해봐야겠지만,
요청을 보낼시 url을 받아와 loadUrl(url)을 해주면
해당 웹뷰내에서 이동
2) Jsoup
조금 다른 영역이긴 하지만, 간단한 웹페이지 같은경우는
Jsoup를 통해 스크래핑해서 native UI로 뿌려줌
2.
1) Javascript call을 받아옴
WebChromeClient는 onJSAlert 등 기본적인 JS 함수 호출을 override하는 메소드가 있다
WCC설정만 해주면 됨
2) Javascript call하기
아직 시도해보지는 않았지만
loadUrl("javascript:[methodName]")의 형태로 요청을 보내면 현재 페이지에서의 JS함수를 call할수 있는것으로 보임
3.
1) backpress
onBackPressed를 override하면 간단히 해결될 문제.
가장 문제되었던건 webview내부의 backstack이 남아있는지 여부를 확인하는 것이었는데,
우선 확인은 webView.canGoBack / webView.goBack 으로 할수있지만
stack확인이 제대로 안되는 버그가 발생
우선 해결책은 shouldOverrideUrlLoading에서 canGoBack일 경우에만 loadUrl을 하는 방식으로 redirect를 하는것인데
원인불명
2)JavascriptInterface
웹에서 앱으로 직접 메소드 호출을 할수있는 interface가 존재함
- custom JSinterface class 설정 (@JavascriptInterface 어노테이션 필요)
- webView.addJavascriptInterface()를 통해서 특정 이름으로 custom Interface에 접근 가능
- web에서 window.[className].[methodName](params) 식으로 호출 가능한듯!
'개발 > Android' 카테고리의 다른 글
180301 MVP 패턴 (0) | 2018.03.01 |
---|---|
180207 better android developer (0) | 2018.02.07 |
180120 Android View (0) | 2018.01.21 |
180120 ConstraintLayout (0) | 2018.01.20 |
180118 facebook 연동위한 hash key 등록 (0) | 2018.01.18 |