웹앱 편의성을 위한 추가 설정(필수일지도..)

안상철·2022년 8월 21일
0
post-thumbnail

이미지 저작권 설정에 이은 웹앱 편의성을 위한 추가 설정이다.

필요한 설정을 추가 할 때 마다 여기에도 추가하도록 하겠음..

세로모드 고정

AndriodManifest.xml
android:screenOrientation="portrait" 추가

onCreate
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 추가

뒤로 가기 버튼 핸들링

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        long tempTime = System.currentTimeMillis();
        long intervalTime = tempTime - backPressedTime;

        if ((keyCode == KeyEvent.KEYCODE_BACK)) {

            // 로그인 혹은 메인 화면에서 뒤로가기 클릭 시 앱 종료 토스트 발생
            if(webView.getUrl().equals(url + "/user/main") ||
               webView.getUrl().equals(url + "/login")) {
                if (0 <= intervalTime && FINISH_INTERNAL_TIME >= intervalTime) finish();
                else {
                    backPressedTime = tempTime;
                    Toast.makeText(getApplicationContext(), "한번 더 누르면 앱이 종료됩니다.", Toast.LENGTH_SHORT).show();
                }
            }
            else if (webView.getUrl().equals(url + "/user/profile")){
                webView.loadUrl(url + "/user/main");
            // 이 외에는 뒤로가기 버튼 허용
            } else {
                webView.goBack();
            }
            return true;
        }
        
        return super.onKeyDown(keyCode, event);
    }

SSL 인증서 무시

private static class WebViewClientClass extends WebViewClient {

        @SuppressLint("WebViewClientOnReceivedSslError")
        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            handler.proceed();
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(String.valueOf((request.getUrl())));
            return true;
        }
    }

캡쳐방지

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);

세로모드로 고정

// 세로모드로 고정 + Manifest.xml portrait 추가 해야함
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

웹뷰에서 자바 스크립트로 빌드 된 화면을 렌더링 할 수 있도록 설정

webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);

웹뷰가 동작할 떄 호환되는 브라우저 설정, Front 개발 환경에 맞게 설정하면 되는데 나같은 경우 크롬으로 설정

webView.setWebChromeClient(new WebChromeClient());
        webView.setWebViewClient(new WebViewClientClass());

웹뷰 로드 시 캐시 및 히스토리를 삭제해 웹 업데이트나 새로고침 등을 반영하도록 하는 설정

        webView.clearCache(true);
        webView.clearHistory();
        webView.loadUrl(url);

네트워크가 없을 때 웹 url을 보이지 않도록 예외처리

        if(!isNetworkAvailable(this)){
            Toast toast = Toast.makeText(this, "따북: 인터넷 연결을 확인해주세요.", Toast.LENGTH_LONG);
            toast.setGravity(Gravity.CENTER, Gravity.CENTER_HORIZONTAL, Gravity.CENTER_VERTICAL);
            toast.show();

            ActivityCompat.finishAffinity(this);
        }
        
        ...(생략)
        
    private Boolean isNetworkAvailable(MainActivity application) {
        ConnectivityManager connectivityManager = (ConnectivityManager) application.getSystemService(Context.CONNECTIVITY_SERVICE);
        Network nw = connectivityManager.getActiveNetwork();
        if (nw == null) return false;
        NetworkCapabilities actNw = connectivityManager.getNetworkCapabilities(nw);
        return actNw != null && (actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH));
    }
profile
웹 개발자(FE / BE) anna입니다.

0개의 댓글