You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress中Firebase FCM推送:发送者无法收到自身推送通知

问题排查思路及解决方案

首先明确:FCM本身没有默认禁止用户接收自身推送的规则,这个问题大概率是WordPress生产环境的差异导致的,以下是具体排查方向:

1. 检查WordPress插件或主题的拦截/修改

  • 排查安全类、缓存类或推送相关插件,部分插件可能为了避免冗余,在请求发送前过滤了registration_ids数组,移除了当前登录用户的token。本地环境可能未安装该插件或未开启对应功能,所以无异常。
  • 临时禁用所有非必要插件,切换到WordPress默认主题(如Twenty Twenty-Four),测试是否能收到推送,逐步定位问题插件。

2. 对比本地与生产环境的cURL请求参数

  • 在生产环境的PHP代码中,打印发送给FCM的完整请求数据,和本地环境的请求做对比,确认发送者的token确实被包含在registration_ids数组里,没有被篡改。
  • 示例打印代码(添加在cURL执行前):
    // 打印请求数据到服务器日志
    error_log('FCM Request Data: ' . json_encode([
        'registration_ids' => $registration_ids,
        'notification' => $notification_payload
    ]));
    
    查看服务器日志,确认发送者token存在且格式正确。

3. 验证生产环境中发送者token的有效性

  • 单独用发送者的token做一次单设备推送测试,看是否能收到。如果单推也失败,说明该token在生产环境下可能已失效(比如设备卸载重装、APP更新导致token变更,但WordPress数据库里的token未同步更新)。
  • 查看FCM返回的响应results字段,是否有针对该token的错误信息(如InvalidRegistration),以此判断token状态。

4. 检查PHP环境配置差异

  • 本地和生产环境的PHP版本、cURL扩展版本可能存在差异,部分旧版本cURL在处理数组时可能存在隐性问题,导致发送者token被忽略。
  • 确认生产环境的cURL配置,比如是否开启CURLOPT_SSL_VERIFYPEER(建议开启,但需确保SSL证书配置正确),是否有代理、防火墙拦截了请求内容。

5. 排查应用端的特殊逻辑

  • 检查APP端是否有针对生产环境的特殊判断:比如如果通知的发送者ID等于当前用户ID,就不展示通知。本地环境可能用的是测试ID,未触发该逻辑,而生产环境用真实ID触发了规则。

内容的提问来源于stack exchange,提问作者Jorge Junior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 05:25:24