self.registration.getNotifications () возвращает пустой массив в firebase-messaging-sw - PullRequest
0 голосов
/ 15 февраля 2019

Я использую службу 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 ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...