Я использую службу Firebase Cloud Messaging для отправки уведомлений в мое веб-приложение.Я отправляю данные с сервера и ловлю их у работника службы Firebase по умолчанию в функции setBackgroundMessageHandler.Я хочу проверить, могу ли я заменить какие-либо существующие уведомления новыми параметрами, прежде чем возвращать полученную полезную нагрузку в качестве уведомления.Каждый раз, когда я пытаюсь получить существующие уведомления, используя self.registration.getNotifications () (с необязательным теговым объектом или без него в качестве параметра), я получаю пустой массив, даже если существуют существующие уведомления.Почему это происходит?Вот мой код firebase в работнике службы:
messaging.setBackgroundMessageHandler(function (payload) {
var title = payload.data.title
var options = {
body: payload.data.body,
icon: './icons/512x512.png',
badge: './icons/96x96.png',
data: {
module: payload.data.module
},
tag: payload.data.tag,
renotify: true,
}
var replacementPromise
//-- Check for replacement ----------------------------------------------------------------------------------------------
if (payload.data.tag === 'new-message') {
replacementPromise = new Promise((resolve, _reject) => {
self.registration.getNotifications({tag: payload.data.tag})
.then(notifications => {
console.log(`got existing ${payload.data.tag} notifs`, notifications) //always as empty Array
if (notifications.length > 0) { //Never executes
const existingNotification = notifications[0]
const newMessagesCount = existingNotification.data.newMessagesCount + 1
const fromGrievances = existingNotification.data.fromGrievances
if (!fromGrievances.includes(payload.data.gid))
fromGrievances.push(payload.data.gid)
options.body = `You have ${newMessagesCount} new messages from ${fromGrievances.length} grievances.`;
options.data.newGrievanceCount = newGrievanceCount
title = `New Messages in Grievances`;
// Close the old notification
existingNotification.close();
} else { //Always executed as Array is of length 0
options.data.newMessagesCount = 1
options.data.fromGrievances = [payload.data.gid]
}
return true
})
.then(resolve)
.catch((err) => {
console.log("Error getting existing notifications for replacement check: ", err)
resolve()
})
})
}
//-----------------------------------------------------------------------------------------------------------------------
if(replacementPromise) {
replacementPromise.then(() => {
console.log('Sending notif with', title, options)
return self.registration.showNotification(title, options)
})
}
else return self.registration.showNotification(title, options)
})
Новое уведомление, имеющее тот же тег, что и существующее уведомление, фактически заменяет существующее уведомление при возврате.Пока я не могу получить существующее уведомление через getNotifications ().