Firebase Android/iOS生产环境推送通知重复接收问题排查咨询
FCM生产环境重复推送排查方向
发送链路侧排查
- 不要仅依赖自身业务服务的发送日志,直接导出Firebase Cloud Messaging近7天的全量发送报告,核对重复消息对应的
message_id字段:如果同一条业务通知对应多个不同的message_id,说明发送链路存在未被业务日志捕获的重试行为。重点核查三个位置:业务服务集成的FCM Admin SDK是否开启了默认失败重试、HTTP连接池的超时阈值是否设置过短导致请求未等到FCM响应就触发重发、服务前置的负载均衡/反向代理层是否存在超时自动重发规则。 - 核查主题订阅的冗余映射:调用Admin SDK的
listTopicSubscriptions接口拉取异常主题的全量订阅列表,检查同一设备的FCM token是否被重复绑定到同一主题多次。Ionic/Angular应用如果在每次冷启动、用户登录时无判断直接调用主题订阅接口,很容易出现单token多绑定的问题,这个场景完全匹配你观测到的「先发通知重复、后发通知正常」特征——FCM侧会自动清理存在时间较长的冗余订阅绑定,后发通知触发时冗余绑定已经失效,就只会收到单条。
客户端&平台配置侧排查
- 检查推送插件初始化逻辑:Ionic生态常用的
@ionic-native/fcm、cordova-plugin-firebase、@capacitor/push-notifications插件如果在多个位置(启动路由守卫、登录页组件、全局服务)重复调用初始化、token注册方法,会导致单台设备生成多个有效FCM token,且所有token都会绑定到已订阅主题,服务端按主题推送时多个token同时收到消息,就会表现为单设备多条重复通知。可以在测试机上抓包确认APP启动时上报到业务后端的token数量,同时在Firebase Console设备列表核对同一设备实例ID下关联的有效token数。 - 清理iOS推送配置残留:进入Firebase Console项目设置的云消息传递板块,找到对应iOS应用的配置项,删除所有非当前在用的过期APNs SSL证书,仅保留最新上传的.p8密钥。如果之前上传的旧APNs证书没有被删除,Firebase会同时走证书、.p8密钥两条链路向iOS设备下发通知,直接导致重复推送。
快速验证方案
选取一台出现过重复推送问题的测试设备,记录其FCM token,调用接口将该token从所有已订阅主题中全部移除,等待10分钟后重新执行订阅逻辑,再按生产流程下发通知:如果重复问题消失,即可确认是冗余订阅绑定导致的故障。
- 临时关闭业务服务所有自定义重试逻辑,连续3天观测推送重复率变化,如果重复率直接降至0,即可定位为服务侧重试配置问题。
- 如果上述操作后问题仍存在,在Firebase Console新建一个测试主题,仅让测试设备订阅该新主题,按生产节奏连续下发通知:如果新主题无重复推送问题,说明旧主题存在历史残留的订阅绑定数据,全量重新同步一次存量用户的订阅关系即可解决。
内容的提问来源于stack exchange,提问作者Cheshire
相关产品推荐
相关产品推荐

