通过android webview加载https

时间:2015-12-13 08:10:39

标签: android webview

我是Android的新用户,在我的应用中,我需要与https建立连接以进行付款操作,以及我尝试建立连接时网页视图的当前状态。

webview fails

我已经在网上查找了通过覆盖onReceivedSslError方法加载https以忽略错误并继续进行的解决方案。所以,我已经这样做了。

这是我的网页视图获取其设置:

web = (WebView)findViewById(R.id.web);

// setting WebViewClient
web.setWebViewClient(new WebViewClientClass());
web.getSettings().setDomStorageEnabled(true);
web.getSettings().setJavaScriptEnabled(true);
web.loadUrl(orderSheetUrl);

其中orderSheetUrl是我的付款操作将用户带到的https网址。

以下是我的WebViewClient类:

private class WebViewClientClass extends WebViewClient {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        Log.d("WebView", "onPageStarted " + url);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.d("WebView", "in shouldOverrideUrlLoading");
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        Log.d("WebView", "onReceivedSslError");
        handler.proceed(); // Ignore SSL certificate errors
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        Log.d("WebView", "onPageFinished " + url);
    }
}

这里的问题是我尝试加载链接,但在我的日志中发现只调用了onPageStartedonPageFinished的日志。

这是我的日志:

12-13 17:06:31.760 8694-8694/? D/WebView: onPageStarted :"https://alpha-bill.payco.com/easyLogin/201512132004116802?inAppYn=Y"
12-13 17:06:31.760 8694-8694/? D/WebView: onPageFinished :"https://alpha-bill.payco.com/easyLogin/201512132004116802?inAppYn=Y"
12-13 17:06:31.790 8694-9927/? E/Adreno-ES20: <check_framebuffer_attachment:854>: Invalid texture format! Returning error!
12-13 17:06:31.790 8694-9927/? E/Adreno-ES20: <check_framebuffer_object_status:1237>: Framebuffer color attachment incomplete. Returning GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT!
12-13 17:06:31.800 8694-8694/? W/cr.BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 8694
12-13 17:06:31.810 8694-8694/? W/cr.BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 8694
12-13 17:06:32.180 8694-8795/? E/Adreno-ES20: <check_framebuffer_attachment:854>: Invalid texture format! Returning error!
12-13 17:06:32.180 8694-8795/? E/Adreno-ES20: <check_framebuffer_object_status:1237>: Framebuffer color attachment incomplete. Returning GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT!

我真的不明白为什么即使我访问以https开头的网址也未调用onReceivedSslError方法,根据我的理解,这应该要求证书可以访问。

我是否在实施WebViewClient时做错了什么?或者还有其他方法吗?在此先感谢您的帮助。

P.S。我的目标API是23,最小值是15.

1 个答案:

答案 0 :(得分:2)

来自文档:

  

通知主机应用程序在加载资源时发生SSL错误。

那么为什么在没有错误时调用呢?