科尔多瓦:getUserMedia()不再适用于不安全的来源

时间:2019-03-06 13:35:36

标签: javascript android cordova getusermedia quasar-framework

情况

在我的Cordova混合应用程序(使用Quasar框架构建)中,我需要添加视频通话功能。

我需要使用功能getUserMedia()

在localhost上进行测试时,一切正常,但是在设备上进行测试时,一切正常。

错误:

[Deprecation] getUserMedia() no longer works on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS.

此错误很可能是由于Cordova不在https上运行引起的。

尝试:

我已尽我所能在Google上找到的所有内容,但无济于事。

人行横道:

我见过有人建议安装crosswalk插件。我已经尝试过,但没有任何改变。

权限:

我尝试使用android-permissions插件寻求许可。

但是当它提示请求时,尽管单击了ALLOW按钮,但权限仍设置为DENIED_ALWAYS ...

我尝试使用diagnostic cordova插件,但结果相同

问题:

如何在Cordova应用中使用getUserMedia()

编辑-解决方案:

@Andre解决方案是解决该问题的正确方法。

我在设备的开发环境中运行应用程序时遇到了该错误。 Quasar在192.168.0.18上运行我的devServer,该主机与localhost不同,因此未被识别为安全。

通过在配置中设置https: true,该问题已解决。

构建应用程序后,Cordova在file://上运行,并且在file://协议上没有不安全的来源问题,如@jcesarmobile在评论中指出的那样。

我在构建时仍然遇到问题,但与该问题本身无关,但是涉及权限,因此我设法使用cordova-plugin-android-permissions插件来解决它们。

2 个答案:

答案 0 :(得分:1)

您不能。

http://(不安全来源)不再支持使用getUserMedia(),仅在https://(安全来源)上可以使用

  • 出于开发目的,localhost被视为基于HTTP的安全来源,因此,如果能够从localhost运行服务器,则应该能够在该服务器上工作。这就是为什么使用locahost在您的案例中可以使用它的原因。
  • 出于生产目的,请考虑使用HTTPS。您可以获得免费的SSL证书using Let's encrypt

使用Quasar框架,您可以通过编辑quasar.conf.js文件来通过HTTPS使用Webpack。 Here are allowed parameters

devtool: 'cheap-module-source-map',
optimization: { minimize: false },

它将使用自签名证书。

如果要使用自己的证书,请按以下说明使用:

// quasar.conf.js
devServer: {
    https: true
}

答案 1 :(得分:0)

对于自发布 cordova-ios@6.0.0 以来遇到此问题的任何人,现在有一种更简单的方法可以在运行 iOS 14.5 或更高版本的 iOS 设备上解决此问题

将以下内容添加到 config.xml 允许将 webview 视为安全上下文:

<preference name="scheme" value="app" />
<preference name="hostname" value="localhost" />

来源:https://cordova.apache.org/announcements/2020/06/01/cordova-ios-release-6.0.0.html

我仍在寻找不需要本地网络服务器的 Android 解决方案。