Flutter跨iOS、Android端通过应用修改设置DNS的相关问题咨询
Flutter双端DNS设置修改实现说明
首先明确结论:不存在可以直接调用就能修改系统全局DNS设置的第三方Flutter通用包,iOS和Android系统本身对全局DNS配置的修改做了严格的权限限制,普通应用默认没有权限直接修改系统级DNS配置。
你可以根据你的实际需求选择对应的实现方案:
仅修改应用内部网络请求的DNS
该场景不需要申请系统特殊权限,可直接通过第三方包实现,适配双端:
- 可以使用
flutter_dns包,自定义指定DNS服务器,仅对应用内的网络请求生效,不会修改系统全局配置 - 如果你使用Dio作为网络请求库,可以直接自定义Dio拦截器,手动配置DNS解析规则,指定目标DNS服务器地址即可完成应用内DNS替换
- 底层Socket请求可以直接配置DNS解析参数,手动指定解析服务器地址
需要修改系统全局DNS
该场景没有通用的Flutter第三方包可以直接实现,需要分平台做原生适配,且权限要求极高:
- Android端:只有拥有系统签名、或者获取到
WRITE_SECURE_SETTINGS权限的应用才能直接修改全局DNS,普通应用基本无法拿到该权限。你可以通过Flutter调用原生代码引导用户跳转到系统WiFi设置页手动修改DNS,或者针对Android 10及以上系统,通过创建VPN连接在VPN配置中指定自定义DNS,间接实现全局DNS修改,该方案仅需要申请VPN权限即可实现 - iOS端:普通应用完全没有权限直接修改系统全局DNS,唯一可行的方案是通过
NEDNSSettingsManager创建自定义DNS配置、或者创建个人VPN配置,引导用户手动安装对应的描述文件后才能生效,该方案需要申请网络扩展权限,上架App Store需要额外的审核说明
内容的提问来源于stack exchange,提问作者Harsh Sureja
相关产品推荐
相关产品推荐

