Firebase 云消息传递 - 发布消息说 JSON 有效负载无效

Posted

技术标签:

【中文标题】Firebase 云消息传递 - 发布消息说 JSON 有效负载无效【英文标题】:Firebase Cloud Messaging - Posting Message Says Invalid JSON Payload 【发布时间】:2019-06-12 00:18:25 【问题描述】:

所以我使用 jQuery Ajax 发布使用我必须从某人的 node.js 应用程序获取的不记名令牌,因为我找不到有关如何使用您的首选语言获取不记名令牌的 Google 文档仅限 FCM 使用。我正在使用JSON.stringify 准备有人在此处的*** 上显示的有效负载数据。我试过没有,但我只收到Invalid_Arguments 的基本错误消息。使用JSON.stringify 会显示更多错误。它指出 "to" 和 "notification" 属性是未知名称,但它们是 Google 文档中使用的属性名称。那我做错了什么?

这是有人说JSON.stringify 工作的链接。在此之前,我尝试不使用JSON.stringify,这导致Invalid JSON Payload 和我提出这个问题的原因。

send post request to firebase cloud messaging by ajax?


  "error": 
    "code": 400,
    "message": "Invalid JSON payload received. Unknown name \"to\": Cannot find field.\nInvalid JSON payload received. Unknown name \"notification\": Cannot find field.",
    "status": "INVALID_ARGUMENT",
    "details": [
      
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          
            "description": "Invalid JSON payload received. Unknown name \"to\": Cannot find field."
          ,
          
            "description": "Invalid JSON payload received. Unknown name \"notification\": Cannot find field."
          
        ]
      
    ]
  



$.post(
            method: "POST",
            url: "https://fcm.googleapis.com/v1/projects/floridarecycling-b91ec/messages:send",
            dataType: "json",
            contentType: "application/json",
            headers: 
                'Authorization': 'Bearer ' +
                    'ya29.c.ElqUBiCx...wyKqUqKlrg7yhPw'
            ,
            data: JSON.stringify(
                "to": "user_token",
                "notification": 
                    "title": "Test",
                    "body": "test"
                
            )
            success: function () 
                console.log("Success")
            ,
            error: function (err) 
                console.log("error ", err)
            
        );`

【问题讨论】:

仅供参考,您可以使用编辑器中的 按钮缩进代码块。 我总是尝试,但每次我做的页面错误,我不能发布。如果我删除页面上的每个字符,我仍然会显示存在错误,我必须丢弃并重新开始。但感谢您的编辑。 “错误输出”是什么意思?人们一直将文本格式化为代码。 如果我错了,请纠正我,但JSON.stringify 不返回 String 值吗?该请求需要一个实际的 JSON 有效负载。不是 JSON 格式的字符串(不确定是否仅通过设置 contentType 会立即处理)您可以尝试sending the request using Postman 看看它是否仍然返回相同的错误?您提到的 *** 帖子的链接也可能会有所帮助。 @DougStevenson 如果您使用大括号按钮并且间距有错误,那么您会在框周围看到红色轮廓、红色感叹号和文字说明。即使删除整个框中的所有文本,它也不会消失。 【参考方案1】:

您正在将旧版 JSON 发送到 v1 端点。

如果您使用“to”字段,则需要发送到旧版 Firebase 云消息传递端点,即:

 https://fcm.googleapis.com/fcm/send

如果您想使用新的 Firebase 云消息传递,新格式和参数的文档在这里:

https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages

【讨论】:

以上是关于Firebase 云消息传递 - 发布消息说 JSON 有效负载无效的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 云消息传递重复通知

无法在 angularjs App 中配置 Firebase 云消息传递。

Firebase 云消息传递 requireInteraction 不起作用

无法连接到 Firebase 以进行云消息传递

Firebase 云消息传递消息日志

Firebase 云消息传递 - 有多个主题 - 没有消息重复