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

Firebase FCM消息无法通过PHP推送到苹果设备求助

问题分析与解决方案

你的核心问题是FCM消息结构不符合iOS APNs的规范要求:

  • Firebase控制台发送通知时,会自动生成符合APNs标准的消息体,包含notification字段,因此iOS设备能正常接收并弹出系统通知。
  • 你的PHP代码仅使用data字段发送消息,iOS系统在App后台/未启动状态下,不会主动处理纯data类型的消息,只有App前台运行时,Flutter的消息监听才能捕获到data内容。

修正后的PHP FCM代码

$serverKey = '你的FCM服务器密钥';
$url = 'https://fcm.googleapis.com/fcm/send';
$fields = array(
    'registration_ids' => [
        "dwUpMuQLfU1DtoVJtP9MF8:APA91bHLxdctbSvx-7e1YZTPwq6I0_A_lVpyTH5F6jLeIlnsmsdD_D6cqkym6XRoYOhCT6JYhubzaYmytb3P5Wyv6rJCR3FBDjpu0YIH803b0bl7eKEq3egdbXRUkH6PQzHkcelCGaEW",
        "ea2RfrXsT7CA51U0ZCLMqR:APA91bEcnGd69w8crkGx8MAVUsNbZqBScaNkgEmOuck-fKb0vYqtm741z9D3u0pSgVjQLxJG__8GAQzRQvTGYzaY6ve7WoPF7xGZozoOpnxHkTyMpRsLtCcML5XVNVvS-Me3A4MhjiaG"
    ],
    // 新增notification字段,满足APNs要求,确保iOS后台能触发系统通知弹窗
    'notification' => array(
        "title" => "Admin Responded to your Grievance",
        "body" => "Test Message",
        "sound" => "default"
    ),
    'data' =>  array(
        "time" => strtotime($date) * 1000,
        "type" => "notification",
        "sound" => "default",
        // 清理重复键,保留业务自定义数据
        "custom_message" => "Test Message"
    )
);
$fields = json_encode($fields);
$headers = array(
    'Authorization: key=' . $serverKey,
    'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
$result = curl_exec($ch);
curl_close($ch);
print_r($result);

关键注意事项

  1. 强制包含notification字段:iOS的APNs要求消息体必须包含notification来触发系统级通知,后台状态下纯data消息不会弹出通知,仅能在App前台被监听捕获。
  2. 清理重复键:原代码中data字段重复定义了message和time,JSON序列化时后定义的键会覆盖前者,需避免此类冗余。
  3. 字段对应规则:notification中的title对应通知标题,body对应通知内容,sound设为default可触发系统提示音。

若修正后仍无法接收,可排查以下点:

  • 确认registration_ids是iOS设备的有效FCM令牌(iOS与Android令牌格式不同,请勿混用)
  • 检查Firebase项目中iOS配置的p8文件是否正确关联,Bundle ID完全匹配
  • 查看FCM控制台的消息报告,确认消息是否成功送达APNs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:50:43