如何访问iOS11主屏幕上的Web应用程序的相机?

概要

我们无法使用WebRTC或文件input从iOS11(公开发布)主屏幕Web应用程序访问相机,详情如下。 我们的用户怎么能继续访问相机?

我们通过https提供网页应用程序页面。

解决scheme,十一月

我们失望了苹果希望解决这个问题,并向前迈进。 修改我们的networking应用程序,删除iOS“添加到主屏幕”function,并要求受影响的用户删除任何以前的主屏幕图标。

11月21日更新

iOS 11.2 beta 4和iOS 11.1.2不能修复。

9月21日的变通办法

似乎我们可以问networking应用程序的现有客户

  • 不升级到iOS11 – 祝你好运:)
  • 在iOS相机拍摄照片,然后在networking应用程序中select它们
  • 等待下一个testing版
  • 重新安装为Safari浏览器页面(在我们删除了ATHS逻辑之后)
  • 切换到Android

文件input

我们目前的产品代码使用的文件input在iOS 10及更高版本上已经运行良好。 在iOS11上它作为一个Safari选项卡,但不是从主屏幕应用程序。 在后一种情况下,相机被打开,只显示一个黑色的屏幕,因此它是无法使用的。

<meta name="apple-mobile-web-app-capable" content="yes"> ... <input type="file" accept="image/*"> 

的WebRTC

iOS11上的Safari 11提供了WebRTC媒体捕获 ,这非常棒。

我们可以使用navigator.mediaDevices.getUserMedia获取相机图像,以在桌面和移动设备上的正常网页上进行canvas。

当我们将页面添加到iPad或iPhone主屏幕时, navigator.mediaDevices变得undefined且不可用。

  <meta name="apple-mobile-web-app-capable" content="yes"> ... // for some reason safari on mac can debug ios safari page but not ios home screen web apps var d = 'typeof navigator : ' + typeof navigator; //object d += 'typeof navigator.mediaDevices : ' + typeof navigator.mediaDevices; // undefined // try alternates d += 'typeof navigator.getUserMedia : ' + typeof navigator.getUserMedia; // undefined d += 'typeof navigator.webkitGetUserMedia : ' + typeof navigator.webkitGetUserMedia; // undefined status1.innerHTML = d; 

我们有相当类似的问题。 到目前为止,我们唯一能做的解决方法是去掉meta标签,使其成为“apple-mobile-web-app-capable”,让用户在Safari中打开它,一切正常。

是的,正如其他人所提到的,getUserMedia只能在Safari中直接使用,但不能在UIWebView和WKWebView中使用,所以不幸的是,您唯一的select是

  • 删除<meta name="apple-mobile-web-app-capable" content="yes">所以你的'app'运行在一个正常的Safari标签中,getuserMedia可以访问
  • 使用像Apache Cordova这样的框架,允许您以其他方式访问设备的相机。

希望苹果能早日取消这个WebRTC限制。

资源:
对于在其应用程序中使用WebKit的开发人员,RTCPeerConnection和RTCDataChannel可在任何Web视图中使用,但对摄像头和麦克风的访问权限仅限于Safari。