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

aja*_*yel 117 javascript html5 camera webrtc ios11

摘要

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

我们通过https提供网络应用页面.

4月更新

iOS 11.3的公开发布似乎解决了问题,文件输入摄像头访问再次正常工作!

3月更新

正如这里的人们所说,Apple docs建议网络应用程序相机功能在11.3与服务工作者一起返回.这很好,但我们还不确定是否我们希望每个人都重新安装,直到我们可以对11.3GM进行彻底测试.

解决方案,11月

我们失去了希望,苹果希望解决这个问题并向前迈进.修改了我们的网络应用程序以删除iOS"添加到主屏幕"功能,并要求受影响的用户删除任何以前的主屏幕图标.

12月6日更新

iOS 11.2和iOS 11.1.2无法修复.

解决方法,9月21日

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

  • 不升级到iOS11 - 祝你好运:)
  • 在iOS相机中拍照,然后在网络应用中选择它们
  • 等待下一个ios beta
  • 重新安装为Safari浏览器页面(删除ATHS逻辑后)
  • 切换到Android

文件输入

我们当前的生产代码使用的文件输入在iOS 10及更早版本中运行良好多年.在iOS11上,它可用作Safari选项卡,但不能用于主屏幕应用程序.在后一种情况下,相机被打开并且仅显示黑色屏幕,因此它是不可用的.

   <meta name="apple-mobile-web-app-capable" content="yes">
   ...
   <input type="file" accept="image/*">
Run Code Online (Sandbox Code Playgroud)

的WebRTC

iOS11上的Safari 11提供WebRTC媒体捕获功能,非常棒.

我们可以使用navigator.mediaDevices.getUserMedia根据此处链接的示例代码,在桌面和移动设备上的普通网页上捕捉相机图像到画布.

当我们将页面添加到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;
Run Code Online (Sandbox Code Playgroud)

小智 22

我们有类似的问题.到目前为止,我们能够做的唯一解决方法是删除它的元标记为"apple-mobile-web-app-capable",并允许用户在Safari中打开它,一切似乎都能正常工作.


Sta*_*nas 22

更新:虽然一些早期出版的更改日志,并且帖子让我相信,使用网络应用程序manifest.json,而不是apple-mobile-web-app-capable将最终有机会获得适当的WebRTC实现,可惜这是不正确的,因为其他人在这里已经指出并测试已证实.悲伤的脸.很抱歉由于此造成的不便,让我们希望在遥远的一个银河系中幸运的一天,Apple将最终通过(非Safari)WebKit驱动的视图给我们摄像头访问...

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

  • 删除,<meta name="apple-mobile-web-app-capable" content="yes">以便您的'app'在普通的Safari选项卡中运行,可以访问getuserMedia
  • 使用像Apache Cordova这样的框架,允许您以其他方式访问设备的摄像头.

这是为了希望Apple更快地删除这个WebRTC限制......

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

  • Safari是新的,例如Apple,请允许我们访问用户媒体数据 (2认同)

Joa*_*ild 15

好消息!最初似乎可以从第一个iOS 11.3测试版中的主屏幕Web应用程序访问相机.

我用几个文件制作了一个repo,证明它有效:

https://github.com/joachimboggild/uploadtest

测试步骤:

  1. 从可从手机访问的网站提供这些文件
  2. 在iOS Safari中打开index.html
  3. 添加到主屏幕
  4. 从主屏幕打开应用程序.现在网页全屏打开,没有导航ui.
  5. 按文件按钮从相机中选择图像.

现在相机应该正常工作而不是黑屏.这表明该功能再次起作用.

我必须补充一点,我使用的是普通字段,而不是getUserMedia或其他类似的字段.我不知道这是否有效.