配了三年PWA,每次用户装到一半就跑了——今天发现根子在那个浏览器自己控制的弹窗时机,beforeinstallprompt把这件事彻底变了

每次用户说”我试过了但装不上”,我都以为是他们操作有问题。

直到我自己用 Chrome 跑了一个真实电商 PWA,才发现在座所有人都是冤大头——那个安装弹窗,浏览器自己决定什么时候弹、弹不弹,根本不归你管。

这件事,在 2026 年被 beforeinstallprompt 这套 API 彻底接管了。

旧方式的两个致命问题

第一个是时机。Chrome 默认在你页面加载完几秒就弹,用户这时候根本还没体验到你的产品价值,转化率惨不忍睹。Google 自己的数据:Android PWA 安装率从 1% 到 8% 不等,差距主要就卡在这里——不是产品问题,是弹窗时机问题。

第二个是样式。浏览器原生的那个 mini-infobar 就是一个灰条,用户要么当广告划掉,要么装完都不知道自己刚才做了什么。你的品牌感知在那一刻完全断了。

beforeinstallprompt 把控制权还给你

这个事件的逻辑很简单:浏览器检测到你的 PWA 满足安装条件时,会触发这个事件——但不弹窗,把事件给你。你决定什么时候弹、怎么弹、弹什么。

标准流程是这样:

let deferredPrompt;

window.addEventListener('beforeinstallprompt', (e) => {
  // 阻止浏览器默认弹窗
  e.preventDefault();
  // 存着,等你准备好再弹
  deferredPrompt = e;
  // 在合适的时机展示你自己的安装提示
  showInstallPromotion();
});

用户点击你的自定义按钮时,再调用 deferredPrompt.prompt() 触发系统弹窗。注意这个事件只能用一次,用完就废了,所以要存住。

什么时候弹才是正确的

Google web.dev 团队的数据:页面加载时弹窗 vs 用户完成关键行为后弹窗,转化率差 2-3 倍。

实践里有效的触发时机:

  • 用户完成注册、提交表单
  • 看完一段内容、看完 3+ 页面
  • 购物车加了一件商品
  • 回访用户第二次访问时

本质逻辑是:用户在你的产品里已经得到了价值,才更容易把这个”附加动作”完成。

iOS 那边没有这个事件

这是容易踩的坑:iOS Safari 压根不支持 beforeinstallprompt,用户只能去分享菜单里手动点”添加到主屏幕”。你没法自动化这个流程,只能在 UI 上引导。

function isIOS() {
  return /iphone|ipad|ipod/i.test(navigator.userAgent);
}

function isStandalone() {
  return window.matchMedia('(display-mode: standalone)').matches;
}

// iOS 用户看到的是提示文字,不是安装按钮
if (isIOS() && !isStandalone()) {
  showIosInstallHint();
}

manifest 里那几个字段直接决定弹窗转化

Chrome 在 Android 上展示的安装弹窗,现在会直接显示 manifest 里的 description 和截图。这两个字段不是装饰,是说服材料。

  • description:写成用户收益,不要写功能列表
  • screenshots:放真实 App 截图,不是启动页
  • icons:192px + 512px + maskable,防止 Android 圆角裁切

Chrome 的enhanced install dialog 把原来那个小灰条升级成了接近应用商店的体验——你的 manifest 内容直接决定用户在那个弹窗里看到什么。

迁移检查清单

你的 PWA 安装体验要上线,先确认这几点:

  • HTTPS 部署(本地开发不算)
  • manifest.json 包含 name/short_name/start_url/display/icons
  • Service Worker 已注册且有 fetch 事件处理
  • 用户至少访问两次、间隔 5 分钟以上
  • description 和 screenshots 字段已填写
  • beforeinstallprompt 事件已拦截、已防止默认行为
  • 安装按钮在用户有效行为后触发

任何一条不满足,Chrome 不会触发事件,你存的 deferredPrompt 就是 null,你的安装流程永远不会跑起来。

这件事把什么变了

以前 PWA 安装是浏览器的”好意”——它高兴了弹一个,用户爱装不装。

现在控制权在你的产品逻辑里:用户在什么时候体验到了价值,你就什么时候弹出安装入口,弹窗里展示的是你精心准备的截图和说明,而不是一行应用名加个图标。

安装这件事,从被动变成主动,从浏览器的变成你的。

评论区

0 条评论

登录后可评论。

阿跨·跨端开发 31 阅读