Android 应用未经 SSL 错误处理程序批准
Android App is not approved with SSL Error Handler
我上个月发布了一个生产 Android 应用程序,但我在使用 SSL 错误处理程序时遇到了问题。
我遵循了 Stackoverfollow 和 Google 的教程,但是 Google 仍然没有批准我的应用程序(注意:此 QA 不是重复的)。
- https://support.google.com/faqs/answer/7071387
- SSL Error Handler WebView Android
我的代码实现如下:
使用 WebViewClient 的任何片段或 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", (dialog, which) -> handler.cancel());
alertDialog.show();
}
那么,为什么我的应用未获批准?接下来我该做什么?
感谢您的指教!
更新 1:
我在 2019 年发布了我的应用程序并更新了很多次(没有问题)。但是从2021/5开始我遇到了这个问题。
您必须直接在 onReceivedSslError
中调用 handler.cancel();
(适合您的情况)或 super.onReceivedSslError(view, handler, error);
。 HERE 你有一些文档,其中:
The host application must call either SslErrorHandler#cancel or SslErrorHandler#proceed
还有
Application overrides of this method may display custom error pages or silently log issues, but it is strongly recommended to always call SslErrorHandler#cancel and never allow proceeding past errors.
如果没有这些调用,某些检查应用程序的 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", 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();
}
}
这些错误可能来自旧的 APKs、AABs 版本,remove/deactivate 在提交新的 APKs、AABs 之前
我上个月发布了一个生产 Android 应用程序,但我在使用 SSL 错误处理程序时遇到了问题。
我遵循了 Stackoverfollow 和 Google 的教程,但是 Google 仍然没有批准我的应用程序(注意:此 QA 不是重复的)。
- https://support.google.com/faqs/answer/7071387
- SSL Error Handler WebView Android
我的代码实现如下:
使用 WebViewClient 的任何片段或 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", (dialog, which) -> handler.cancel());
alertDialog.show();
}
那么,为什么我的应用未获批准?接下来我该做什么?
感谢您的指教!
更新 1: 我在 2019 年发布了我的应用程序并更新了很多次(没有问题)。但是从2021/5开始我遇到了这个问题。
您必须直接在 onReceivedSslError
中调用 handler.cancel();
(适合您的情况)或 super.onReceivedSslError(view, handler, error);
。 HERE 你有一些文档,其中:
The host application must call either SslErrorHandler#cancel or SslErrorHandler#proceed
还有
Application overrides of this method may display custom error pages or silently log issues, but it is strongly recommended to always call SslErrorHandler#cancel and never allow proceeding past errors.
如果没有这些调用,某些检查应用程序的 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", 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();
}
}
这些错误可能来自旧的 APKs、AABs 版本,remove/deactivate 在提交新的 APKs、AABs 之前