【Flutter】Flutter 中的 Android / iOS 特殊配置 ① ( 网络权限配置 | HTTP 明文传输配置 | 应用名称配置 )

文章目录

  • 一、网络权限配置
    • [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 配置应用名称)

参考文档 :

一、网络权限配置


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>
相关推荐
Johny_Zhao7 小时前
FreeRADIUS + 华为AC/AP + 802.1X/WPA2-Enterprise 无线认证对接部署完整指南
网络·网络安全·信息安全·ldap·radius·huawei·系统运维·centos8
警醒与鞭策7 小时前
【无标题】
android·unity·性能优化·游戏引擎·perforce
天远API8 小时前
零信任架构实战:基于天远人企关联构建自动化图谱网关
网络·人工智能·架构·自动化
传奇开心果编程8 小时前
【SwiftUI娓娓道来】第3课:让界面活起来——交互与动画指南
学习·macos·ui·ios·swiftui·swift
可乐鸡翅yeah_9 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
传奇开心果编程9 小时前
【Jetpack Compose进阶学与练】第14课:系列收尾复习总结;Compose项目常见坑点汇总;学习路线与后续学习方向
android·学习·ui·kotlin·android jetpack
vipjx19 小时前
百度网盘限速怎么破?2026实测PanDownload多线程提速方案
网络·智能路由器
码匠许师傅11 小时前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http
不会就选b11 小时前
Linux之应用层协议HTTP(二)
网络·网络协议·http
hasty11 小时前
只监听本机为何仍需鉴权?Cline Hub 的 WebSocket 信任边界解析
网络·websocket·网络协议