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

Firebase:使用PHP发送通知失败问题求助

我之前踩过这个坑!那个AndroidHive的教程是好几年前针对GCM的版本,现在GCM早就被Firebase Cloud Messaging(FCM)取代了,直接沿用原来的PHP代码肯定发不出通知。给你梳理几个必须调整的点,一步步来排查修复:

1. 替换API密钥为FCM服务器密钥

原来教程里的GCM API密钥已经失效,得换成FCM的服务器密钥:

  • 登录Firebase控制台进入你的项目
  • 点击右上角齿轮图标,选「项目设置」
  • 切换到「云消息传递」标签,复制里面的「服务器密钥」
  • 把PHP代码里原来的GCM密钥替换成这个新密钥
2. 更新请求的API端点

GCM的旧端点是https://android.googleapis.com/gcm/send,现在FCM要用新的端点:

https://fcm.googleapis.com/fcm/send

直接修改PHP中curl请求的URL即可。

3. 调整请求的JSON payload格式

FCM的消息格式和GCM有细微差异,比如推荐用to字段指定单设备令牌(原来的registration_ids也支持,但单设备用to更简洁),同时通知结构要符合FCM要求。示例代码如下:

$fields = array(
    'to' => '你的设备注册令牌',
    'notification' => array(
        'title' => '测试通知标题',
        'body' => '这是一条来自PHP的FCM通知',
        'sound' => 'default'
    ),
    // 如果需要传递自定义数据,保留data字段
    'data' => array(
        'custom_key' => 'custom_value'
    )
);
4. 确认请求头设置正确

FCM要求请求头必须包含两个关键项,确保你的PHP curl代码里的头是这样的:

$headers = array(
    'Authorization: key=' . '你的FCM服务器密钥',
    'Content-Type: application/json'
);
5. 开启调试查看错误信息

很多时候失败是因为有具体的错误但没被捕获,给PHP代码加上错误调试:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

$result = curl_exec($ch);
// 捕获curl错误
if (curl_errno($ch)) {
    echo 'Curl错误: ' . curl_error($ch);
}
curl_close($ch);
// 打印FCM返回的结果
var_dump($result);

运行后根据返回的错误信息(比如令牌无效、密钥错误等)针对性修复。

6. 验证设备注册令牌有效性

如果上面都调整了还是失败,先确认设备的注册令牌是否有效:用Firebase控制台的「测试消息」功能,输入这个令牌测试能否收到通知。如果收不到,说明令牌过期或无效,需要在Android端重新获取最新的FCM令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:01:04