Flutter InAppWebView iOS端录像跳转至直播而非相机问题排查
Flutter iOS 加载录像网页时自动跳转至Live Broadcast而非相机的问题
问题详情
- 使用
flutter_inappwebview或flutter_webview_plugin加载支持录像功能的网站,网页端运行正常,但在iOS App内启动录像时,会自动跳转到Live Broadcast模式,无法直接调用相机录像。 - 现象演示:

- 环境信息:
- Flutter 稳定版 3.3.7
- Xcode 14.1
- iOS 15.2.1
- 相关GitHub讨论已在推进,但尚未解决当前问题。
可行解决方向
1. 配置WebView媒体偏好(针对flutter_inappwebview)
在InAppWebView的初始化设置中,指定相机优先与媒体捕获权限策略,强制网页调用普通录像模式:
InAppWebView( initialUrlRequest: URLRequest(url: Uri.parse("你的目标网址")), initialSettings: InAppWebViewSettings( mediaPlaybackRequiresUserGesture: false, allowsInlineMediaPlayback: true, preferredCameraPosition: CameraPosition.BACK, mediaCapturePermissionPolicy: MediaCapturePermissionPolicy.PROMPT, ), )
2. 修改iOS原生Info.plist配置
确保权限描述完整,同时添加WebKit相关配置,优化媒体加载行为:
<key>NSCameraUsageDescription</key> <string>需要访问相机进行录像</string> <key>NSMicrophoneUsageDescription</key> <string>需要访问麦克风进行录像</string> <!-- 关闭媒体播放的用户手势要求 --> <key>WKWebViewConfiguration</key> <dict> <key>mediaTypesRequiringUserActionForPlayback</key> <array/> </dict>
3. 拦截网页权限请求
通过flutter_inappwebview的权限回调,手动处理相机权限请求,确保网页获取正确的录像权限:
InAppWebView( onPermissionRequest: (controller, request) async { if (request.resources.contains("camera")) { return PermissionResponse( resources: request.resources, action: PermissionResponseAction.GRANT, ); } return PermissionResponse( resources: request.resources, action: PermissionResponseAction.DENY, ); }, )
4. 升级依赖与Flutter版本
当前使用的Flutter 3.3.7版本较旧,尝试升级至最新稳定版(如3.10+),同时更新flutter_inappwebview到最新版本,这类iOS媒体捕获的兼容性问题可能已被修复。
内容的提问来源于stack exchange,提问作者genericUser
相关产品推荐
相关产品推荐

