在 FCM HTTP v1 API 中检测无效设备令牌的方法

问题描述 投票:0回答:3

我们正在使用 FCM HTTP v1 API 发送推送通知。

当我们的用户注册他们的设备令牌时,我们的推送服务器只是将其存储到数据库而不进行验证,因为 FCM 不提供令牌验证 API。

推送服务器唯一可以检测设备令牌是否有效的时间是通过 FCM 发送推送通知时。

根据FCM 注册令牌管理,如果设备令牌无效,FCM 服务器会响应 UNREGISTERED 或 INVALID_ARGUMENT。

但是,使用无效负载时也可能返回 INVALID_ARGUMENT 代码。因此我们无法区分无效设备令牌和无效负载之间的错误。

以下是分别使用无效设备令牌和无效负载时 FCM 服务器的实际响应。

{
  "error": {
    "code": 400,
    "message": "The registration token is not a valid FCM registration token",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
        "errorCode": "INVALID_ARGUMENT"
      }
    ]
  }
}
HTTP/1.1 400 Bad Request

{
  "error": {
    "code": 400,
    "message": "Invalid JSON payload received. Unknown name \"priority\" at 'message': Cannot find field.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "field": "message",
            "description": "Invalid JSON payload received. Unknown name \"priority\" at 'message': Cannot find field."
          }
        ]
      }
    ]
  }
}
firebase-cloud-messaging
3个回答
0
投票

当令牌具有正确的格式但其用户不再活跃时,您将收到 UNREGISTERED 响应,指示您应该从后端删除该令牌。

但是,如果您发送的令牌没有有效的格式(例如,它已在后端修改或被截断),您将收到 INVALID_ARGUMENT。如果是这种情况,您可能需要检查您的代码,因为您可能正在某处(在应用程序或后端)修改令牌。也许您必须手动检测并删除这些令牌。

一旦解决了这个问题,您就不必再担心删除令牌的 INVALID_ARGUMENT 响应,除非您进行进一步的更改再次损坏它们。


0
投票

您必须查找“错误请求”(400) 或“未找到”(404) 状态代码并删除/刷新 fcm 令牌。

阅读 fcm 文档的这一部分:检测无效令牌响应...


0
投票

您能否提供解决方案,说明如何修复错误,因为我在向客户端设备推送通知时遇到相同的错误。
我正在使用 fcm 电容器插件 并收到错误 Response: { "error": { "code": 400, "message": "注册令牌不是有效的 FCM 注册令牌", "status": "INVALID_ARGUMENT", "details": [ { "@类型": "type.googleapis.com/google.firebase.fcm.v1.FcmError", "errorCode": "INVALID_ARGUMENT" } ] } }

© www.soinside.com 2019 - 2024. All rights reserved.