如何在Flutter的webview_flutter中启用Android端HTTP站点访问
在Flutter WebView中允许Android加载HTTP站点的解决方案
问题场景
使用webview_flutter包开发Flutter应用时,iOS端已通过info.plist配置允许加载HTTP站点,但Android端配置了网络安全文件和Manifest参数后仍无法正常加载非HTTPS站点。
解决步骤
1. 确认网络安全配置文件的正确性
首先确保network_security_config.xml文件路径为android/app/src/main/res/xml/network_security_config.xml,若xml文件夹不存在需手动创建。
你可以选择全局允许所有明文流量(适合测试场景):
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> </network-security-config>
或者仅针对特定HTTP站点允许(更安全,推荐生产环境使用):
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">你的HTTP站点域名</domain> </domain-config> </network-security-config>
2. 检查AndroidManifest.xml配置
确保application标签中同时包含以下两个配置:
android:usesCleartextTraffic="true":直接允许明文流量android:networkSecurityConfig="@xml/network_security_config":引用上述网络安全配置文件
同时确认已添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
完整的application标签示例:
<application android:name="${applicationName}" android:icon="@mipmap/ic_launcher" android:label="webview_demo" android:networkSecurityConfig="@xml/network_security_config" android:usesCleartextTraffic="true">
3. 验证WebViewController配置
确保你的WebViewController没有拦截HTTP请求,当前代码中的onNavigationRequest逻辑已允许所有请求,无需修改。如果后续遇到自签名HTTPS站点的问题,可额外添加证书信任逻辑,但针对HTTP站点无需此操作。
4. 清理缓存并重新编译
配置修改后,执行以下命令清理项目缓存并重新运行,确保新配置生效:
flutter clean flutter run
注意事项
- Android 9(API 28)及以上系统默认禁止明文HTTP流量,必须通过上述配置解除限制
- 生产环境建议仅针对必要的HTTP站点配置允许,避免全局开放明文流量带来的安全风险
内容的提问来源于stack exchange,提问作者Areeba Jawed
相关产品推荐
相关产品推荐

