接收到无效的JSON负载。未知名称单击\u操作
所以我现在正在开发一个PWA 我现在正在使用推送通知,我已经能够通过以下非常简单的JSON结构接收后台和前台通知接收到无效的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." } } } 我还能够添加一个包含其他信息的数据成员,并且仍然可以在不带来不便的情况下收
{
"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时才起作用