Android不安全的WebViewClient.onReceivedSslError处理程序实现

时间:2017-01-20 11:17:45

标签: android webview paytm

我们正在使用WebView在我们的应用中加载paytm付款页面。在此过程中,我们遇到了Ssl证书错误。为了解决这个问题,我们在代码中添加了SslErrorHandler.proceed()。一切都很好。我尝试将此apk发布到商店,但应用程序被拒绝提及

  

WebViewClient.onReceivedSslError处理程序的不安全实现

这是我的代码

    fcweb.getSettings().setJavaScriptEnabled(true);
    fcweb.getSettings().setDomStorageEnabled(true);
    fcweb.setLongClickable(false);
    fcweb.setHapticFeedbackEnabled(false);
    CookieManager.getInstance().setAcceptCookie(true);
    fcweb.setWebViewClient(new WebViewClient(){

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

        }

    });

注意:我不想显示有关错误的任何警告对话框。 我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

并非始终强制执行handler.proceed();但你还必须包括handler.cancel();这样用户可以避免加载不安全的内容。

要正确处理SSL证书验证,只要服务器提供的证书符合您的期望,就更改您的代码以调用SslErrorHandler.proceed(),否则调用SslErrorHandler.cancel()。

    @Override 
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(R.string.notification_error_ssl_cert_invalid);
    builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
        @Override 
        public void onClick(DialogInterface dialog, int which) {
            handler.proceed();
        } 
    }); 
    builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
        @Override 
        public void onClick(DialogInterface dialog, int which) {
            handler.cancel();
        } 
    }); 
    final AlertDialog dialog = builder.create();
    dialog.show();
}