Android 应用程序未通过 SSL 错误处理程序获得批准

问题描述

我上个月发布了一个正式版 Android 应用,但我在使用 SSL 错误处理程序时遇到了问题。

我遵循了 Stackoverfollow 和 Google 的教程,但是 Google 仍然没有批准我的应用(注意:这个 QA 不是重复的)。

  1. https://support.google.com/faqs/answer/7071387
  2. SSL Error Handler WebView Android

我的代码实现如下:

任何使用 WebViewClient 的 Fragment 或 Activity,我都像这样控制了 SSL 错误

    public void onReceivedSslError(WebView view,SslErrorHandler handler,SslError error) {
            LogI("onReceivedSslError: " + error.getCertificate());
            AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
            AlertDialog alertDialog = builder.create();
            String message;
            switch (error.getPrimaryError()) {
                case SslError.SSL_UNTRUSTED:
                    message = "The certificate authority is not trusted.";
                    break;
                case SslError.SSL_EXPIRED:
                    message = "The certificate has expired.";
                    break;
                case SslError.SSL_IDMISMATCH:
                    message = "The certificate Hostname mismatch.";
                    break;
                case SslError.SSL_NOTYETVALID:
                    message = "The certificate is not yet valid.";
                    break;
                case SslError.SSL_DATE_INVALID:
                    message = "The date of the certificate is invalid.";
                    break;
                default:
                    message = "A generic error occurred.";
                    break;
            }
            message += " Do you want to continue anyway?";
            alertDialog.setTitle("SSL Certificate Error");
            alertDialog.setMessage(message);
            alertDialog.setButton(DialogInterface.BUTTON_POSITIVE,"OK",(dialog,which) -> handler.proceed());
            alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE,"Cancel",which) -> handler.cancel());
            alertDialog.show();
        }

那么,为什么我的应用未获批准?接下来我该怎么办?

感谢您的建议!

更新 1: 我在 2019 年发布了我的应用程序并更新了很多次(没有问题)。但是从 2021/5 开始,我遇到了这个问题。

解决方法

这些错误可能来自旧的 APK、AAB 版本,请在提交新的 APK、AAB 之前将其删除/停用

,

您必须直接在 handler.cancel(); 内调用 super.onReceivedSslError(view,handler,error);(针对您的情况)或 onReceivedSslErrorHERE 你有一些文档,其中:

宿主应用程序必须调用 SslErrorHandler#cancel 或 SslErrorHandler#proceed

还有

此方法的应用程序覆盖可能会显示自定义错误页面或静默记录问题,但强烈建议始终调用 SslErrorHandler#cancel 并且永远不允许处理过去的错误。

如果没有任何这些调用,一些检查应用程序的 Google 机器人可能会认为您完全禁用了任何 SSL 验证,这对用户来说可能不安全

,

这是我在我的应用程序中使用的代码,它被接受了。我看到的唯一区别是 try-catch 块。我的建议是先在 Play Store 上尝试一个更简单的版本,然后使用特定类型的错误消息进行更新。

@Override
public void onReceivedSslError(WebView view,SslErrorHandler handler,SslError error) {
    try{
        final AlertDialog.Builder builder = new AlertDialog.Builder(PaymentActivity.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",int which) {
                handler.cancel();
            }
        });
        final AlertDialog dialog = builder.create();
        dialog.show();
    }catch (Exception e){
        e.printStackTrace();
    }
}