iOS Flutter App设置HttpOverrides.global无法用charels抓包问题

iOS flutter混合开发的app中,发现手机开启代理,flutter发起的网络请求HttpOverrides.global,无法通过代理抓包。

手机代理是通过系统的网络连接直接设置,连接配置没有错误(没有使用三方的代理app)。

flutter 网络请求关键代码设置如下:

在App启动前的初始化网络配置是,首先获取当前开发环境标志,然后获取代理地址, 最后设置HttpOverrides.global,用来达到设置全局配置,即网络连接对象Dio对象的网络代理配置,所有必要无界面流程初始化完成后才进入App主页面。

scala 复制代码
HttpOverrides.global = _HttpOverrides(systemProxy, isProduction: !BasicConfig.getInstance().appIsDebug);


class _HttpOverrides extends HttpOverrides {
  @override
  String findProxyFromEnvironment(Uri url, Map<String, String>? environment) {
    String proxy = PROXY_DIRECT;

    ///生产环境不使用代理
    if (!isProduction && systemProxy?.isNotEmpty == true) {
      proxy = "PROXY $systemProxy;$PROXY_DIRECT";
    }
    return proxy;
  }
}

代码流程也没有错误,那为什么此刻电脑charles 代理软件,没有网络请求走过来呢。

问题解决

通过开发代码flutter 网络相关初始化配置,没有发现问题。初始化顺序,app启动,main主页面加载,请求顺序都是正确的。

想到有一个IOS上的网络弹窗,在新app安装后首次启动有一个弹窗

弹窗弹出逻辑 通过测试发现,这个弹窗的弹出,是在新安装,之前没有弹出过 弹出是 手机设置了代理的情况下,因为当前项目用了自定义HttpOverrides子类实现 findProxyFromEnvironment方法,在达到了用本地网络条件的时候才会弹出一次弹窗。

修改为允许访问本地网络后,可以抓包了。并且后续通过修改这个开关设置,可以实时修改flutter网络请求是否通过charels代理。

整理了一下 app当初为什么添加了 这个字段 NSLocalNetworkUsageDescription。

NSLocalNetworkUsageDescription 使用场景

回顾一下,iOS 什么时候需要用到 NSLocalNetworkUsageDescription

苹果官方文档:developer.apple.com/documentati...

可以发现这个是iOS14新添加的权限字段。

1,在iOS app native启用一个本地http server服务的时候,需要申请这个NSLocalNetworkUsageDescription

比如我们的一个播放器sdk,为了实现边下载边播放,第二次播放从本地播放这个功能时,就APP内部启用了一个本地服务器,来实现节省流量的这一大功能。

2, 在Flutter 的官方文档中,也看到这样一个推荐的配置: flutter.cn/...

在 Info-Debug.plist 中 只 添加 key NSBonjourServices,并将它的值设置为数组 (Array),然后在该数组中添加 _dartobservatory._tcp 字符串 (String)。

可以选择添加 key NSLocalNetworkUsageDescription,并设置为你自定义的权限提示对话框文本。

那么分别来说明: NSBonjourServices 这个是 用来给flutter开发过程中, 在app使用flutter 的 attach 时,flutter 的attach需要用到这个才能 通过dns发现安装了flutter 程序的app,才可以 attach 到flutter app。

NSLocalNetworkUsageDescription 这个字段 flutte官方网页上没有注明,只是说需要添加。 那么通过本次问题发现,其实这个就是 flutter网络请求能否使用代理的一个关键配置。

综上就是这次 iOS端 Flutter App设置HttpOverrides.global无法用charels抓包问题的解决方法,并且说明了NSLocalNetworkUsageDescription字段的作用。

相关推荐
HarderCoder7 小时前
iOS 知识积累第一弹:从 struct 到 APP 生命周期的全景复盘
ios
孤鸿玉12 小时前
Fluter InteractiveViewer 与ScrollView滑动冲突问题解决
flutter
叽哥18 小时前
Flutter Riverpod上手指南
android·flutter·ios
BG1 天前
Flutter 简仿Excel表格组件介绍
flutter
zhangmeng2 天前
FlutterBoost在iOS26真机运行崩溃问题
flutter·app·swift
恋猫de小郭2 天前
对于普通程序员来说 AI 是什么?AI 究竟用的是什么?
前端·flutter·ai编程
卡尔特斯2 天前
Flutter A GlobalKey was used multipletimes inside one widget'schild list.The ...
flutter
w_y_fan2 天前
Flutter 滚动组件总结
前端·flutter
醉过才知酒浓2 天前
Flutter Getx 的页面传参
flutter
用户092 天前
SwiftUI Charts 函数绘图完全指南
ios·swiftui·swift