返回

webview_flutter:iOS无法打开HTTP地址的简单解决方案

Android

使用 iOS 上的 Webview_Flutter 时解决 HTTP 请求加载问题

在 iOS 设备上开发移动应用程序时,您可能会遇到使用 webview_flutter 加载 HTTP 请求时遇到的错误。这个错误通常看起来像这样:

[ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: PlatformException(load_http_https, Failed to load http://www.example.com/, URL must be either http://, https:// or file://., null)

这个错误表明您的应用程序尝试加载一个不安全的 HTTP 请求,但 iOS 安全机制阻止了它。要解决此问题,您需要对 iOS 设备进行一些配置,允许您的应用程序加载不安全的 HTTP 请求。

解决方案

解决此问题的步骤如下:

1. 在 Xcode 中打开您的项目

在 Mac 上启动 Xcode 并打开包含您的 Flutter 应用程序的项目。

2. 导航到 Info.plist 文件

在 Xcode 项目导航器中,选择您的项目名称。在右侧的“Build Settings”选项卡中,找到“Info.plist File”设置。双击该设置以在文本编辑器中打开 Info.plist 文件。

3. 添加 NSAppTransportSecurity 密钥

在文本编辑器中,找到 <key>NSAppTransportSecurity</key> 行。如果该行不存在,请添加以下代码:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

4. 保存并重新运行您的应用程序

保存 Info.plist 文件并重新运行您的应用程序。现在,您的应用程序应该能够在 iOS 上加载 HTTP 请求。

注意事项

使用 <key>NSAllowsArbitraryLoads</key> 设置可能会降低您的应用程序的安全性。因此,仅在您确实需要加载 HTTP 请求时才使用此设置。

如果您需要在您的应用程序中加载 HTTP 请求,但又不想降低其安全性,则可以使用以下方法之一:

  • 使用 HTTPS 请求。
  • 使用代理服务器。
  • 使用混合内容策略。

常见问题解答

1. 为什么我需要添加 <key>NSAppTransportSecurity</key> 设置?

iOS 设备默认阻止加载不安全的 HTTP 请求。添加 <key>NSAppTransportSecurity</key> 设置可允许您的应用程序加载这些请求。

2. <key>NSAppTransportSecurity</key> 设置是否会降低我的应用程序的安全性?

是的,使用 <key>NSAppTransportSecurity</key> 设置可能会降低您的应用程序的安全性。仅在您确实需要加载 HTTP 请求时才使用此设置。

3. 如何使用 HTTPS 请求代替 HTTP 请求?

要使用 HTTPS 请求,请将您的 URL 从 http:// 更改为 https://。确保您的服务器配置为支持 HTTPS。

4. 如何使用代理服务器?

要使用代理服务器,请在您的 Flutter 应用程序中配置 Proxy 对象。有关详细信息,请参阅 Flutter 文档。

5. 如何使用混合内容策略?

要使用混合内容策略,请在您的服务器上配置 Content-Security-Policy 标头。有关详细信息,请参阅 MDN 文档。

结论

通过对 iOS 设备进行一些简单的配置,您可以解决使用 webview_flutter 加载 HTTP 请求时遇到的问题。但是,请记住,在这样做时要考虑安全性影响。如果您需要在应用程序中加载 HTTP 请求,但又不想降低其安全性,则可以使用其他方法,例如 HTTPS 请求或代理服务器。