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
相关产品推荐
相关产品推荐

