情况
在我的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
插件解决它们。
你不能。
http://(Unsecure Origin)不再支持使用getUserMedia(),它仅适用于https://(Secure Origin)
使用Quasar框架,您可以通过编辑quasar.conf.js文件来使用Webpack over HTTPS。 Here are allowed parameters。
// quasar.conf.js
devServer: {
https: true
}
它将使用自签名证书。
如果要使用自己的证书,请使用以下内容:
// quasar.conf.js
devServer: {
https: {
key: fs.readFileSync('/path/to/server.key'),
cert: fs.readFileSync('/path/to/server.crt'),
ca: fs.readFileSync('/path/to/ca.pem'),
}
}