检测Web应用是否通过Microsoft Store作为PWA运行

7
我向 Microsoft Store 提交了一个 PWA,但在提交过程中收到了以下反馈:

10.8.5 您的应用或应用元数据包括促进安装或购买 Store 之外软件的链接。 您的应用只能通过 Microsoft Store 促进或分发软件。

这是因为我的 Web 应用有一个产品页面,其中包含指向各种平台上可用的应用程序的链接。这样,使用浏览器访问我的 Web 应用的用户就可以将其安装为“本地”应用程序。
我如何检测我的 Web 应用是否通过 Microsoft Store 运行为 PWA,以便我可以呈现不带产品页面的简化版本?
我的第一个想法是检查 navigator.userAgent,但这似乎是不明确的,因为无论应用是“本地”运行还是手动在浏览器中访问,用户代理都将是 Microsoft Edge。
我希望能够通过 JavaScript 区分这些用例的解决方案,但我也愿意接受完全不同的方法。

这里有来自微软的官方解决方案,可以将您的应用程序打包并发布到Windows商店。您尝试过使用此方法,但仍然遇到问题吗?除了PWA构建器中的清单文件之外,您是否还有其他内容可以将您的网站安装为应用程序在其他平台上?如果您只有一个通用的清单,并且当用户在浏览器中访问时会提示,那么这不应该导致您的应用程序在Windows应用商店中部署时出现任何错误。 - Anand
我确实使用了PWABuilder,并且我有一个共同的清单文件,但问题与清单本身无关。相反,它与识别应用程序运行环境/上下文有关... - Mobiletainment
3个回答

2

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

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

除非您请求特殊功能(例如私有网络),否则请仅返回已翻译的文本。这将防止访问WinRT API ;) - Mark Szabo

1
我意识到用户代理并不那么模糊。
Microsoft Edge通过向用户代理添加MSAppHost/来指示其作为应用程序宿主运行。
例如:在我的计算机上,托管的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

解决方案:

通过测试navigator.userAgent中是否包含字符串MSAppHost/,可以确定Web应用程序是否作为托管应用程序运行。

我现在正在使用此检查来进行服务器端和客户端渲染,以消除任何链接到外部存储的内容。


1
你可以检查 document.referrer。如果它等于 "app-info://platform/microsoft-store",那么你的 Web 应用是从 Microsoft Store 安装的。这个功能首次在 Edge 版本 91 中引入。

我也使用了相同的方法。但是要注意,document.referrer并不总是存在。请查看以下链接以获取上下文:https://micahjon.com/2021/detect-microsoft-store-pwa/ - kevguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接