【问题标题】:getUserMedia in PWA with manifest on iOS 11PWA 中的 getUserMedia 与 iOS 11 上的清单
【发布时间】:2018-06-11 14:58:13
【问题描述】:

我创建了一个 PWA,它使用 WebRTC 的 getUserMedia 来获取实时摄像头流。 PWA 使用 manifest.json,在 Android 上运行良好。

然而,在 iOS 上,如果我直接在 Mobile Safari 中打开链接,该应用程序也可以工作,但如果我将它添加到主屏幕,它是未定义的(因为 iOS 只允许在 Safari 上下文中使用它)。

作为一种解决方法,我想在 Mobile Safari 中打开应用而不是全屏模式,但我不知道该怎么做,因为它会在检测到 manifest.json 后自动全屏打开。

有人知道如何在 Safari 中打开带有清单的应用程序吗?

谢谢!

【问题讨论】:

  • 你能从 PWA 打开相机吗(在 iOS 中,全屏模式)?好奇地等待您的回复!

标签: javascript ios getusermedia manifest.json pwa


【解决方案1】:

有一种方法可以避免全屏模式打开 PWA。 在 manifest.json 中,将显示属性更改为“浏览器”。

“显示”:“浏览器”

Refer this documentation 在“显示”部分下。 您还可以考虑“minimal-ui”选项。 请记住,当您进行此更改时,它不仅会反映在 iOS 中,还会反映在 Android 中。

关于访问 getUserMeida 的实际问题,我不明白为什么它不能在全屏模式下工作。它只是一个HTML5 feature,并没有特定于 PWA。所以理想情况下,它也应该在全屏模式下工作。当您以全屏模式打开时,尝试捕获任何错误,如果发现任何错误,请在此处发布。这也可能是由于权限问题,我建议在全屏模式下解决问题以获得更好的用户体验。

【讨论】:

  • 谢谢,我不知道清单的“显示”属性。不幸的是,我们希望在 Android 上保持独立,并且只在 iOS 上关闭此功能。问题在于 Apple 仅允许通过 Mobile Safari 中的 getUserMedia 功能访问相机(而不是在另一种 WebView 组件中,例如在这种情况下的第三方浏览器或 PWA)。来源:link
  • 我认为您不希望对 Android 进行此更改。但不幸的是,您无法根据浏览器使显示模式动态化。但我想知道的是,PWA 是 iOS 使用 Safari 创建的,当您使用 PWA 应用程序时,它仅在全屏模式下使用 Safari 浏览器。至少这是我在 Android 中使用 Chrome 确认的。你怎么说 PWA 使用不同的 web 视图?我猜问题可能是权限之类的其他问题。
  • 是的,iOS 上的全屏 PWA 在 WKWebView 中运行。这就是问题存在的原因,正如其他 SO 问题中所解释的那样。我接受这样一个事实,即存在没有直接解决方案的问题,因此我想找到一种解决方法,在 iOS 上的 Safari 中打开带有清单的 PWA,但在 Android 上仍然是独立的。我希望这能让它更清楚一点。
【解决方案2】:

我通过添加两个 manifest.json 来解决这个问题,一个默认用于非 ios 设备,一个用于 ios 设备,我还创建了一个 detect.js 脚本来检测 ios 设备是否正在访问 pwa 并更改html 上的 manifest.json 引用。有代码:

// Detects if device is on iOS 
const isIos = () => {
    const userAgent = window.navigator.userAgent.toLowerCase();
    return /iphone|ipad|ipod/.test( userAgent );
  }

// change manifest.json
if (isIos()) {
    document.getElementById("manifest").href = "ios-manifest.json";
}

【讨论】:

    【解决方案3】:

    我建议你将apple-mobile-web-app-capable 设置为no,并在文档头部使用此元标记:

    <meta name="apple-mobile-web-app-capable" content="no">
    

    这将避免 iOS 将您的网络应用理解为 PWA。

    【讨论】:

    • 我希望这是正确的,但不,这对我不起作用。仅显示:浏览器工作。我想它必须是两个清单。
    猜你喜欢
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多