Flutter iOS端如何触发本地网络访问权限弹窗及查询权限状态
iOS本地网络权限触发与查询方案
iOS 14及以上版本引入了本地网络权限限制,未授权时App无法访问局域网内的其他设备,具体实现方法如下:
- 触发权限弹窗:系统不会主动弹出权限申请窗口,只有当App主动执行本地网络访问操作时才会触发,可行的操作包括:向本地网段发送UDP广播、发起mDNS服务发现请求、尝试连接本地子网内的非回环IP地址。
注意:需要提前在iOS项目的
Info.plist中添加NSLocalNetworkUsageDescription字段,填写权限使用说明,否则触发请求时App会直接崩溃。
- 查询权限状态:可以通过两种方式实现:
- 调用iOS原生
NWPathMonitor相关API直接查询权限状态,该方式准确度最高 - 间接判断:尝试发送本地广播后检查是否有访问受限相关的错误返回,若存在则代表权限未授予
- 调用iOS原生
- Flutter侧实现方案:
目前官方permission_handler包暂不支持本地网络权限的相关操作,你可以通过自定义MethodChannel桥接原生iOS侧的逻辑实现对应的功能:- 在iOS原生层封装权限触发、状态查询的方法
- 在Flutter层通过通道调用对应方法获取结果即可
对应的权限弹窗和设置页效果如下:

内容的提问来源于stack exchange,提问作者Aterus
相关产品推荐
相关产品推荐

