Обмен сообщениями Firebase `setBackgroundMessageHandler` переопределяет тело уведомления #AskFirebase

Я использую новый метод admin.messaging().sendToDevice() для отправки уведомлений Web Push. Я отправляю и notification, и data, чтобы показать пользователям некоторый контекст в сообщении.

На стороне клиента я использую firebase.messaging().setBackgroundMessageHandler() для обработки полученных сообщений.

Проблема в том, что setBackgroundMessageHandler() никогда не вызывается. Я попробовал решение из похожего вопроса, но если я изменю структуру полезной нагрузки на сервер добавляет notification в поле data, выдается ошибка, говорящая, что я должен использовать только строки в качестве значений в data (notification является объектом. см. admin.messaging.NotificationMessagePayload).

Если я не буду использовать firebase.messaging на сервере и просто реструктурирую, как предложил другой ответ, я не смогу пользоваться замечательной функцией clickAction, которая избавляет меня от работы с notificationclick самостоятельно.

Я также добавил слушателя к событию push в сервис-воркере, и я получаю полную полезную нагрузку (доступны как notification, так и data), он просто не вызывает обратный вызов

Это ошибка с firebase.messaging.setBackgroundMessageHandler()? Или я не так его использую?


person idan    schedule 04.02.2017    source источник
comment
Не вставляйте ключ "notification" внутрь ключа "data". Оба они должны быть ключами верхнего уровня и оба являются необязательными. Итак, попробуйте что-то вроде sendToDevice(registrationToken, { notification: { title: 'Title' } }).   -  person jwngr    schedule 07.02.2017


Ответы (1)


Я связался со службой поддержки Firebase, и они сказали, что это ожидаемое поведение.

Поэтому, если кто-то хочет что-то сделать, когда происходит push, он должен отправлять только поле data. Если отправлено поле notification, оно будет иметь приоритет, и обратный вызов не будет вызван, но пользователь получит уведомление.

person idan    schedule 08.02.2017