Firebase Cloud Messaging(WebPush)令牌过期机制及推送可行性咨询
FCM Web Push 令牌过期与推送能力的疑问解答
好问题!咱们来一步步拆解你关心的几个点:
关于“未实现messaging().onTokenRefresh就无法给一周未访问的用户推送”的推测
你的推测是准确的。要知道,FCM Web Push令牌的有效期确实是一周左右(这个逻辑在Firebase SDK源码里有明确体现)。当令牌过期后,只有用户再次访问你的网站时,Firebase SDK才会自动生成新的令牌。如果没有实现onTokenRefresh方法,你就无法捕获到新令牌并更新到自己的服务器——后续你用旧的过期令牌发起推送请求时,FCM服务器会直接返回令牌无效的错误,自然没法推送给那些超过一周没访问的用户。
过期机制是否仅存在于浏览器端?
不完全是。Web Push令牌本质是浏览器与FCM推送服务之间的身份凭证:
- 浏览器端会在令牌到期后标记其失效,并且只有用户再次访问网站时才会触发新令牌的生成;
- 但FCM服务器端也会维护令牌的有效性校验逻辑,哪怕浏览器没主动通知过期,FCM在收到推送请求时也会检查令牌状态,过期或无效的令牌会被直接拒绝。
不过核心的过期触发点确实是在浏览器端——因为令牌是绑定到用户浏览器的会话/存储的,一旦浏览器端的令牌失效,对应的服务器端记录也就失去了作用。
FCM服务器端的令牌是否无需浏览器调用重新生成就不会过期?
这个理解有偏差。虽然FCM服务器不会主动去“过期”令牌记录,但令牌的有效性最终由浏览器和FCM的协议决定:
- 如果用户清除了网站的存储数据、卸载浏览器,或者浏览器主动吊销了令牌,哪怕你没触发刷新,FCM服务器也会在收到推送请求时判定令牌无效;
- 另外,就算没有这些主动操作,浏览器端的令牌一周后会自动失效,这时候你手里的服务器端令牌记录也变成了无效凭证,无法用来推送——必须等用户再次访问网站,SDK生成新令牌并更新到服务器后,才能恢复推送能力。
总结一下:想要保证对长期未访问用户的推送能力,onTokenRefresh是必须实现的,它能帮你自动捕获新令牌并同步到服务器,避免因为令牌过期导致推送失败。
内容的提问来源于stack exchange,提问作者Ilya Vassyutovich
相关产品推荐
相关产品推荐

