탕구리's 블로그

Android - WebViewClient 본문

Java/Android

Android - WebViewClient

탕구리당 2018. 12. 6. 02:00
반응형

Android-WebView

WebViewClient Class의 메소드 자세한 내용은 아래 링크를 확인하면 된다.

http://ankyu.entersoft.kr/lecture/android/webview_02.asp

현재 모두의캠퍼스의 WebViewClient에서 사용하고 있는 메소드는 총 4가지 이다.

  1. shouldOverrideUrlLoading

  2. onPageFinished

  3. onPageStrated

  4. onReceivedError

webView.loadUrl()을 통해 Redirection이 발생한 경우 기본적으로

ShouldOverideUrlLoading → onPageStarted → onPagefinished 순으로 사이클이 발생

ShouldOverideUrlLoading에서 return false; 가 발생할 경우 OnReceivedError()가 발생한다.

1:1 문의하기 Redirection이 발생했을 경우의 ShouldOverideUrlLoading의 로직은 다음과 같다.

mWebView.setWebViewClient(new WebViewClient() {
           @Override
           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이 더 발생한다.


페이스북의 경우 다음과 같다.


1차 : https://m.facebook.com/msg/moducampus/?show_interstitial=0&mdotme_uri=https%3A%2F%2Fm.me%2Fmoducampus&handler=m.me&referer&refsrc=http%3A%2F%2Fm.me%2Fmoducampus&_rdr


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' 카테고리의 다른 글

구글 결제 테스트 하기!  (0) 2020.10.30
Play Asset Delivery(PAD)  (2) 2020.10.09
APK와 AAB에 대한 정리  (0) 2020.06.28
RecyclerView에 대해 알아보자  (0) 2017.04.29
Comments