我们目前有一个为在线订购实用程序创建的 Angular Web 应用程序。 但我们想用它创建一个本机应用程序,并且我们想使用 Flutter。
首先,我们只是想使用 Web 视图来显示现有的 Angular 应用程序。
问题是,我们想这样做是因为我们还想摆脱通过手机访问应用程序时对 SSL 证书的需要。
webview还需要SSL证书吗?
我想这是因为它仍然像访问网页一样,但我想确定一下。
webview_flutter
插件没有任何忽略 SSL 错误的选项。
相反,使用我的 flutter_inappwebview 插件,可以非常简单地忽略 SSL 错误,就像您通常在 Android 上所做的那样,即使用 onReceivedServerTrustAuthRequest
事件并针对指定请求或所有请求返回 ServerTrustAuthResponse(action: ServerTrustAuthResponseAction.PROCEED);
。
5.0.5+3
和 https://badssl.com/ 的简单示例(这是一个用于针对不良 SSL 配置测试客户端的网站,请参阅 https://github.com/chromium/badssl .com)是:
child: InAppWebView(
initialUrlRequest: URLRequest(
url: Uri.parse("https://self-signed.badssl.com/")
),
onReceivedServerTrustAuthRequest: (controller, challenge) async {
print(challenge);
return ServerTrustAuthResponse(action: ServerTrustAuthResponseAction.PROCEED);
},
),
其中
challenge
参数提供了有关挑战的所有信息,例如主机、协议、领域等。
此外,在 Android 上,当您返回要采取的操作(
PROCEED
或 CANCEL
)时,此决定由 Android 本身保存,因此下次您访问同一 URL 时,onReceivedServerTrustAuthRequest
事件将获胜。不会被触发。
在这种情况下,您可以使用 controller.android.clearSslPreferences()
方法清除 Android SSL 首选项。
webview_flutter 包没有禁用 SSL 检查和忽略 SSL 错误的选项。这是一个官方的 Flutter 插件,他们不想提供与 https 建立不可信连接的能力。这是 github 上的相关issue。
但是,您可以使用提供此类功能的非官方 webview 插件。例如。 flutter_webview_plugin:
final flutterWebviewPlugin = new FlutterWebviewPlugin();
flutterWebviewPlugin.launch(
'your-url.com',
ignoreSSLErrors: true,
);
默认情况下,在 webview_flutter 中没有绕过/忽略/继续没有 SSL 的选项,并且 flutter_webview_plugin 几乎已被弃用,并且在过去 2 年里没有更新,直到这个答案。 但webview_flutter中有一个解决方案。
建议仅在应用程序中使用 HTTPS 调用。 iOS 9.0 中引入了传输安全性,默认情况下仅允许来自应用程序的 HTTPS 调用。
但是,如果您仍然想允许所有非 https 调用,请在 Info.plist 中添加 NSAppTransportSecurity(字典),并添加一个名为 NSAllowsArbitraryLoads 且布尔值为 YES 的子项。更新后,plist 应该是这样的
方法1:在info.plist文件的源代码中我们可以添加:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
方法2:或者你可以在Xcode中进行