Android - WebViewClient
WebViewClient Class의 메소드 자세한 내용은 아래 링크를 확인하면 된다.
http://ankyu.entersoft.kr/lecture/android/webview_02.asp
현재 모두의캠퍼스의 WebViewClient에서 사용하고 있는 메소드는 총 4가지 이다.
shouldOverrideUrlLoading
onPageFinished
onPageStrated
onReceivedError
webView.loadUrl()을 통해 Redirection이 발생한 경우 기본적으로
ShouldOverideUrlLoading → onPageStarted → onPagefinished 순으로 사이클이 발생
ShouldOverideUrlLoading에서 return false; 가 발생할 경우 OnReceivedError()가 발생한다.
1:1 문의하기 Redirection이 발생했을 경우의 ShouldOverideUrlLoading의 로직은 다음과 같다.
mWebView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null) {
if (url.startsWith("http://") || url.startsWith("https://")) {
view.loadUrl(url);
} else if (url.startsWith("intent://")) {
try {
Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
Intent existPackage = getPackageManager().getLaunchIntentForPackage(intent.getPackage());
if (existPackage != null) {
startActivity(existPackage);
return true;
} else {
if(url.indexOf("fb-messenger") > -1) {
Intent kakaoIntent = Intent.parseUri("intent://plusfriend/talk/chat/@%EB%AA%A8%EB%91%90%EC%9D%98%EC%BA%A0%ED%8D%BC%EC%8A%A4#Intent;scheme=kakaoplus;package=com.kakao.talk;end", Intent.URI_INTENT_SCHEME);
Intent kakaoPackage = getPackageManager().getLaunchIntentForPackage(kakaoIntent.getPackage());
if(kakaoPackage != null) {
startActivity(kakaoPackage);
return true;
} else {
Toast.makeText(myApp, "문의 가능한 어플이 없습니다. 페이스북 메시지를 통해 문의주세요 :)", Toast.LENGTH_LONG);
mWebView.loadUrl("<https://www.facebook.com/moducampus/>");
}
} else if (url.indexOf("plusfriend") > -1) {
Log.d(DEBUG_LOG,"2");
Toast.makeText(myApp, "문의 가능한 어플이 없습니다. 페이스북 메시지를 통해 문의주세요 :)", Toast.LENGTH_LONG);
mWebView.loadUrl("<https://www.facebook.com/moducampus/>");
}
};
return false;
} catch (Exception e) {
e.printStackTrace();
}
} else { // unhandled url scheme
Log.d(DEBUG_LOG, "unhandled url scheme : ");
}
return false;
} else {
return false;
}
}
"1:1 문의요청 → 페이스북 메신저 → 없을경우 카카오톡 플러스친구 → 없을경우 모두의캠퍼스 페이스북 페이지"
의 순으로 요청이 발생하게 된다.
실제적으로 페이스북 메신저나 카카오톡 플러스 친구로 요청이 발생했을 경우 바로 어플리케이션이 연결되는게 아닌 총 2번의 redirection이 더 발생한다.
페이스북의 경우 다음과 같다.
2차 : intent://user/1571701929578439/?intent_trigger=mme&nav=discover#Intent;scheme=fb-messenger;package=com.facebook.orca;end
"http" 와 "https" 에 대해서는 일반적인 redicrection이 발생하고, intent 주소가 발생할 경우 intent 주소에 맞게 getPackageManager()를 통해 모바일 로컬에 설치되어 있는 어플리케이션을 불러오며 intentfilter를 통해 액티비티를 실행 시킨다.