Vaadin 14 - 未创建服务工作者和清单

Vaadin 14 - Service worker and manifest is not created

我目前正在 Vaadin14 中开发 PWA。我目前的目标是在浏览器中显示安装 window,但我就是无法获取它。

我尝试使用 https://vaadin.com/pwa/learn/installing-applications 作为指南。我有一个有效的证书,并在浏览器中为应用程序使用 HTTPS 连接。使用了以下 @PWA 注释:

@Route("main") 
@PWA(name = "Test", shortName = "Test", backgroundColor = "#227aef", themeColor = "#227aef") 
public class MainView extends AppLayout implements RouterLayout, BeforeEnterObserver {

我用 Chrome 和 Firefox 试过了,都没有显示安装 window。

提到Vaadin自己创建了Web App Manifest和ServiceWorker(https://vaadin.com/docs/v14/flow/pwa/tutorial-pwa-pwa-with-flow.html)

Vaadin server automatically serves the web manifest, service worker, icons, offline page, and installation prompt, and adds the necessary additions to the application headers.

虽然在我的项目构建后,我无法在任何地方找到这些文件。它们存储在哪里?

我在这里错过了什么?

编辑:Firefox 具有以下配置,我将其设置为 true

Service workers can be unavailable if the dom.serviceWorkers.enable preference is set to false in about:config.

Edit2:我可以验证 Firefox 不会为我的应用程序启动 Service-Worker。

为了在移动设备上显示 A2HS(添加到主屏幕)对话框,您应该有一个 运行 service worker 和一个正确配置的网络清单文件。

在桌面浏览器的情况下,您不会看到 window 弹出窗口(除非 vaadin 本身为您打开一个,但我没有这项技术),而是浏览器地址栏中的 (+) 图标(此处为 Chrome):

您应该首先查看是否正确生成了 service worker 和 web manifest。也许它们在 /bin 文件夹中,有点隐藏在项目结构中。

我终于解决了这个问题。肯定花了一些时间。问题是我的自定义 VaadinServlet 无法识别我的 @PWA 注释,因此我必须手动添加它。

public class VaadinFlowServlet extends com.vaadin.flow.server.VaadinServlet {

@Override
public void init(ServletConfig servletConfig) throws ServletException {
    var registry = 
    ApplicationRouteRegistry.getInstance(servletConfig.getServletContext());
    registry.setPwaConfigurationClass(LoginView.class); // <-- contains @PWA

    super.init(servletConfig);
}