【发布时间】:2017-08-23 12:47:32
【问题描述】:
我使用 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 控制台中收到错误日志:
错误:消息负载包含“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 代码中那样在我的云函数中添加额外的数据?
【问题讨论】:
-
我认为您需要将您的
data提升一个级别:{notification: {}, data: {}} -
好吧,因为我只在
data下发送一个字段,所以我只是将myId的值设置为data,而不是嵌套它。不太确定为什么它不起作用。 -
嗨@MarksCode。像 Michael Bleigh 提到的那样修改有效负载后它仍然无法工作吗?您的评论有点不清楚。
-
我只是将其更改为
'data' : userSent,而不是嵌套它,这样就可以了。没关系,因为我只发送一份数据,但如果我想发送多个数据,我会尝试迈克尔的建议。
标签: javascript firebase firebase-cloud-messaging google-cloud-functions