1

I'm using the new admin.messaging().sendToDevice() method to send Web Push notifications. I'm sending both notification and data so I can show users some context in the message.

On client-side I'm using firebase.messaging().setBackgroundMessageHandler() to handle receiving messages.

The problem is that the setBackgroundMessageHandler() never gets called. I tried the solution from a similar question but if I alter the payload structure on the server to add the notification in the data field an error is thrown saying I should only use strings as values in the data (the notification is an object. see admin.messaging.NotificationMessagePayload).

If I don't use firebase.messaging on the server and just restructure as the other answer suggested, I won't be able to enjoy the wonderful feature of clickAction which saves me handling the notificationclick myself.

I also added listener to the push event on the service worker and I receive the full payload (both notification and data are available), it just doesn't call the callback

Is it a bug with firebase.messaging.setBackgroundMessageHandler()? Or am I not using it how I'm supposed to?

Community
  • 1
  • 1
idan
  • 474
  • 3
  • 11
  • Don't nest the `"notification"` key inside the `"data"` key. They should both be top-level keys and both are optional. So, try something like `sendToDevice(registrationToken, { notification: { title: 'Title' } })`. – jwngr Feb 07 '17 at 20:26

1 Answers1

1

I contacted Firebase support and they said that's the expected behavior.

So if one wants to do something when a push happens he should only send the data field. If a notification field is sent, it will take precedence and the callback won't be called but the user will get a notification.

idan
  • 474
  • 3
  • 11