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

使用firebase/token-php生成Token后FCM报InvalidRegistration错误求助

排查FCM "InvalidRegistration" 错误的步骤

首先明确:InvalidRegistration错误仅与你传入的设备注册Token(代码中的$firebaseId)相关,和你生成的服务端JWT无关(你已经确认后端能正常发送FCM消息,说明FCM_SERVER_KEY是有效的)。以下是具体排查点:

1. 验证$firebaseId的有效性

  • 确认$firebaseId是客户端通过Firebase SDK正确获取的设备Token:
    • Android端:需调用FirebaseMessaging.getInstance().getToken()获取
    • iOS端:需调用Messaging.messaging().token(completion:)获取
    • Web端:需调用messaging.getToken({ vapidKey: 'YOUR_VAPID_KEY' })获取
  • 检查Token是否已失效:设备卸载重装、恢复出厂设置、Token超过6个月未使用,都会被FCM标记为无效。可以用新生成的测试Token替换$firebaseId重试。

2. 检查$firebaseId的格式

  • 有效设备Token是长度约150-200的字符串,仅包含字母、数字、-和_,无空格、换行或其他特殊字符。
  • 打印$firebaseId的值,确认是否存在截断、空格或格式错误(比如从数据库读取时是否被转义)。

3. 确认环境匹配

  • 你的服务账号属于nkikku项目,但aud字段写的是nnchat-qa,虽然这不影响当前错误,但需确保:
    • FCM_SERVER_KEY对应的项目,和生成$firebaseId的App项目完全一致(不能用生产环境Key发送到测试环境设备,反之亦然)。

4. 检查FCM请求字段的正确性

  • 打印json_encode($fields)的结果,确认registration_ids字段名是否正确(FCM要求复数形式,若你的KeyFirebaseValue::KEY_REGISTRATION_IDS定义为单数registration_id,会导致FCM无法识别目标Token)。
  • 确认$firebaseId不为空或null:若数组中传入空值,FCM会返回InvalidRegistration。

5. 额外验证:单独测试Token有效性

用一个已知有效的测试Token替换$firebaseId,运行你的发送代码。如果成功,说明原$firebaseId确实无效;如果仍然报错,检查请求头或字段是否有其他错误(比如Content-Type是否正确设置为application/json)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:10:38