收到的JSON有效负载无效。未知名称click_action

时间:2018-02-22 04:21:41

标签: 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."
    }
  }
}

我还可以在其中添加包含其他信息的数据成员,但仍然可以收到通知而不会给您带来任何不便。

现在的问题是,如果我想向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 项目,旨在在移动浏览器和桌面上运行。我会感谢你能给我的每一个提示!谢谢!

1 个答案:

答案 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

相关问题