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装置后首次发动有一个弹窗
弹窗弹出逻辑 经过测验发现,这个弹窗的弹出,是在新装置,之前没有弹出过 弹出是 手机设置了署理的情况下,因为当时项目用了自定义HttpOverrides子类实现 findProxyFromEnvironment办法,在达到了用本地网络条件的时分才会弹出一次弹窗。
修改为答应拜访本地网络后,能够抓包了。而且后续经过修改这个开关设置,能够实时修改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,并设置为你自定义的权限提示对话框文本。
那么分别来阐明: NSBonjourServices 这个是 用来给flutter开发过程中, 在app运用flutter 的 attach 时,flutter 的attach需求用到这个才能 经过dns发现装置了flutter 程序的app,才能够 attach 到flutter app。
NSLocalNetworkUsageDescription 这个字段 flutte官方网页上没有注明,只是说需求增加。 那么经过本次问题发现,其实这个便是 flutter网络恳求能否运用署理的一个要害装备。
综上便是这次 iOS端 Flutter App设置HttpOverrides.global无法用charels抓包问题的解决办法,而且阐明晰NSLocalNetworkUsageDescription字段的作用。