所以我正在开发一个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 (确实被调用)中硬编码图标和 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 项目,旨在在移动浏览器和桌面上运行。我会感谢你能给我的每一个提示!谢谢!
答案 0 :(得分:10)
您似乎正在使用新的API:https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages
但是尝试使用旧版API中的字段: https://firebase.google.com/docs/cloud-messaging/http-server-ref
您可以使用您正在使用的API定义图标,但您的有效负载需要为:
{
"message": {
"token": "aValidToken",
"webpush": {
"notification": {
"title": "New Content!",
"body": "A new video has been uploaded.",
"icon": "your_icon"
}
}
}
}
您可以找到有关网络推送通知字段here的更多信息。
仅供参考,您提及的大多数其他字段(优先级,声音,徽章)都支持 在网络上使用任何API。
编辑(2018年5月10日):现在,新API支持所有notification properties(优先级,图标,声音,徽章等)。有关详细信息,请参阅this guide。