You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

持久化用户忽略SSL错误的选择(提示后)

持久化用户忽略SSL错误的选择(提示后)

当然可以!你想用SharedPreferences来保存用户对特定URL的SSL错误选择,这个思路完全没问题,而且很符合Google Play的要求——毕竟是用户主动做出的选择,不是程序默认忽略SSL风险,不会触发审核问题。

具体实现步骤

  • 第一步:确定存储规则
    用SharedPreferences存键值对,键可以选两种方式:

    • 完整URL:精确匹配,只有完全相同的URL才会复用之前的选择
    • 域名(主机名):比如提取Uri.parse(url).getHost()作为键,这样同一个域名下的所有子页面都会共用用户的信任选择,适合用户信任整个网站的场景
      根据你的业务需求选就好,推荐如果没有特殊需求,用域名更符合用户直觉。
  • 第二步:处理用户选择并存储
    当弹出对话框让用户做选择时,把结果写入SharedPreferences:

    // 点击"继续访问"时
    SharedPreferences sslPrefs = getSharedPreferences("SslTrustRecords", MODE_PRIVATE);
    // 这里用域名作为键,你也可以换成完整URL
    String trustKey = Uri.parse(view.getUrl()).getHost();
    sslPrefs.edit().putBoolean(trustKey, true).apply();
    handler.proceed();
    
    // 点击"取消"时
    sslPrefs.edit().putBoolean(trustKey, false).apply();
    handler.cancel();
    
  • 第三步:在SSL错误回调中优先读取存储的选择
    每次触发onReceivedSslError时,先检查有没有已保存的记录,再决定自动处理还是弹窗:

    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        String currentUrl = view.getUrl();
        String trustKey = Uri.parse(currentUrl).getHost(); // 用域名作为匹配键
        SharedPreferences sslPrefs = getSharedPreferences("SslTrustRecords", MODE_PRIVATE);
    
        if (sslPrefs.contains(trustKey)) {
            boolean isTrusted = sslPrefs.getBoolean(trustKey, false);
            if (isTrusted) {
                handler.proceed(); // 用户之前同意过,直接继续
            } else {
                handler.cancel(); // 用户之前拒绝过,直接取消
            }
        } else {
            // 没有记录,弹出对话框让用户选择
            new AlertDialog.Builder(context)
                .setTitle("SSL证书验证异常")
                .setMessage("此网站的安全证书未被系统信任,是否继续访问?")
                .setPositiveButton("继续", (dialog, which) -> {
                    sslPrefs.edit().putBoolean(trustKey, true).apply();
                    handler.proceed();
                })
                .setNegativeButton("取消", (dialog, which) -> {
                    sslPrefs.edit().putBoolean(trustKey, false).apply();
                    handler.cancel();
                })
                .setCancelable(false)
                .show();
        }
    }
    

关键注意事项

  • 合规性第一:绝对不能省略用户确认环节直接自动允许SSL错误,必须先弹窗让用户明确选择,保存选择只是优化后续体验,这一点是Google Play审核的红线。
  • 给用户管理权限:建议在应用设置里加一个“清除信任的SSL记录”的选项,让用户能随时重置之前的选择,既贴心也更安全。
  • SharedPreferences权限:一定要用MODE_PRIVATE模式存储,避免其他应用读取或修改这些信任记录,保证数据安全。

备注:内容来源于stack exchange,提问作者Mohamed AbdulRaouf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 08:59:36