You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 03:24:26