我们正在使用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");
}
});
注意:我不想显示有关错误的任何警告对话框。 我该怎么做才能解决这个问题?
答案 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();
}