生产环境特定FCM推送通知未接收(Laravel/Flutter)求排查原因
特定FCM生日通知生产环境无法接收的排查方向
1. 设备端令牌与权限问题
- 生产环境用户的FCM令牌可能失效:用户卸载重装应用、清除数据会导致令牌过期,FCM服务器会返回
invalid_registration或not_registered错误,可检查Laravel的FCM发送日志确认。 - 用户设备通知权限关闭:生产环境部分用户可能手动关闭应用通知权限,而预发布测试设备均开启权限,导致通知无法展示。
2. 通知内容与配置差异
- 生产环境通知触发FCM过滤机制:若标题/内容含敏感关键词、不符合合规要求,会被FCM拦截,预发布环境过滤规则更宽松则不受影响。可对比预发布与生产环境的通知payload,确认字段、内容是否一致。
- 通知优先级设置问题:若生产环境生日通知优先级设为
normal,用户设备在省电/后台状态下可能被延迟或拦截;预发布测试设备处于活跃状态则能正常接收,可检查发送时的priority参数是否为high。
3. 批量推送的限制与队列问题
- FCM批量推送配额限制:生产环境用户量远大于预发布,批量推送可能触发FCM发送频率阈值,导致限流。可查看Laravel队列日志或FCM控制台配额使用情况。
- 队列负载过高:生产环境队列因负载大,生日通知发送任务被延迟或失败,预发布队列负载低则任务及时执行。可检查队列失败任务记录,确认是否有生日通知发送失败。
4. 生产环境FCM配置与网络问题
- FCM配置不一致:虽然用同一发送函数,但生产环境的
FCM_KEY、FCM_PROJECT_ID可能有误,或服务账号权限不足。可核对预发布与生产环境的.env配置。 - 网络限制:生产服务器到FCM服务器的网络存在防火墙/代理拦截,导致推送请求无法送达。可在生产服务器测试telnet连接FCM端口(5228、5229、5230)。
5. 数据库数据准确性问题
- 生日数据格式错误:生产环境用户生日日期格式不一致,导致筛选当日生日用户时匹配失败,实际未生成推送请求。可查询数据库,确认当日生日用户数量及发送任务生成情况。
内容的提问来源于stack exchange,提问作者aiiyinnchan
相关产品推荐
相关产品推荐

