React Native生产版弹出本地网络设备连接权限提示如何解决?
本地网络弹窗定位及禁用方案
一、定位触发权限的依赖库
该弹窗是iOS14+引入的本地网络权限触发的,只要依赖库调用了Bonjour相关服务、扫描本地端口、访问本地子网地址就会触发弹窗,可按以下步骤定位:
- 在Xcode中打开iOS项目,全局搜索关键词:
bonjour、NSNetService、local network、multicast,搜索范围包含所有第三方依赖的源码和编译配置,匹配到的代码即为触发来源 - 优先排查你依赖列表中的高风险库:
react-native-video(开启本地流媒体、局域网视频播放能力时会触发扫描)、@sentry/react-native(2.x旧版本调试逻辑会扫描本地端口)、react-native-device-info(旧版本获取局域网信息的接口会触发权限请求)、mixpanel-react-native(部分版本本地调试日志上报逻辑会扫描局域网设备) - 采用删包排除法:逐个注释高风险依赖后打包测试,直到弹窗不再出现即可定位到对应依赖
二、完全禁用生产环境弹窗的方法
如果你的应用本身不需要使用本地网络能力,可通过以下方式禁用弹窗:
- 方法1:在iOS项目的
Info.plist中,删除所有和本地网络相关的配置项,包括NSLocalNetworkUsageDescription、NSBonjourServices;如果没有显式配置这两个项,就新增UIRequiresPersistentWiFi并设为false - 方法2:定位到具体依赖后,找到依赖调用本地网络的代码,用
patch-package工具给依赖打补丁,生产环境下自动屏蔽相关代码逻辑执行 - 注意:如果你的应用本身确实需要本地网络能力,不能完全禁用该权限,需要在
Info.plist的NSLocalNetworkUsageDescription字段中填写明确的权限用途说明,通过苹果审核的同时让用户了解权限作用
内容的提问来源于stack exchange,提问作者user3812411
相关产品推荐
相关产品推荐

