文章目录
- 一、网络权限配置
-
- [1、Android 网络权限配置](#1、Android 网络权限配置)
- [2、iOS 网络权限配置](#2、iOS 网络权限配置)
- [二、HTTP 明文传输配置](#二、HTTP 明文传输配置)
-
- [1、Android 开启 HTTP 明文传输](#1、Android 开启 HTTP 明文传输)
-
- [方案一 : 简洁配置 全局放行所有 http 仅开发调试 不建议生产环境使用](#方案一 : 简洁配置 全局放行所有 http 仅开发调试 不建议生产环境使用)
- [方案二 : 规范方案 精准配置域名 生产环境推荐](#方案二 : 规范方案 精准配置域名 生产环境推荐)
- [2、iOS 开启 HTTP 明文传输](#2、iOS 开启 HTTP 明文传输)
-
- [方案一 : 简洁配置 全局放开所有 HTTP 调试使用 上架会被拒](#方案一 : 简洁配置 全局放开所有 HTTP 调试使用 上架会被拒)
- [方案二 : 指定域名放行 HTTP 生产环境使用 上架会通过](#方案二 : 指定域名放行 HTTP 生产环境使用 上架会通过)
- 三、应用名称配置
-
- [1、Android 配置应用名称](#1、Android 配置应用名称)
- [2、iOS 配置应用名称](#2、iOS 配置应用名称)
参考文档 :
- Flutter 官方文档 : https://docs.flutter.dev/install/quick
- 使用出现网络问题 , 参考 在中国网络环境下使用 Flutter 文档 ;

一、网络权限配置
Android 必须加 INTERNET 权限,建议开启 HTTP 明文 ;
iOS 必须加 NSAppTransportSecurity 允许联网 ;
配置完必执行 flutter clean 再运行 ;
1、Android 网络权限配置
在 Flutter 根目录 的 android/app/src/main/AndroidManifest.xml 文件中 , 在 <manifest> 标签内 添加 网络权限 配置 :
xml
<!-- 联网必备权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 网络状态检测(可选,判断有无网) -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
配置位置示例 :
xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 网络必备权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 可选:获取网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:networkSecurityConfig="@xml/network_security_config"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
</application>
</manifest>
配置位置 参考下图 :

2、iOS 网络权限配置
在 Flutter 根目录 的 ios/Runner/Info.plist 文件中 , 在 <dict> 标签下 , 添加网络权限配置 :
改配置 允许 HTTP 明文传输 , 如下配置 上架 AppStore 会被拒 ;
xml
<key>NSAppTransportSecurity</key>
<dict>
<!-- 允许 HTTP 请求 -->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
配置位置示例 :
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- 网络权限配置 -->
<key>NSAppTransportSecurity</key>
<dict>
<!-- 允许 HTTP 请求 -->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</dict>
</plist>
配置位置参考下图 :

二、HTTP 明文传输配置
1、Android 开启 HTTP 明文传输
方案一 : 简洁配置 全局放行所有 http 仅开发调试 不建议生产环境使用
在 Flutter 根目录 的 android/app/src/main/AndroidManifest.xml 文件中 , 为 <application> 标签 添加属性 配置 :
xml
<application
android:usesCleartextTraffic="true"
...>
配置位置示例 :
xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:usesCleartextTraffic="true">
</application>
</manifest>
配置位置 参考下图 :

方案二 : 规范方案 精准配置域名 生产环境推荐
创建 android/app/src/main/res/xml/network_security_config.xml 配置文件 , 进行如下配置 :
xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<!-- 只放行指定域名http(生产推荐,替换为自己域名) -->
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">192.168.1.100</domain>
<domain includeSubdomains="true">xxx.test.com</domain>
</domain-config>
</network-security-config>
下面的 XML 配置文件中 , 只需要配置下面这一个即可 , 仅做参考 :
<base-config cleartextTrafficPermitted="true">是 全局允许所有 HTTP 请求 ;<domain-config cleartextTrafficPermitted="true">是 放行指定的 HTTP 请求 ;
xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<!-- 全局允许所有明文HTTP(调试) 仅做参考 -->
<base-config cleartextTrafficPermitted="false">
<trust-anchors>
<certificates src="system"/>
<certificates src="user"/>
</trust-anchors>
</base-config>
<!-- 只放行指定域名http(生产推荐,替换为自己域名) -->
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">192.168.1.100</domain>
<domain includeSubdomains="true">xxx.test.com</domain>
</domain-config>
</network-security-config>
创建配置文件 :

在 android/app/src/main/AndroidManifest.xml 文件中 配置 :
xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:networkSecurityConfig="@xml/network_security_config">
</application>
</manifest>
2、iOS 开启 HTTP 明文传输
方案一 : 简洁配置 全局放开所有 HTTP 调试使用 上架会被拒
在 Flutter 根目录 的 ios/Runner/Info.plist 文件中 , 在 <dict> 标签下 , 添加如下配置 :
xml
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<!-- WebView单独放行http图片/资源 -->
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>
方案二 : 指定域名放行 HTTP 生产环境使用 上架会通过
在 Flutter 根目录 的 ios/Runner/Info.plist 文件中 , 在 <dict> 标签下 , 添加如下配置 :
xml
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<!-- 放行单个域名http,子域名一并生效 -->
<key>192.168.1.100</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
<key>xxx.test.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
可以在 Xcode 可视化配置 , 打开ios/Runner.xcworkspace→Runner→Info→Add Row→App Transport Security Settings , 按需添加子项 ;
三、应用名称配置
1、Android 配置应用名称
在 Flutter 根目录 的 android/app/src/main/AndroidManifest.xml 文件中 , 在 <application> 标签内 修改 android:label 属性配置 :
xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:label="应用名称">
</application>
</manifest>

2、iOS 配置应用名称
在 Flutter 根目录 的 ios/Runner/Info.plist 文件中 , 在 <dict> 标签下 , 修改 CFBundleDisplayName 配置 :
dart
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDisplayName</key>
<string>应用名称</string>
</dict>
</plist>
