일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 북딜
- 모캠
- fluentd
- 쿠버네티스
- Kubernetes
- javascript
- SRE
- #Swagger-codegen
- AWS
- server
- React
- Reducer
- docker
- 프로세스
- 모두의캠퍼스
- #api 문서화
- #Swagger-editor
- Site Reliability engineering
- React.js
- 카카오게임즈
- #스웨거
- action
- 쿠버네티스 컨트롤러
- ecs
- 기술PM
- IP
- #Swagger
- Redux
- 프로세스 통신
- #Swagger-ui
- Today
- Total
탕구리's 블로그
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를 통해 액티비티를 실행 시킨다.
'Java > Android' 카테고리의 다른 글
Android 13 퍼미션 변경 사항_READ_EXTERNAL_STORAGE (0) | 2024.09.14 |
---|---|
구글 결제 테스트 하기! (0) | 2020.10.30 |
Play Asset Delivery(PAD) (4) | 2020.10.09 |
APK와 AAB에 대한 정리 (0) | 2020.06.28 |
RecyclerView에 대해 알아보자 (0) | 2017.04.29 |