用于 Firebase 消息传递的云函数中的有效负载错误



我使用 Cloud Functions for 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控制台中收到错误日志:

错误: 消息传递有效负载包含"通知.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 代码中那样在云函数中添加其他数据?

正如其他人在评论中解释的那样,data对象应该进入payload
不在notification里面.

请尝试以下代码:

// 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);

除了迭戈的回答,我想为将来访问此消息的任何人指出一个关键细节......"确保将任何 ObjectId 解析为字符串,将其分配给 DATA 中任何键的值".这几乎是处理FCM时最难以想象的问题。并且是解决我问题的主要因素。

现在可能遇到此错误的人。在 Windows 上使用节点 V14.7.0 和 firebase-admin 版本 ^9.6.0 似乎可以完美运行,我没有问题。但是,在Bitnami上部署它时,抛出了错误。为了解决这个问题,我必须将对象someObject属性解析为字符串的"data":

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

相关内容

  • 没有找到相关文章

最新更新