【问题标题】:Detect if web app is running as PWA through the Microsoft Store检测 Web 应用程序是否通过 Microsoft Store 作为 PWA 运行
【发布时间】:2018-08-25 08:49:43
【问题描述】:

我向 Microsoft Store 提交了一个 PWA,并在我的提交中收到以下注释:

10.8.5 您的应用或应用元数据包括宣传安装或 在商店外购买软件。 您的应用只能通过 Microsoft Store 推广或分发软件。

原因是我的网络应用程序有一个产品页面,其中包含指向该应用程序可用的各种平台的链接。这样一来,使用浏览器访问我的网络应用程序的用户就可以将其作为“本机”应用程序安装在他们的平台上。

如何检测我的 Web 应用程序是否通过 Microsoft Store 作为 PWA 运行,以便在没有产品页面的情况下呈现我的应用程序的精简版本?

我的第一个想法是检查navigator.userAgent,但这似乎不明确,因为无论应用程序是“本机”运行还是在浏览器中手动访问,用户代理都是 Microsoft Edge。

我更喜欢在 JavaScript 中区分这些用例的解决方案,但我也愿意接受完全不同的方法。

【问题讨论】:

  • Here is an official solution from Microsoft 将您的应用捆绑并发布到 Windows 商店。你试过这个,你仍然遇到这个问题吗?除了 PWA 构建器中的清单文件之外,您是否还有其他平台可以将您的网站安装为应用程序的东西?如果您只有一个通用清单,并且在浏览器中访问时会提示用户,那么这不会导致您在 windows 应用商店中的应用部署出现任何错误。
  • 我确实使用了 PWABuilder,并且我确实有一个通用清单文件,但问题与清单本身无关。相反,它是关于识别应用程序运行的环境/上下文......

标签: javascript windows-store-apps microsoft-edge progressive-web-apps windows-store


【解决方案1】:

正确的官方方法是检查window.Windows。当作为应用商店应用程序运行时,注入整个 WinRT API 表面。因此,您可以(并且应该)执行以下操作,而不是用户代理嗅探:

if (window.Windows) {
  // running as a Windows app
}
else {
  // running in browser
}

【讨论】:

  • 除非您请求阻止 WinRT API 访问的特殊功能(例如专用网络);)
【解决方案2】:

我意识到用户代理毕竟不是那么模棱两可。

Microsoft Edge 确实通过将MSAppHost/<WebView Rev> 添加到其用户代理来指示它何时作为应用程序主机运行。

示例:

在我的机器上,我托管的 PWA 的用户代理列出了“MSAppHost/3.0”:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; MSAppHost/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063

解决方案:

对字符串 MSAppHost/ 的测试 navigator.userAgent 可揭示网络应用程序是否作为托管应用程序运行。

我现在使用此检查来进行服务器端和客户端渲染,以剥离任何链接到外部商店的内容。

【讨论】:

    【解决方案3】:

    您可以查看document.referrer。如果它等于“app-info://platform/microsoft-store”,则您的 Web 应用程序是从 Microsoft Store 安装的。此功能首次在 Edge 版本 91 中引入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2019-10-04
      • 2020-01-16
      • 1970-01-01
      • 2010-12-22
      相关资源
      最近更新 更多