Webrtc 渐进式Web应用:访问navigator.mediaDevices.getUserMedia时出错?

Webrtc 渐进式Web应用:访问navigator.mediaDevices.getUserMedia时出错?,webrtc,progressive-web-apps,getusermedia,agora.io,Webrtc,Progressive Web Apps,Getusermedia,Agora.io,我的应用程序出于webrtc的目的访问摄像头,并正常工作 我正在使用向我的web应用程序添加pwa功能 当以pwa的方式运行应用程序时,在我访问摄像头之前,一切正常。然后我得到这个console.log错误: getUserMedia failedObject{type:“error”,msg:“undefined不是对象(正在计算‘Navigate…”) getUserMedia失败类型:错误消息:undefined不是对象(正在评估“navigator.mediaDevices.getUse

我的应用程序出于webrtc的目的访问摄像头,并正常工作

我正在使用向我的web应用程序添加
pwa
功能

当以
pwa
的方式运行应用程序时,在我访问摄像头之前,一切正常。然后我得到这个console.log错误:

getUserMedia failedObject{type:“error”,msg:“undefined不是对象(正在计算‘Navigate…”)

getUserMedia失败类型:错误消息:undefined不是对象(正在评估“navigator.mediaDevices.getUserMedia”)


我错过了什么?

更新-2020年11月19日

WKWebView可以在iOS 14.3 beta 1中使用getUserMedia

更新-2019年9月14日

iOS 13和Safari 13上的Safari有以下更改:

SFSafariViewController已获得getUserMedia功能(!!),但我需要确认这一点,请参阅下面的工作报告)

但是,WKWebView似乎没有获得getUserMedia功能:

iOS 13和Safari 13发行说明:

编辑

简言之:在本机Safari应用程序之外的iOS上使用的PWA或任何网站将不允许访问getUserMedia,因为苹果出于“安全考虑”故意阻止访问。这包括保存到主屏幕和/或在另一个应用程序(如Facebook)中查看的任何网站。同样的限制适用于Android,但在Android上,应用程序开发人员可以请求摄像头权限并绕过此限制。(这意味着,如果你是一名网站开发人员,需要摄像头功能,你需要要求Facebook等重新构建他们的应用程序,以便在Android上实现这一点)

在这里查看他们的bug追踪器:和


从基于web的Safari体验到本机Android等。我以web和本机制作跨平台应用程序为生。getUserMedia可能会遇到几个潜在问题。要解决导致潜在问题的原因,您应该按照以下列表创建一个成功的应用程序

您的问题具体是1。因为您没有成功地查询API。但是getUserMedia的MediaCapture应该会失败,因为在修复1之后,您将遇到2。和3

  • API Polyfil-始终确保包含最新版本,以阻止getUserMedia API中的任何跨平台不一致。某些浏览器可能使用旧的getUserMedia API(通过“navigator.getUserMedia”)并且尚未更新(使用navigator.mediaDevices.getUserMedia)。您还应该检查链接以了解其他所需的PolyFill
  • 支持-检查对目标受众的支持,并确保您有必要的回退。如果(navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){return true;}否则返回false;返回false,如果getUserMedia抛出错误,理想情况下应该是相同的
  • 权限-即使包括在内,也不意味着浏览器窗口具有访问摄像头的权限。这是因为并非所有浏览器都是平等的!iOS 11仅允许在本机Safari应用程序内部访问getUserMedia。但是,您无法在iOS 11 WKWebView或UIWebView上访问getUserMedia。将应用程序保存到主页时,我将t托管在WKWebView中。因此,在Safari中工作的体验在保存到主屏幕或其他应用程序中时将不起作用。令人困惑的是,呃?。!因此,如果您希望您的体验起作用,您需要在用户打开另一个应用程序时告诉用户,他们必须在Safari中打开网站以进行实时摄像头访问。有无法解决此问题。在Android上,应用程序制造商可以覆盖此权限并允许访问getUserMedia。如果使用macOS或Windows,则需要确保浏览器外壳也具有getUserMedia兼容性(例如Edge+、Chrome、Firefox等)
  • 安全性-HTTPS网站只能访问摄像头(除非在本地主机上)。请检查位置协议(location.protocol==“HTTPS:”)?true:false;“以查看是否允许您获得成功的请求
  • 以下是我用于平台支持的测试链接:


    在我的GitHub中,还有Android和React原生getUserMedia解决方案

    您是否在iOS设备上运行PWA?在这种情况下,摄像头访问不起作用是一个已知问题。请参阅下面我关于如何修复编码解决方案的回答,然后遇到JSONDerulo也提到的问题SWHOA——因此要确认,目前还没有办法n IOS上是否有可访问摄像头的渐进式web应用程序?我在github链接@Derulo上读到了。令人震惊的是,苹果还没有解决这个问题。渐进式web应用程序的发展势头强劲,苹果有可能因此失去安卓系统的用户。@VikR在撰写本文时,我可以确认你无法在IOS上使用getUserMedia除了本机Safari应用程序之外。iOS 12预计会发布,但遗憾的是没有发布任何消息。2019年9月,iOS 13将发布,届时可能会出现。这对我的许多客户来说是一个巨大的烦恼和障碍,因为网站主要通过社交媒体进行营销,当用户打开内置在浏览器中的Facebooks内的应用程序时(使用WKWebView)AR功能将不起作用。Grr!我不知道Facebook的内置浏览器。这对许多web开发人员来说是非常严重的。