2

我们正在使用 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");

        }

    });

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

4

1 回答 1

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();
}
于 2017-01-20T11:22:13.050 回答