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

PHP中FCM发送消息时出现InvalidRegistration错误求助

解决FCM发送消息时的[InvalidRegistration]错误

嘿,我来帮你搞定这个FCM的错误!InvalidRegistration这个错误说白了就是你传给FCM的设备注册令牌(也就是代码里的$id)有问题,FCM认不出它。结合你给出的代码片段,我整理了几个最可能的原因和修复步骤:

  • 首先检查是否漏了to字段
    看你的代码里,$fields数组好像没包含'to' => $id这个关键项!FCM必须知道要把消息发给哪个设备,所以这个字段是必不可少的。你得把设备令牌赋值给to字段,比如:

    $fields = array(
        'data' => array("message" => $message),
        'notification' => array(
            "body" => "这里填你的通知内容",
            "title" => "通知标题"
        ),
        'to' => $id // 必须加上这个!
    );
    
  • 验证设备令牌的有效性

    • 先确认$id的值是不是正确的FCM令牌格式:通常是一串很长的字符串,类似APA91bFyOiLtJKim7FIKpW...这种。你可以在代码里加个调试输出看看:
      var_dump($id); // 调试时打印令牌,检查是否为空、格式错误
      
    • 令牌过期、被撤销(比如用户卸载了应用)或者设备重置后都会失效,这种情况下你需要让客户端重新获取新的令牌并更新你的存储。
  • 检查JSON格式是否完整
    从你给出的代码片段看,notification的body后面好像没写完,这会导致JSON格式错误,也可能间接引发问题。确保$fields里的所有字段都是完整的,没有语法错误。

  • 验证Server Key的正确性
    虽然错误是令牌相关,但也得确认你的GOOGLE_SERVER_KEY是从Firebase控制台的云消息服务里获取的服务器密钥,而不是Web API密钥或者其他类型的密钥,用错密钥也可能导致奇怪的错误。

  • 捕获响应并处理无效令牌
    你可以在发送请求后解析FCM的响应,明确错误原因,还能处理无效令牌的清理工作:

    $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($fields));
    
    $result = curl_exec($ch);
    curl_close($ch);
    
    // 解析响应查看详情
    $response = json_decode($result, true);
    if (isset($response['results'][0]['error'])) {
        $error = $response['results'][0]['error'];
        if ($error === 'InvalidRegistration') {
            error_log("无效的FCM令牌:{$id}");
            // 这里可以写逻辑从数据库中移除这个无效令牌
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:37:57