Chrome下FCM推送通知失效:仅重装新版恢复,求原因与方案
Chrome推送通知(FCM/GCM)显示"waiting for Backoff"问题解析
为什么更新Chrome无法解决问题?
Chrome的更新采用增量覆盖模式,会完整保留用户的本地配置数据——包括GCM/FCM服务的连接状态缓存、设备注册令牌记录、退避机制触发标记等。你遇到的waiting for Backoff状态,是GCM服务因之前的连接失败触发了指数退避策略,这个退避状态存在本地持久化存储中,更新浏览器不会清理这些损坏的配置项,所以问题无法通过更新解决。
无需重装Chrome的解决方案
以下是更彻底的修复步骤:
重置Chrome通知权限与基础设置
- 打开
chrome://settings/content/notifications,清除所有网站的通知权限,再重新为你的Angular应用授权通知权限 - 进入
chrome://settings/advanced,找到「重置并清理」→「重置设置为原始默认值」(此操作不会删除书签、密码,但会重置扩展、权限、偏好设置等)
- 打开
彻底清除GCM/FCM本地存储目录
关闭Chrome后,删除以下两个核心存储文件夹(不同系统路径不同):- Windows:
C:\Users\[你的用户名]\AppData\Local\Google\Chrome\User Data\Default\Push Messaging和C:\Users\[你的用户名]\AppData\Local\Google\Chrome\User Data\Default\GCM Store - macOS:
~/Library/Application Support/Google/Chrome/Default/Push Messaging和~/Library/Application Support/Google/Chrome/Default/GCM Store - Linux:
~/.config/google-chrome/Default/Push Messaging和~/.config/google-chrome/Default/GCM Store
重启Chrome后,GCM服务会重新初始化这些目录
- Windows:
强制刷新FCM注册令牌
在你的Angular应用代码中,调用Firebase获取令牌时添加forceRefresh: true参数,强制清除旧的失效令牌并重新注册:import { getToken } from "firebase/messaging"; import { messaging } from "./firebase-config"; async function refreshFCMToken() { const token = await getToken(messaging, { vapidKey: "你的VAPID公钥", forceRefresh: true // 强制刷新令牌 }); // 将新令牌同步到你的后端 }确认Chrome后台运行权限
打开chrome://settings/system,确保「继续运行后台应用,即使Chrome已关闭」处于开启状态——GCM推送服务需要后台维持长连接,关闭此权限会导致连接异常触发退避
内容的提问来源于stack exchange,提问作者Hashim Ikram
相关产品推荐
相关产品推荐

