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

WordPress环境下Firebase推送通知无法正常送达问题

WordPress环境下FCM推送返回成功但用户收不到通知的排查与解决

1. 改用WordPress官方HTTP请求函数

WordPress的第三方插件(缓存、安全类)或自带机制可能干扰file_get_contents/curl请求,导致请求被篡改或缓存。建议使用WP官方推荐的wp_remote_post,兼容性更强:

function send_fcm_notification($title, $message, $token) {
    $url = 'https://fcm.googleapis.com/fcm/send';
    $server_key = 'your_server_key';
    
    $request_body = [
        "notification" => [
            "title" => $title,
            "body"  => $message
        ],
        "priority" => "high",
        "to" => $token
    ];
    
    $response = wp_remote_post($url, [
        'headers' => [
            'Content-Type' => 'application/json',
            'Authorization' => 'key=' . $server_key
        ],
        'body' => json_encode($request_body),
        'timeout' => 15,
        'redirection' => 0,
        'blocking' => true,
        'sslverify' => true
    ]);
    
    return is_wp_error($response) ? $response->get_error_message() : wp_remote_retrieve_body($response);
}

2. 检查FCM令牌的转义问题

WordPress可能自动转义URL参数中的特殊字符(如%3A被转成%253A),导致令牌失效但FCM仍返回成功。处理令牌时需解码还原:

$token = isset($_GET['token']) ? rawurldecode($_GET['token']) : '';

验证方法:输出$token值,和非WP环境的原始令牌对比,确保完全一致。

3. 排查输出缓冲与内容截断问题

WordPress的输出缓冲可能延迟请求发送,或截断消息内容导致推送失效。推送前可关闭缓冲:

ob_end_clean();
// 执行推送代码
ob_start(); // 若需恢复输出缓冲则开启

同时检查消息长度:FCM通知标题限制约50字符、正文约150字符,超长可能被静默丢弃。

4. 避免任务调度冲突

若使用WP Cron触发推送,需确保任务仅执行一次,避免重复请求被FCM静默处理。即时推送场景建议直接同步执行代码,不依赖Cron。

5. 排查前端JS冲突

WordPress可能加载其他版本的Firebase或JS库,干扰Service Worker运行。检查浏览器控制台是否有JS错误,确保仅加载必要的Firebase SDK(6.6.2版本),避免与其他插件冲突。

内容的提问来源于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 22:10:41