webview_flutter:iOS无法打开HTTP地址的简单解决方案
2023-02-05 03:29:31
使用 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 请求或代理服务器。