iOS flutter混合开发的app中,发现手机开启署理,flutter建议的网络恳求HttpOverrides.global,无法经过署理抓包。

手机署理是经过系统的网络连接直接设置,连接装备没有错误(没有运用三方的署理app)。

flutter 网络恳求要害代码设置如下:

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

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装置后首次发动有一个弹窗

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

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

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

修改为答应拜访本地网络后,能够抓包了。而且后续经过修改这个开关设置,能够实时修改flutter网络恳求是否经过charels署理。

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

NSLocalNetworkUsageDescription 运用场景

回顾一下,iOS 什么时分需求用到 NSLocalNetworkUsageDescription

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

能够发现这个是iOS14新增加的权限字段。

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

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

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

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

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

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

那么分别来阐明: NSBonjourServices 这个是 用来给flutter开发过程中, 在app运用flutter 的 attach 时,flutter 的attach需求用到这个才能 经过dns发现装置了flutter 程序的app,才能够 attach 到flutter app。

NSLocalNetworkUsageDescription 这个字段 flutte官方网页上没有注明,只是说需求增加。 那么经过本次问题发现,其实这个便是 flutter网络恳求能否运用署理的一个要害装备。

综上便是这次 iOS端 Flutter App设置HttpOverrides.global无法用charels抓包问题的解决办法,而且阐明晰NSLocalNetworkUsageDescription字段的作用。