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

Firebase Cloud Messaging浏览器推送通知未接收问题排查(PHP REST API)

解决FCM浏览器推送通知接收失败问题

针对你遇到的FCM显示已发送但浏览器无接收的问题,从操作流程和代码来看,存在几个关键排查点和代码修正项:

一、代码中的明显错误

1. 令牌被不必要转义

你的getUserToken函数使用htmlentities处理令牌,这会破坏FCM令牌的原始格式(令牌包含特殊字符时会被转义,比如&变成&),导致FCM无法匹配到正确设备。

修正:

function getUserToken( $userId )
{
    return $_POST['tokenDest']; // 移除htmlentities转义
}

2. CURLOPT_POST参数错误

CURLOPT_POST需要传入布尔值true表示启用POST请求,而非字符串'POST',虽然curl可能兼容,但不符合规范的写法可能导致请求异常。

修正:

CURLOPT_POST => true,

3. 未捕获FCM响应信息

当前代码只打印了请求体,没有输出FCM的返回响应,无法确认请求是否真的被正常处理(FCM报告显示已发送可能只是接收了请求,但实际可能存在令牌无效等隐性错误)。

添加响应捕获:

$response = curl_exec($curl);
echo "FCM响应:" . $response; // 打印响应内容排查问题

二、浏览器与Service Worker配置检查

1. 浏览器状态与权限

  • 确保浏览器未处于隐身模式,FCM推送无法在隐身窗口中接收
  • 检查浏览器通知权限是否开启(设置→隐私与安全→通知,确认目标网站权限为允许)
  • 浏览器需支持Service Worker和Push API(主流Chrome、Firefox等均支持,需确保版本不老旧)

2. Service Worker配置

FCM浏览器推送依赖Service Worker处理推送事件,必须满足:

  • 存在sw.js文件,放置在网站根目录(或配置正确的scope)
  • sw.js中包含push事件监听,用于展示通知:
self.addEventListener('push', function(event) {
  const payload = event.data ? event.data.json() : {};
  const notificationOptions = {
    body: payload.notification?.body || '新通知',
    title: payload.notification?.title || '通知',
    icon: '/path/to/your/icon.png' // 需替换为实际图标路径
  };

  event.waitUntil(
    self.registration.showNotification(notificationOptions.title, notificationOptions)
  );
});
  • 页面中已正确注册Service Worker并初始化FCM:
// 注册Service Worker
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw.js')
  .then(registration => {
    console.log('Service Worker注册成功:', registration);
    // 初始化FCM
    const messaging = firebase.messaging();
    messaging.useServiceWorker(registration);
    // 请求通知权限并获取令牌
    messaging.requestPermission()
    .then(() => messaging.getToken())
    .then(token => {
      console.log('设备令牌:', token);
      // 将令牌发送到后端保存
    });
  });
}

三、FCM权限与请求验证

  • 确认你的Bearer Token拥有firebase.messaging.send权限,可通过Google Cloud IAM控制台检查服务账号权限
  • 验证令牌有效性:可通过FCM v1 API的响应确认令牌是否仍有效,过期或失效的令牌会导致推送无法送达

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:01:07