接收到无效的JSON负载。未知名称单击\u操作

接收到无效的JSON负载。未知名称单击\u操作,json,push-notification,firebase-cloud-messaging,service-worker,progressive-web-apps,Json,Push Notification,Firebase Cloud Messaging,Service Worker,Progressive Web Apps,所以我现在正在开发一个PWA 我现在正在使用推送通知,我已经能够通过以下非常简单的JSON结构接收后台和前台通知 { "message":{ "token":"aValidToken", "notification": { "title": "New Content!", "body": "A new video has been uploaded." } } } 我还能够添加一个包含其他信息的数据成员,并且仍然可以在不带来不便的情况下收

所以我现在正在开发一个PWA

我现在正在使用推送通知,我已经能够通过以下非常简单的JSON结构接收后台和前台通知

{
  "message":{
    "token":"aValidToken",
    "notification": {
      "title": "New Content!",
      "body": "A new video has been uploaded."
    }
  }
}
我还能够添加一个包含其他信息的数据成员,并且仍然可以在不带来不便的情况下收到通知

现在的问题是,如果我想在JSON中添加另一个成员,比如单击操作,我会发布以下内容:

{
  "message":{
    "token":"aValidToken",
    "notification": {
      "title": "New Content!",
      "body": "A new video has been uploaded.",
      "click_action":"https://www.google.com.ar/"
    }
  }
}
我得到以下错误:

{
    "error": {
        "code": 400,
        "message": "Invalid JSON payload received. Unknown name \"click_action\" at 'message.notification': Cannot find field.",
        "status": "INVALID_ARGUMENT",
        "details": [
            {
                "@type": "type.googleapis.com/google.rpc.BadRequest",
                "fieldViolations": [
                    {
                        "field": "message.notification",
                        "description": "Invalid JSON payload received. Unknown name \"click_action\" at 'message.notification': Cannot find field."
                    }
                ]
            }
        ]
    }
}
几乎所有其他成员都会这样:优先级、图标、声音、徽章等。

最后,我尝试在setBackgroundMessageHandler中硬编码一个图标单击操作(确实会被调用),但没有效果。不显示图标,单击通知时不会发生任何事情

messaging.setBackgroundMessageHandler( (notif) => {

  const notificationTitle = notif.notification.title;
  const notificationOptions = {
    body : notif.notification.body,
    icon : '/assets/icon/icon72x72.png',
    click_action : 'https://www.google.com.ar/'
  };

  return self.registration.showNotification(notificationTitle, notificationOptions);
});

这纯粹是一个爱奥尼亚PWA项目,旨在在移动浏览器和桌面上运行。谢谢你给我的每一个小费!谢谢

看起来您正在使用新的API:

但尝试使用传统API中的字段:

您可以使用正在使用的API定义一个图标,但您的负载需要:

{
  "message": {
    "token": "aValidToken",
    "webpush": {
      "notification": {
        "title": "New Content!",
        "body": "A new video has been uploaded.",
        "icon": "your_icon"
      }
    }
  }
}
您可以找到有关webpush通知字段的更多信息

仅供参考,您提到的大多数其他字段(优先级、声音、徽章)都是的,但在web上支持这两个API


编辑(2018年5月10日):新API现在支持所有(优先级、图标、声音、徽章等)。有关详细信息,请参阅。

一旦获得JSON字符串,服务将如何处理该字符串。我的猜测是,它需要特定的参数,而
点击动作
不是有效的参数。从Firebase文档中:>对于从应用服务器发送的通知消息,FCM JavaScript API支持
点击动作
键。通常,这会设置为web应用程序中的一个页面,这样当用户单击通知时,您的应用程序将被带到前台。代码和有效载荷看起来不错。你能试着通过邮递员发送一条消息,看看它是否显示相同的错误吗?这里有一个例子,我把它留作注释,请确保您没有将包含其他对象的对象作为数据传递,因为这也会触发该错误。只能将字符串作为值传递。如果您想传递复杂的结构,请确保将它们字符串化为json格式,并将它们放入数据中。Excelent的工作非常出色!一个快速跟进的问题是。。。我应该在headers对象中发送什么?你不需要发送任何东西,除非你需要或之类的东西。我不确定FCM是否支持所有的标题。在我的例子中,图标只在大小小于72px×72px时才起作用