WebViewClient.OnReceivedSlerror处理程序的Android不安全实现
我们正在使用WebView在我们的应用程序中加载paytm支付页面。在这个过程中,我们遇到了Ssl证书错误。为了处理这个问题,我们在代码中添加了SslErrorHandler.procedure()。一切正常。我尝试将此apk发布到商店,但应用程序被拒绝 WebViewClient.OnReceivedSlerror处理程序的不安全实现 这是我的密码WebViewClient.OnReceivedSlerror处理程序的Android不安全实现,android,webview,paytm,Android,Webview,Paytm,我们正在使用WebView在我们的应用程序中加载paytm支付页面。在这个过程中,我们遇到了Ssl证书错误。为了处理这个问题,我们在代码中添加了SslErrorHandler.procedure()。一切正常。我尝试将此apk发布到商店,但应用程序被拒绝 WebViewClient.OnReceivedSlerror处理程序的不安全实现 这是我的密码 fcweb.getSettings().setJavaScriptEnabled(true); fcweb.getSettings
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");
}
});
注意:我不想显示任何有关错误的警报对话框。
我应该怎么做才能解决这个问题呢?并不总是强制处理程序。继续();但是您还必须包括handler.cancel();因此,用户可以避免加载不安全的内容。 若要正确处理SSL证书验证,请更改代码以在服务器提供的证书满足您的期望时调用SslErrorHandler.continue(),否则调用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();
}
可能重复@ShubhamShukla感谢您的回复。我看到了这个链接,但是显示一个警告对话框会产生不良影响。如果用户看到此类警告,他们将不会继续。但这是必要的,这样您就不会让用户面临各种风险。显示此类警告将对用户体验造成不良影响。如果用户看到安全错误之类的警报,他们可能不会继续。查看我对问题的评论我认为这不是一个好主意,但它会在发布应用程序时解决警告吗?@SureshKumar yes Sir如果我使用sslerror.getCertificate().getIssuedTo().getCName()检查此项,它会接受吗?如果此名称等于某个特定的名称处理程序。继续()或其他处理程序。取消()。