Flutter中usesClearTextTraffic配置未生效 仍报不允许不安全HTTP错误
Flutter 明文HTTP访问报错的落地排查解决步骤
- 彻底清除旧构建缓存,从根源避免配置不生效
修改原生层的Android/iOS配置后,热重载、热重启完全无法触发生效逻辑,必须走全量打包流程:先把设备上安装的旧App彻底卸载,在项目根目录执行flutter clean删除所有历史构建缓存,再重新执行flutter run启动项目。80%的配置失效问题,都是改完配置没重新打包,跑的还是之前没开明文权限的旧安装包
- 精简网络安全配置,去掉冗余标签
你当前写的network_security_config.xml绑定了多余的系统证书信任锚,纯本地IP调试PHP接口的场景根本用不到这部分,冗余标签反而容易导致配置解析失败,直接精简为以下内容即可:
核对两个容易出错的细节:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>- 确认
network_security_config.xml的实际存放路径是android/app/src/main/res/xml/,和AndroidManifest里引用的@xml/network_security_config路径完全匹配,没有拼写错误 - 逐字核对属性大小写:
cleartextTrafficPermitted不要误写为驼峰形式的clearTextTrafficPermitted,这类拼写错误是最容易出现但很难被发现的问题
- 确认
- 规避AndroidManifest的配置合并冲突
当你同时在application节点写了android:usesCleartextTraffic="true"和android:networkSecurityConfig时,Android 9及以上系统会优先读取网络安全配置文件的规则。你当前在debug目录下的AndroidManifest配置和main目录的配置不一致,建议把debug目录下的application节点补全相同的明文允许配置,避免构建时配置合并的优先级冲突,导致自定义的规则被系统默认规则覆盖。 - 补全iOS端的对应配置
如果你在iOS设备或模拟器上运行项目,只配置Android端的规则完全不生效,需要修改ios/Runner/Info.plist,添加ATS规则放开明文流量限制:
改完同样需要重新打包运行,热重载不会更新原生层的plist配置。<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> - 代码层校验Uri解析正确性
确认你替换URL_PREFIX的实际IP值时,没有混入多余空格、转义字符,也没有漏掉开头的http://前缀,比如避免把http://192.168.3.10/flutter_crud误写成192.168.3.10/flutter_crud,这类解析异常也会触发平台的安全校验拦截。
注意:以上配置仅适用于开发阶段本地调试PHP接口的场景,正式上线的项目必须使用HTTPS协议,不要长期开启全局明文流量权限。
内容的提问来源于stack exchange,提问作者Jacob Collins
相关产品推荐
相关产品推荐

