I wrote a cloud function using Cloud Functions for Firebase that sends notifications to certain topics of Firebase Messaging. The final parts of the function define the payload to be sent, then sends it:
// 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);
However, I'm getting the error log in my Firebase console:
Error: Messaging payload contains an invalid value for the "notification.data" property. Values must be strings.
When I logout the payload I confirmed it is all strings:
{ notification:
{ title: 'Turtle Dude just logged an event',
body: 'Walk for Beer',
data: { personSent: 'mfsP8U0qDdQL4rrrbXp6K0YsF423' } } }
However, when I send the same payload from my iPhone app (which I'm trying to avoid since that means I have to store the messaging private key on the client side) I am able to attach the extra data I want to send just fine:
// 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]
]
]
How can I accomplish adding additional data in my cloud function like I do in my Swift code?
data
up a level:{notification: {}, data: {}}
– Michael Bleighdata
I just mademyId
the value todata
instead of nesting it. Not really sure why it didn't work though. – MarksCode'data' : userSent
instead of nesting it and that works. Its fine since I'm only sending one piece of data but incase I want to send more than one I'll try Michael's suggestion. – MarksCode