首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android应用程序未通过SSL错误处理程序

Android应用程序未通过SSL错误处理程序
EN

Stack Overflow用户
提问于 2021-07-12 05:07:07
回答 3查看 847关注 0票数 1

上个月,我发布了一个生产Android应用程序,但是我在SSL错误处理程序上遇到了麻烦。

我学习了Stackover追随者的教程和Google的教程,但是Google仍然不批准我的应用程序(注意:这个QA不是复制的)。

  1. https://support.google.com/faqs/answer/7071387
  2. SSL错误处理程序WebView Android

我的代码实现如下:

任何使用WebViewClient的片段或活动,我都像这样控制了SSL错误

代码语言:javascript
运行
复制
    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", (dialog, which) -> handler.cancel());
            alertDialog.show();
        }

那么,为什么我的应用程序不被批准?我接下来该怎么办?

谢谢你的建议!

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-10 03:34:04

这些错误可能来自旧的APKs,AABs版本,在提交新APKs之前删除/停用它。

票数 1
EN

Stack Overflow用户

发布于 2021-07-12 06:49:42

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

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

而且还

此方法的应用程序重写可能会显示自定义错误页或静默日志问题,但强烈建议始终调用SslErrorHandler#cancel,不允许继续过去的错误。

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

票数 0
EN

Stack Overflow用户

发布于 2021-07-12 08:14:57

这是我在应用程序中使用的代码,它被接受了。我所看到的唯一不同就是尝试捕捉块。我的建议是先在Play Store上尝试一个更简单的版本,然后用特定类型的错误消息更新它。

代码语言:javascript
运行
复制
@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", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                handler.cancel();
            }
        });
        final AlertDialog dialog = builder.create();
        dialog.show();
    }catch (Exception e){
        e.printStackTrace();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68342153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档