Flutter应用使用upnp插件时Beta测试用户无本地网络权限弹窗如何解决
iOS TestFlight Beta版本地网络权限不触发问题解决方案
问题根因说明
你遇到的内部测试正常、Beta测试异常的核心差异是:内部测试使用Xcode直接安装的development签名包默认带有调试级别的网络权限,而TestFlight分发的distribution签名包的权限校验规则要严格很多,很多在开发环境默认允许的操作在分发环境需要额外配置。
排查修复步骤
- 首先补全
Info.plist里的BonjourServices配置:UPnP设备扫描依赖SSDP协议,除了飞利浦Hue对应的_hue._tcp之外,你还需要添加_ssdp._udp服务项,缺少该配置会导致分发环境下系统不会触发本地网络权限申请弹窗。 - 检查
NSLocalNetworkUsageDescription的描述内容:不能使用太笼统的描述,必须明确说明权限用途,例如填写「需要访问本地网络以发现和控制您家中的飞利浦Hue智能灯具」,描述模糊会被系统静默屏蔽权限弹窗。 - 调整权限触发时机:不要在应用冷启动阶段就调用
discover.quickDiscoverClients()方法,要等用户主动进入智能设备配对流程时再触发扫描操作,避免用户无预期拒绝权限后无法再次唤起弹窗。
多播权限相关说明
申请多播权限可以解决该问题。
你使用的UPnP扫描需要向239.255.255.250这个多播地址发送数据包,iOS 14及以上版本中,distribution签名的应用默认没有多播/广播数据包发送权限,只有development签名的调试包默认拥有该权限,这刚好匹配你遇到的测试环境和Beta环境表现不一致的问题。
你完成多播权限申请后,在Xcode的Signing & Capabilities中添加该权限,重新打包上传TestFlight即可解决Beta用户的权限问题。
内容的提问来源于stack exchange,提问作者Tomas Baran
相关产品推荐
相关产品推荐

