当前位置: 首页 > 知识库问答 >
问题:

适用于Firebase消息传递的Cloud Functions中的有效载荷错误

缪茂勋
2023-03-14

我使用Firebase的云函数编写了一个云函数,该函数向Firebase消息传递的某些主题发送通知。函数的最后部分定义要发送的有效负载,然后发送:

// javascript code in cloud functions
const payload = {
      'notification': {
        'title': `${toTitleCase(name)} just logged an event`,
        'body': `${events[eventType]} for ${toTitleCase(petName)}`,
        'data': {
            'personSent': userSent 
        }
      }
    };
console.log(payload);
admin.messaging().sendToTopic(pet_Id, payload);

但是,我在Firebase控制台中获得了错误日志:

错误:消息负载包含"notification.data"属性的无效值。值必须是字符串。

当我注销有效负载时,我确认它是所有字符串:

{ notification: 
   { title: 'Turtle Dude just logged an event',
     body: 'Walk for Beer',
     data: { personSent: 'mfsP8U0qDdQL4rrrbXp6K0YsF423' } } }

然而,当我从我的iPhone应用程序发送相同的有效载荷(我试图避免,因为这意味着我必须在客户端存储消息私钥)时,我能够附加我想要发送的额外数据:

// Swift code in iPhone app
let body: [String: Any] = ["to": "/topics/\(currentPet)",
                            "priority" : "high",
                            "notification" : [
                                "body" : "\(events[eventType]) for \(petsName.localizedCapitalized)",
                                "title" : "\(myName.localizedCapitalized) just logged an event",
                                "data" : ["personSent": myId]
                              ]
                           ]

我如何才能像在Swift代码中那样在我的云函数中添加额外的数据?

共有3个答案

璩涵衍
2023-03-14

无论谁现在可能会遇到这个错误。在Windows上使用节点V14.7.0和firebase管理版本^9.6.0似乎工作得很好,我没有任何问题。但是,在Bitnami上部署它时,抛出了错误。为了解决这个问题,我必须解析对象someObject属性,将其分配给字符串的“数据”:

//someObject.property_throwing the error should be parsed to string

data: someObject
        
马魁
2023-03-14

随着迭戈的回答,我想指出一个关键的细节,为任何人谁访问这个消息在未来。。。“为数据中的任何键指定值时,请确保将任何ObjectId解析为字符串”。在处理FCM时,这几乎是最不可配置的问题。是解决我问题的首要因素。

陈晟睿
2023-03-14

正如其他人在注释中解释的那样,data对象应该在payload内,而不是在通知内。

请尝试以下代码:

// javascript code in cloud functions
const payload = {
      'notification': {
        'title': `${toTitleCase(name)} just logged an event`,
        'body': `${events[eventType]} for ${toTitleCase(petName)}`,
      }, 
      // NOTE: The 'data' object is inside payload, not inside notification
      'data': { 
            'personSent': userSent 
      }
    };
console.log(payload);
admin.messaging().sendToTopic(pet_Id, payload);
 类似资料:
  • 我想使用谷歌的Firebase为网络构建一个消息应用程序。在这个应用程序中,用户应该向/从其他用户发送和接收消息。我检查了谷歌的Firebase网站,但我迷路了。你能告诉我从哪里开始吗?你能给我看任何与Firebase网络消息相关的教程或类似的东西吗?我欢迎任何建议。谢谢。

  • 我也在尝试使用node。js和firebase管理员向iOS设备发送推送通知。然而,我遇到了这个错误: 错误发送消息:{错误:请求包含一个无效的参数。在Firebase MessagingError。错误(本机)在Firebase MessagingError。Firebase Error[作为构造函数](/user_code/node_modules/fire base-admin/lib/ut

  • 在定义消息有效负载时的Firebase云消息文档中: 通过使用数据和/或通知键创建对象,可以指定一种或两种消息类型。 文档给出了组合消息的示例: 另请参阅后台应用程序中处理通知消息的文档: 这包括同时包含通知和数据有效负载的消息(以及从通知控制台发送的所有消息)。在这些情况下,通知会发送到设备的系统托盘,数据有效负载会在启动器活动的目的之外发送。 我用这个有效载荷发送通知: 但是始终为空: 我做错

  • 我想创建一个迷你web应用程序来测试web应用程序的Firebase云消息传递。我想使用Firebase托管来托管我的web应用程序。 错误:

  • 我试图从C#中的服务器发送推送通知,我使用了正确的注册令牌和API密钥,但仍然得到以下响应。 我按照这个网址来实现这个解决方案通过C#使用FCM(Firebase云消息传递)发送推送到Android 目前,我正在尝试向单个设备发送通知,但也希望同时向多个设备发送通知,我使用了url中给出的,但它不起作用。如果我必须同时向多个设备发送通知,我该怎么办? 这是我的密码

  • 我有一个spring boot service(2.4.5)显示了一个checkmarx错误,我们需要清理请求有效负载。我们如何对请求有效载荷进行消毒? 对于“@RequestBody final MyInput Input”,我得到以下checkmarx错误消息: 我想消毒我的有效载荷。或者除了使用DTO,然后将其转换为我的数据库实体之外,没有其他选择