【问题标题】:Xamarin.Forms android WebView blank for no valid SSL certificate (develop environment)Xamarin.Forms android WebView 空白,没有有效的 SSL 证书(开发环境)
【发布时间】:2023-04-02 21:37:01
【问题描述】:

在我的本地 PC 开发环境中,我有一个 dotnetcore 2.2 项目在端口 5000 作为 https 和 5001 作为 http 运行。我需要在我的开发环境中使用 https。 在我的电脑上,我可以通过https://localhost:5000/ 输入而不会出现任何错误(VS 安装本地 SSL 证书)。使用我的 PC IP https://192.168.0.2:5000 浏览器启动 SSL 证书错误(SSL 证书适用于 localhost)。 我正在为 Android(9.0API 级别 28)和 iOS 开发 Xamarin.Forms 4.5.0.396,并且我正在使用标准 WebView 控件。

在 Android 中,当我导航 (webView.Source) 到 http://192.168.0.2:5001 时,它可以工作,但是当我尝试 https://192.168.0.2:5000 时,webView 保持空白。没有例外,但已启动导航事件。 我尝试了几种方法,例如暴露在:

ClientCertRequestHandler 未知且不知道要引用的程序集

另外,我知道这不是解决方案,但我实现了一个自定义渲染器 (https://docs.microsoft.com/es-es/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview) 来尝试覆盖 SSL 验证方法,但它不起作用。

有什么建议吗?

【问题讨论】:

  • 请验证您的192.168.0.2:5000 是否在您本地网络中的浏览器上工作。要验证您的 Android 网络视图是否设置正确,请使用任何已知的 https 网址,例如 gmail.comstackoverflow.com,并查看它是否适用于您的网络视图。这不是一个解决方案,但它会帮助你找到罪魁祸首。
  • 我用 https://stackoverflow.com/ 进行了测试并且可以工作。我在 Android 浏览器 https://192.168.0.2:5000 中测试,浏览器显示 SLL 错误。在 WebView 中,屏幕保持空白,不显示 SSL 错误,并且正常触发 Navigated 事件。
  • 你能判断相同的网址是否适用于 chrome 或 Android 设备中的任何其他浏览器吗?
  • 正如我告诉@Piyush 在他的回答中我测试过的那样;“我用 https://stackoverflow.com/ 测试过并且可以工作。我在 Android 浏览器中测试过 https://192.168.0.2:5000 和浏览器显示 SLL 错误。在 WebView 中,屏幕保持空白,不显示 SSL 错误,并且正常触发 Navigated 事件。"

标签: android ssl xamarin.forms webview


【解决方案1】:

解决方案是覆盖 JavaScript WebClient 类的 OnReceivedSslError 方法,如下所示:

    public class JavascriptWebViewClient : WebViewClient
{
    string _javascript;

    public JavascriptWebViewClient(string javascript)
    {
        _javascript = javascript;
    }

    public override void OnReceivedSslError(Android.Webkit.WebView view, SslErrorHandler handler, Android.Net.Http.SslError error)
    {
        //base.OnReceivedSslError(view, handler, error);
        handler.Proceed();
    }

    public override void OnPageFinished(Android.Webkit.WebView view, string url)
    {
        base.OnPageFinished(view, url);
        view.EvaluateJavascript(_javascript, null);
    }
}

问题是添加 OnReceivedSllError 我有两个 MAX_PATH 错误... 不知道为什么,但重建或清理解决方案不起作用。

我多次清理了解决方案,将其移至最接近根文件夹的位置。 Clean and Rebuild without run, then run 对我有用,但此方法没有断点停止。

这在 Xamarin.Forms 4.5.0.396 上确实是一种非常奇怪的行为,但在更新到 Xamarin.Forms 4.5.0.495 后它可以工作并在断点处停止

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2014-04-02
    相关资源
    最近更新 更多