【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>
相关推荐
_李小白1 小时前
【android opencv学习笔记】Day 31:提取轮廓之Canny算法
android·opencv·学习
tangweiguo030519871 小时前
Flutter中的StreamController完全指南
flutter
梁辰兴2 小时前
计算机网络基础:动态主机配置协议 DHCP
网络·计算机网络·dhcp·计算机网络基础·动态主机配置协议·梁辰兴
Dream_ksw2 小时前
借助AI再次理解三次握手和四次挥手
服务器·网络·tcp/ip
hashiqimiya2 小时前
每日android布局xml文件
android·xml·gitee
m0_738120723 小时前
渗透测试基础——PHP 序列化数据结构与反序列化机制详解
android·服务器·网络·数据结构·安全·php
myenjoy_13 小时前
采集网关的离线缓存与断点续传——当网络不可靠时,数据一条都不能丢
网络·缓存
超级无敌zhq3 小时前
内网横向移动实战:从单点攻破到域控沦陷
网络·安全·web安全·网络安全