【问题标题】:WKWebView does not allow camera access in applicationWKWebView 不允许在应用程序中访问相机
【发布时间】:2019-10-31 22:45:40
【问题描述】:

我们正在尝试与多个用户进行电话会议,因此通过使用 Kurento 服务器,我们已经实现了这一点,并且它正在 safari 浏览器上运行。但是当涉及到WebView / WKWebView 的实现时。它甚至不请求权限。

@IBOutlet weak var webViewContainer: UIView!
var webView: WKWebView!

override open func loadView() {
    super.loadView()

    let webConfiguration = WKWebViewConfiguration()
    webConfiguration.ignoresViewportScaleLimits = true
    webConfiguration.suppressesIncrementalRendering = true
    webConfiguration.allowsInlineMediaPlayback = true
    webConfiguration.allowsAirPlayForMediaPlayback = false
    webConfiguration.allowsPictureInPictureMediaPlayback = true
    webConfiguration.mediaTypesRequiringUserActionForPlayback = .all
    webConfiguration.requiresUserActionForMediaPlayback = true
    webView = WKWebView(frame: webViewContainer.frame, configuration: webConfiguration)
    webView.uiDelegate = self
    webView.navigationDelegate = self
    webView.sizeToFit()
    webView.backgroundColor = .black
    webView.isOpaque = false
    self.webViewContainer.addSubview(webView)

}

func webContentController()-> WKUserContentController {
    let contentController = WKUserContentController()
    let script = try! String(contentsOf: Bundle.main.url(forResource: "WebRTC", withExtension: "js")!, encoding: String.Encoding.utf8)
    contentController.addUserScript(WKUserScript(source: script, injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: true))
    contentController.add(self, name: "callbackHandler")
    return contentController
}

override func viewDidLoad() {
    super.viewDidLoad()
    guard let url = URL (string: urlStr) else { return
    }
    let myRequest = URLRequest(url: url)
    self.webView.load(myRequest)
}

我什至在safariViewController 中尝试过这个链接,但它不要求相机权限。

【问题讨论】:

  • 我不知道为什么,但是 [] 和 .all 给出了不同的结果:webConfiguration.mediaTypesRequiringUserActionForPlayback = [] webConfiguration.mediaTypesRequiringUserActionForPlayback = .all

标签: ios swift webrtc wkwebview kurento


【解决方案1】:

This

您是否按照文档中的步骤进行操作? 最重要的部分是NSCameraUsageDescription / NSMicrophoneUsageDescription 必须存在于 info.plist 文件中

【讨论】:

  • 是的,它存在于 plist 中
  • 您使用的是最新的 iOS 吗? safariViewController 摄像头问题应该在 11.3 中修复?发行说明: > Safari 已解决的问题 > - 保存到主屏幕和网页的 WebApps > 在 SafariViewController 中现在可以使用摄像头捕捉图像。 > (35542231)
  • 不,如果你想支持低版本,你必须使用原生代码 + javascript 桥
  • @vk.edwaard.li 你能分享任何例子吗,或者参考已经这样做的项目?
【解决方案2】:

这是目前 WKWebView 的一个已知限制,详情请参阅the chrome issue

【讨论】:

    【解决方案3】:

    这是一个错误,WkWebView 对 WebRTC 的支持有限 从IOS 14.3版本开始就可以使用了

    但要使其正常工作,您需要设置属性 requiresUserActionForMediaPlayback = false 允许InlineMediaPlayback = true

    【讨论】:

      猜你喜欢
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多