【问题标题】:Chrome 67 won't fire the 'beforeinstallprompt' for my PWAChrome 67 不会为我的 PWA 触发“beforeinstallprompt”
【发布时间】:2023-03-06 18:39:01
【问题描述】:

我正在开发一个示例网络应用程序,我希望我的用户能够将其安装到他们的 chrome 主屏幕上。据我所知,满足以下所有条件:

该网络应用尚未安装

  • 满足用户参与启发式(当前,用户已与域交互至少 30 秒)
  • 包括一个网络应用清单,其中包括: 短名称或名称

  • 图标必须包含一个 192px 和一个 512px 大小的图标 start_url

  • 显示必须是以下之一:全屏、独立或最小用户界面

  • 通过 HTTPS 提供服务(服务工作者需要)

  • 已向 fetch 事件处理程序注册了一个服务工作者

  • 难以实际测量

  • 我确实包含了一个清单:

    {
        "short_name": "React Notes",
        "name": "React Notes Sample",
        "icons": [
          {
            "src": "staticAssets/favicon.ico",
            "sizes": "64x64 32x32 24x24 16x16",
            "type": "image/png"
          },
          {
            "src": "staticAssets/icon-192.png",
            "sizes": "192x192",
            "type": "image/png"
          },
          {
            "src": "staticAssets/icon-512.png",
            "sizes": "512x512",
            "type": "image/png"
          }
        ],
        "start_url": "/",
        "display": "standalone",
        "theme_color": "#000000",
        "background_color": "#ffffff"
    }
  • 从我的清单中可以看出,我正在提供图标。

  • 我使用的是付费 heroku dyno,所以没有理由通过 https 提供它

  • 我正在使用 fetch 处理程序注册服务工作者:

    importScripts("/precache-manifest.2dbaa71ff348edf029d7ff098089b7cd.js", "/workbox-v3.3.1/workbox-sw.js"); workbox.setConfig({modulePathPrefix: "/workbox-v3.3.1"}); /* 禁用 eslint */

    self.__precacheManifest = [].concat(self.__precacheManifest || []); workbox.precaching.suppressWarnings(); workbox.precaching.precacheAndRoute(self.__precacheManifest, {});

    self.addEventListener('fetch', (e) => { 控制台.log(e); });

S,我遇到的问题是 beforeinstallprompt 事件永远不会触发我做任何事情。我已经通过 Lighthouse 运行了我的应用程序至少十几次,每次我都遇到同样的错误:

失败:Service Worker 未成功提供清单的 start_url,没有要获取的起始 URL:页面上没有可用的 Web 应用清单...

而且我正式不知道为什么这不起作用。

【问题讨论】:

  • 我可以看到清单中的起始 URL 指向 /。这将是您的网络应用程序的根路径。除非您提供文件和 URL 的文件夹结构,否则我们无法提供任何具体帮助。

标签: html reactjs progressive-web-apps service-worker


【解决方案1】:

诊断问题的最佳方法是使用 Chrome 开发工具审核选项卡中提供的“审核”(灯塔)。

尝试运行“Progressive Web App”移动审核,结果应该可以为您提供需要修复的线索。

【讨论】:

    【解决方案2】:

    首先,如果可能,请在另一台设备上尝试。
    你有可以分享的网址吗?如果你愿意,我可以测试。

    使用灯塔审计工具
    在 #4 下,您是否看到“可以提示用户安装 Web 应用程序”
    有时您会遇到一些错误,但它仍然有效

    【讨论】:

    • 如果你想通过 Twitter DM 私下发送 URL,@AngularChicago
    【解决方案3】:

    您可能想尝试添加范围属性
    看起来如果那不存在,它看起来像@start_url

    https://www.w3.org/TR/appmanifest/#navigation-scope

    我的例子
    http://a2hs.glitch.me/manifest.json

    【讨论】:

      【解决方案4】:

      奇怪的是,对我来说,Lighthouse 显示 + 结果提示用户安装应用程序。它不适用于 chrome 65 Android 6。检查我的 Lighthouse 结果的屏幕截图。 https://imgur.com/a/vJxfNAJ

      另外,我添加了范围、start_url,以防万一。

      此外,当我从开发工具手动触发“添加到主屏幕”时,它会提示一切正常。叹!已经花了几个小时已经在浪费时间了。

      虽然它在 Firefox 中很好地提示。

      我的堆栈是标准的 gatsby v2,这里有 2 个插件 https://www.gatsbyjs.org/docs/progressive-web-app/

      【讨论】:

      • Chrome 定义了一些要显示的添加到主屏幕横幅的条件 - 有一些 PWA 要求,但是您必须使用该站点/应用程序一段时间,如果您拒绝添加在某个时间点将站点移至主屏幕,Chrome 提供再次添加它可能需要长达 3 个月的时间。我认为,如果您从灯塔获得绿灯,并且可以通过开发工具测试测试您的提示是否被触发,那么您已经完成了至少在 chrome 上运行这件事所需的一切。通过添加 beforeinstallprompt 分析事件来了解它对您的用户的效果。
      • 我实际上已经在网站上花费了几个小时进行了几次测试,这实际上满足了“用户在网站上花费了一些时间”的条件。但从来没有提示安装。但我想,这不仅仅是记录在案的“用户在网站上花费了一些时间”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多