iOS应用FCM推送异常:PHP返回成功但收不到通知,控制台也失效
哥们儿,我碰到过好几次这种FCM推送的坑,咱们一步步排查解决:
一、先确认设备令牌(Tokens)的有效性
这是最常见的问题:
- iOS的APNs令牌会在很多场景下刷新(比如重装APP、系统大版本更新、用户切换Apple ID),如果你的服务端存的是旧令牌,FCM会标记这个令牌为无效,之后不管是接口还是控制台发送都会失败。
- 先去Firebase控制台的Cloud Messaging模块,找到之前成功发送的记录,对比现在服务端用的令牌是否一致;另外一定要在APP里集成FCM的令牌刷新回调,确保每次启动APP都能获取最新令牌并同步到服务端。
二、检查PHP接口的Payload格式是否符合iOS的FCM要求
你的代码只贴了一部分,iOS对FCM的Payload格式有严格要求,尤其是通知类消息:
- 如果是要在前台/后台都能弹出通知的通知消息,必须包含
notification字段,而且要带上sound(iOS需要这个字段触发通知提示音);如果是数据消息(需要APP自己处理逻辑),要确保data字段格式正确,同时APP的Info.plist要配置remote-notification后台权限。 - 给你一个符合要求的PHP Payload示例:
function send_notification ($tokens, $message) { $url = 'https://fcm.googleapis.com/fcm/send'; $server_key = '你的Firebase服务器密钥'; // 从Firebase控制台项目设置->云消息传递获取 $headers = [ 'Authorization: key=' . $server_key, 'Content-Type: application/json' ]; $fcm_payload = [ 'registration_ids' => $tokens, // 多设备发送用这个,单设备用'to' => $token 'notification' => [ 'title' => '你的通知标题', 'body' => '你的通知内容', 'sound' => 'default' // 必须加这个,iOS才会弹出通知 ], 'priority' => 'high' // iOS后台推送需要高优先级才能及时送达 ]; $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_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fcm_payload)); $result = curl_exec($ch); curl_close($ch); // 一定要打印返回结果,排查隐藏错误 var_dump($result); return $result; }
三、排查FCM返回的隐藏错误
虽然你的接口说返回成功,但FCM经常会返回"成功"但包含无效令牌的细节,比如返回里有"results": [{"error": "InvalidRegistration"}],这就说明令牌无效。所以一定要把接口的返回值打印出来,看具体的错误信息,这是快速定位问题的关键。
四、检查iOS设备端的配置和状态
- 确认设备的通知权限是开启的:打开系统设置->通知->你的APP,确保允许通知、声音、Badge都勾选了。
- 检查APP的
Info.plist配置:必须添加UIBackgroundModes,并包含remote-notification值,这样APP在后台才能接收推送。 - 如果是iOS 13及以上版本,静默推送(只有数据没有通知弹窗)需要额外添加
content-available: 1字段,而且不能同时包含notification字段,否则会被系统拦截。
五、重置FCM设备注册状态
如果之前用无效令牌发送过请求,FCM可能会把这个设备的注册状态标记为无效,导致控制台也发不了。可以试试:
- 在APP里调用
Messaging.messaging().deleteToken()删除当前令牌,然后重启APP获取新的令牌。 - 把新令牌更新到服务端,再分别用Firebase控制台和PHP接口测试推送。
内容的提问来源于stack exchange,提问作者f rahimi
相关产品推荐
相关产品推荐

