Firebase消息传递的云功能中的有效负载错误

Mar*_*ode 5 javascript firebase google-cloud-functions firebase-cloud-messaging

我使用Cloud Functions for Firebase编写了一个云功能,可以向Firebase Messaging的某些主题发送通知.函数的最后部分定义要发送的有效负载,然后发送它:

// 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);
Run Code Online (Sandbox Code Playgroud)

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

错误:消息传递有效内容包含"notification.data"属性的无效值.值必须是字符串.

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

{ notification: 
   { title: 'Turtle Dude just logged an event',
     body: 'Walk for Beer',
     data: { personSent: 'mfsP8U0qDdQL4rrrbXp6K0YsF423' } } }
Run Code Online (Sandbox Code Playgroud)

但是,当我从我的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]
                              ]
                           ]
Run Code Online (Sandbox Code Playgroud)

如何在我的云函数中添加额外的数据,就像我在Swift代码中一样?

Die*_*ini 8

正如其他人在评论中所解释的那样,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);
Run Code Online (Sandbox Code Playgroud)