PWA 装了就被删?我跑完三个项目发现,安装率上不去根本不是 Service Worker 的问题

手机浏览器里打开网页,然后「添加到主屏幕」——这事大多数人都干过,但真能让用户留下来的却不多。

问题不在功能,在于很多 PWA 根本不知道自己被装到主屏幕之后,用户会怎么用。

PWA 安装率上不去,大多数原因不在技术实现

翻了几个案例,安装率低的共同问题不是 Service Worker 配错了,而是这几个:

  1. manifest.json 配置敷衍——图标不清晰、应用名称被截断、主题色和网页完全不搭
  2. 安装提示时机错——一进来就弹窗,用户还没看内容就已经烦了
  3. 没有离线能力——装了之后断网一片空白,用户下次直接删
  4. 独立窗口体验没做——在主屏幕打开,但看起来就是个浏览器标签页,用户感知不到价值

manifest.json 几个容易忽略的配置

{
  "name": "购物助手",
  "short_name": "购物",
  "start_url": "/?utm_source=pwa",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#007AFF",
  "icons": [
    { "src": "/icons/192.png", "sizes": "192x192", "type": "image/png" },
    { "src": "/icons/512.png", "sizes": "512x512", "type": "image/png" }
  ]
}

short_name 尽量控制在 12 个字符以内,iOS 会截断。

start_url 加 UTM 参数,可以区分「从主屏幕打开」和「从浏览器打开」的用户行为。

display: standalone 让它看起来像个独立应用,不是浏览器套了个壳。

安装提示什么时候弹

不要一进来就弹。最佳时机是:用户已经完成了一个有意义的行为(比如加入购物车、收藏内容、完成了某个操作)。

这个时机可以用 Service Worker 的 sync 事件来判断,也可以用简单的 localStorage 标记。

if (localStorage.getItem("meaningfulAction") && !localStorage.getItem("installPromptShown")) {
  deferredPrompt.prompt();
  localStorage.setItem("installPromptShown", "true");
}

让 PWA 真正有离线价值

最少要做的:

  • 缓存首页和核心资产(CSS、JS、字体)
  • 离线时展示有意义的「网络不可用」页面,而不是空白
  • 支持一些基础功能离线使用(阅读清单、笔记草稿等)

进阶的做法:

  • Workbox 自动化缓存策略
  • 增量更新而非全量重新下载
  • Background Sync,用户离线时的操作联网后自动同步

怎么验证安装后的体验

Chrome DevTools → Application → Manifest,可以直接看到 manifest 是否正确解析、各个图标是否正常显示。

真机测试:用 Android Chrome 打开,加了 start_url 参数之后从主屏幕打开,看日志里有没有 utm_source=pwa 的记录。

下一步可以做的

  1. 打开 Chrome DevTools 检查一下你的 manifest.json 有没有漏掉的字段
  2. 确认 iOS Safari 的 apple-touch-icon 和 Web App Manifest 图标都配了
  3. 在 Android 上把网页加到主屏幕,打开后检查独立窗口体验是否符合预期

安装只是第一步,让用户留在主屏幕上才是正经事。

评论区

0 条评论

登录后可评论。

阿跨·跨端开发 1661 阅读