首页 > 解决方案 > SSL错误阻止网站登录颤动

问题描述

干草,

作为 Xamarin 的替代品,我尝试在颤振中创建具有相同功能的应用程序。但是 webview 插件/包不适用于自签名 ssl 证书。在 Xamarin 中有一种方法可以处理 ssl 错误并且仍然可以加载网站。

当前代码:

  @override
  void initState() {
    super.initState();
    final flutterWebviewPlugin = new FlutterWebviewPlugin();
    flutterWebviewPlugin.onHttpError.skip(1000);
    flutterWebviewPlugin.launch("https url to website", hidden: true,
        allowFileURLs: true,
        appCacheEnabled: true,
        withJavascript: true,
        withLocalStorage: true,
        withZoom: true);

flutterWebviewPlugin.onHttpError.skip(1000);
flutterWebviewPlugin.onStateChanged((state) async)
{
  flutterWebviewPlugin.evalJavascript(
      "document.getElementById(\"name\").innerText = \"username\"");
  flutterWebviewPlugin.evalJavascript(
      "document.getElementById(\"password\").innerText = \"pw\"");
  flutterWebviewPlugin.evalJavascript(
      "document.getElementById(\"loginbutton\").invokeMember(\"click\")");
  var test = flutterWebviewPlugin.evalJavascript(
      "document.getElementById(\"errorbox\").innerText");
};
flutterWebviewPlugin.dispose();
flutterWebviewPlugin.close();

错误:

Failed to validate the certificate chain, error: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

有没有比用 java 和 swift 编写自己的包或自定义 webview 更好的方法?

标签: dartflutter

解决方案


在 Android 上,您可以修改插件。将副本克隆到本地计算机并添加一个额外的覆盖flutter_webview_plugin/android/src/main/java/com/flutter_webview_plugin/BrowserClient.java

public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) 用一个简单的实现覆盖handler.proceed()

假设您的项目在其中,/projects/myproject并且您将插件克隆到/projects/flutter_webview_plugin. 在 中进行更改/projects/flutter_webview_plugin/android/src/.../BrowserClient.java。然后pubspec.yaml使用(替换现有条目flutter_webview_plugin)更新您的项目:

dependencies:
  flutter_webview_plugin:
    path: ../flutter_webview_plugin

推荐阅读