【发布时间】:2018-08-01 20:14:09
【问题描述】:
所以我目前正在开发 PWA。
我现在正在使用推送通知,并且我已经能够使用以下非常简单的 JSON 结构接收后台和前台通知。
{
"message":{
"token":"aValidToken",
"notification": {
"title": "New Content!",
"body": "A new video has been uploaded."
}
}
}
我还能够添加一个包含其他信息的数据成员,并且仍然可以轻松地收到通知。
现在的问题是,如果我想向 JSON 添加另一个成员,例如 click_action,我会发布以下内容:
{
"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(确实被调用)中硬编码 icon 和 click_action,但无济于事。没有图标出现,点击通知时没有任何反应。
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);
});
这纯粹是一个 Ionic PWA 项目,旨在在移动浏览器和桌面上运行。我会很感激你能给我的每一个小费!谢谢!
【问题讨论】:
-
服务获取到 JSON 字符串后会做什么。我的猜测是它需要特定的参数,而
click_action不是一个有效的参数。 -
来自 Firebase 文档:> 对于从应用服务器发送的通知消息,FCM JavaScript API 支持
click_action键。这通常设置为您的网络应用程序中的一个页面,这样当用户点击通知时,您的应用程序就会被带到前台。 -
奇数。代码和有效负载看起来不错。您可以尝试通过 Postman 测试发送消息,看看它是否显示相同的错误?这是sample
-
我将其作为评论留在这里,请确保您没有传递包含其他对象作为数据的对象,因为这也会触发该错误。您只能将字符串作为值传递。如果你想传递复杂的结构,确保你
stringify他们作为json把它们放在data中。
标签: json push-notification firebase-cloud-messaging service-worker progressive-web-apps