마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

WebView 결제 질문입니다.

0 추천
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        requestPermissions(perms, permsRequestCode);
        web = (WebView) findViewById(R.id.webview);
        web.getSettings().setJavaScriptEnabled(true);

        //Webview 위치정보 확인 설정
        web.getSettings().setGeolocationEnabled(true);

        //Webview 앱에 등록되어 있는 이미지 리소스를 자동으로 로드하도록 설정
        web.getSettings().setLoadsImagesAutomatically(true);

        //Webview 캐쉬 사용하도록 설정
        web.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

        web.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);


        //Webview 확대축소기능 사용 가능하도록 설정
        web.getSettings().setSupportZoom(true);

        //안드로이드에서 제공하는 줌 아이콘을 사용할 수 있도록 설정
        web.getSettings().setBuiltInZoomControls(true);

        //웹뷰 확대 축소 아이콘 안보이도록
        web.getSettings().setDisplayZoomControls(false);

        //Webview 창 여러개 안뜨도록 설정
        web.getSettings().setSupportMultipleWindows(false);

        //Webview 폼데이터 저장 안하도록 설정
        web.getSettings().setSaveFormData(false);

        //Webview javascript의 window.open 안되도록 설정
        web.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);

        //Webview 가로 스크롤바 사용 안함
        web.setHorizontalScrollBarEnabled(true);

        //Webview 세로 스크롤바 사용 안함
        web.setVerticalScrollBarEnabled(true);

        //Webview 스크롤바 영역 위로 web영역 차지하도록 설정
        web.setVerticalScrollbarOverlay(true);

        //Webview HTML5 DomStorage 지원 가능가하도록 (vimeo 구동방식이 DomStorage)
        web.getSettings().setDomStorageEnabled(true);

        //Webview App캐쉬 사용여부
        web.getSettings().setAppCacheEnabled(true);

        web.setWebViewClient(new WebViewClient());

        web.getSettings().setPluginState(WebSettings.PluginState.ON);
        web.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        cookieManager.setAcceptThirdPartyCookies(web, true);

        web.setWebChromeClient(new WebChromeClient()});

        web.loadUrl("http://androidtest.imweb.me/");


    }


    class WebViewClient extends android.webkit.WebViewClient {
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            Log.e("eee", "Finished : " + url);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            Log.e("eee", "start : " + url);
        }

        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            super.onReceivedError(view, request, error);

            Log.e("eee", "ReceivedError : " + error.getErrorCode() + "///" +
                    error.getDescription().subSequence(0, error.getDescription().length()) + "///" +
                    request.getMethod() + "///" + request.getUrl().toString());

        }

        @Override
        public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
            super.onReceivedHttpAuthRequest(view, handler, host, realm);
            Log.e("eee", "ReceivedHttpAuthRequest : " + host + "////" + realm);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.e("eee", url);
            if (url.startsWith("intent:")) {
                try {
                    Intent intent2 = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
                    Uri uri = Uri.parse(intent2.getDataString());
                    try {
                        Intent intent3 = new Intent(Intent.ACTION_VIEW, uri);
                        startActivity(intent3);
                    } catch (ActivityNotFoundException e) {
                        Intent marketIntent = new Intent(Intent.ACTION_VIEW);
                        marketIntent.setData(Uri.parse("market://details?id=" + intent2.getPackage()));
                        startActivity(marketIntent);
                    }

                    return true;
                } catch (Exception e) {

                    e.printStackTrace();
                }
                return true;
            }
            return super.shouldOverrideUrlLoading(view, url);
        }
    }

 

 

 

서버에서랑 웹에서 결제는 다 처리하고

웹뷰에서는 뿌려주기만 합니다.

어차피 웹에서 동작하는거니까 웹뷰에서 뿌려주기만 하는거겠죠 ...

그런데 일반 웹이나 모바일 웹에서는 결제가 문제가없는데

저희 어플 웹뷰에서만 문제가 생깁니다.

결제진행이 되다가 막바지에 처음으로 돌아간다던지..

또는 식별번호가 없습니다 가 뜬다던지 여기저기 검색해서 5.0버전 이상부터는 쿠키 허용도 시켜줫구요

왜 문제가 생기는지 모르겠습니다...

그리고 pg사 결제창 들어가면 웹뷰에서 아에 액션을 못잡던데... 다른분들도 그러신가요??

어떻게 해결하는게 좋을까요 ㅠㅠㅠ 쿠키허용도했는데 결제는 안되고 웹뷰에서는 WebViewClient로 결제창만 들어가면 아무런 액션을 못잡습니다 하 ...

ps webChromeClient 쪽은 코드가 너무 길어져서 일부로 제거했습니다. 그냥 파일목록 불러오는 부분이라서요

 

정에약한마음 (1,160 포인트) 님이 2016년 10월 21일 질문

1개의 답변

0 추천
shouldOverrideUrlLoading에서 추가 및 매니페스트 기타 부분에 추가할 코드가 있지 않나요 PG사 문서 참고 바랍니다.
아무개 님이 2016년 10월 21일 답변
그건 앱내에서 결제를 할때 하는거고 그부분은 php소스에서 다 처리하고 있습니다 ㅜㅜ
웹에서는 다처리하고있어서 일반 모바일 크롬브라우저에서는 결제가 잘 진행됩니다
현재 결재가 앱투웹으로 하시는것 인가요
크롬이 된다고 해서
앱 웹페이지가 된다고 생각하시는것 아닌시지요
더이상 답변은.. 다음사람이
ㄷㄷ 이렇게 가버리시면 크롬이라는게 모바일 브라우저를 말하는겁니다 안드로이드 폰내에있는 브라우저요 심지어 카카오톡으로 받아서 카톡내 브라우저로 열어도 됩니다. 네이버앱에서두 되구요 그말은 앱에서 뭔가 설정을 잘못하고있다 라는 생각밖에 안드는데 ...
...