PWA中Push API收不到推送消息是怎么回事? 苗苗 提问于 2026-03-09 20:44:21 阅读 203 移动 我在做PWA的推送功能,已经成功注册了service worker,也拿到了用户的订阅信息,但调用后端发送推送后,手机上完全没反应。 我试过在Chrome DevTools里手动触发push事件,能收到,但真实从服务器发就不行。是不是VAPID配置有问题?或者需要HTTPS? 后端用的是Node.js,推送时返回状态码是201,看起来成功了,但前端就是没触发self.addEventListener('push')这个监听。 Push APIPWA移动 我来解答 赞 2 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 洛熙 ☘︎ Lv1 这个推送问题我遇到过太多次了,让我帮你捋一下。首先HTTPS是必须的,但不是你问题的原因,因为你说DevTools手动触发能收到。 VAPID配置确实是最常见的坑点,特别是这几个地方容易出错: 1. 检查你的公钥私钥有没有搞混,后端推送时必须用VAPID私钥签名 2. 确保订阅对象里的endpoint是正确的FCM地址 3. 后端推送时headers里必须包含Authorization和Crypto-Key 给你个Node.js推送的示例代码: const webpush = require('web-push'); webpush.setVapidDetails( 'mailto:your@email.com', '公钥', '私钥' ); webpush.sendNotification(subscription, payload) .catch(err => console.error('推送失败:', err.statusCode, err.body)); 另外检查下手机端的通知权限有没有被关闭,有些手机会默认阻止后台推送。建议先用console.log在service worker里打印推送事件,确认到底有没有触发。 如果还不行,把后端推送时的完整请求和响应贴出来看看,重点检查返回的201是真实成功还是假成功。 回复 点赞 2026-03-09 20:45 加载更多 相关推荐 1 回答 22 浏览 PWA推送通知在iOS上为啥不生效? 我用Push API做了个PWA,安卓上能正常收推送,但iOS Safari完全没反应,是不是iOS根本不支持? 我已经注册了service worker,也调用了Notification.reque... ❤素香 移动 2026-02-28 12:32:23 2 回答 48 浏览 为什么我的PWA推送通知无法在后台收到消息? 我按照文档配置了PWA的Push API,能在前台收到通知,但页面关闭后就完全没反应了。服务端用的是Node.js发送POST请求,客户端订阅也成功获取了endpoint,这是哪里出问题了? 尝试过在... Mr-建英 移动 2026-02-04 12:49:26 1 回答 33 浏览 PWA消息推送注册时提示”无效的VAPID密钥”怎么办? 我在Vue项目里集成PWA推送功能,按照教程用firebase-messaging初始化后,调用navigator.serviceWorker.register一直报错"invalid VAPID k... 司马瑞静 前端 2026-02-10 09:24:37 2 回答 81 浏览 用Push API发通知时,为什么样式在Service Worker里不生效? 我按照教程在Service Worker里用Push API发送通知,但自定义的CSS样式完全没效果。比如我想让通知背景变绿色,像这样写: .notification { background-col... 彦杰 ☘︎ 交互 2026-01-28 22:40:38 2 回答 98 浏览 React PWA中使用Notification API点击按钮没反应怎么办? 我在React组件里用Notification API做消息提醒,按教程写了请求权限和发送通知的函数,但点击按钮完全没反应。手机真机测试也没弹出通知,控制台也没报错。代码检查了好几遍,哪出问题了? 这... Mr.静云 移动 2026-02-08 13:51:25 2 回答 100 浏览 React PWA推送通知订阅后无法收到消息怎么办? 我按照文档给React PWA添加推送通知功能,用户订阅成功后一直没收到测试消息。服务端说推送成功了,但手机和浏览器都没反应,这是哪里出问题了? 我的订阅代码是这样的: async function ... UI子轩 移动 2026-02-05 02:50:28 2 回答 49 浏览 用了Server Push反而加载更慢怎么办? 我给网站配置了HTTP/2 Server Push推送关键CSS和JS,但发现页面加载时间反而比之前多了200ms,这是为什么呢? 尝试过在nginx里这样配置: http2_push_preload... UI郭云 优化 2026-02-05 11:42:37 0 回答 2 浏览 PWA中fetch拦截不生效是怎么回事? 我在写一个PWA应用,想用Service Worker拦截网络请求做缓存,但发现fetch事件根本没触发。注册了SW也成功了,但页面请求还是直接走网络,没进self.addEventListener(... Good“雨婷 前端 2026-03-10 13:32:20 1 回答 6 浏览 Jira权限配置不生效,前端调用API总被拒绝怎么办? 我们团队在对接Jira REST API时,明明给应用账号配了“浏览项目”和“编辑问题”权限,但前端调用创建issue接口还是返回403。是不是权限配置还有其他地方要设置? 试过在Jira项目设置里把... 技术志青 工具 2026-03-08 20:07:22 1 回答 13 浏览 HTTP/2推送怎么没生效?首屏资源还是慢 我在用 Nginx 配置 HTTP/2 推送关键 CSS,但 Chrome DevTools 里看不到 pushed 资源,首屏加载速度也没提升,是不是哪里配错了? 我试过在响应头加 Link pre... 长孙志达 优化 2026-03-08 10:33:19
VAPID配置确实是最常见的坑点,特别是这几个地方容易出错:
1. 检查你的公钥私钥有没有搞混,后端推送时必须用VAPID私钥签名
2. 确保订阅对象里的
endpoint是正确的FCM地址3. 后端推送时headers里必须包含Authorization和Crypto-Key
给你个Node.js推送的示例代码:
另外检查下手机端的通知权限有没有被关闭,有些手机会默认阻止后台推送。建议先用
console.log在service worker里打印推送事件,确认到底有没有触发。如果还不行,把后端推送时的完整请求和响应贴出来看看,重点检查返回的201是真实成功还是假成功。