javascript - FCM Web后台服务人员

标签 javascript firebase firebase-cloud-messaging service-worker

当我的网页处于后台(窗口最小化或其他标签)时,我无法接收推送消息,它只显示正常的通知,但当我时,我的 page.js 中没有任何反应尝试发回帖子消息。

sw.js:

messaging.setBackgroundMessageHandler(function (payload) {
    console.log('[firebase-messaging-sw.js] Received background message ', payload);
    const title = '¡Mensaje Nuevo!';
    const options = {
        body: 'conductor: ' + payload.data.chofer_id + ' - ' + payload.data.mensaje,
        icon: '/icono.png',
    };

    send_message_to_all_clients('sound');

    return self.registration.showNotification(title, options);
});

function send_message_to_all_clients(msg) {
    clients.matchAll().then(clients => {
        clients.forEach(client => {
            send_message_to_client(client, msg).then(m => console.log("SW Received Message: " + m));
        })
    })
}

function send_message_to_client(client, msg) {
    return new Promise(function (resolve, reject) {
        var msg_chan = new MessageChannel();

        msg_chan.port1.onmessage = function (event) {
            if (event.data.error) {
                reject(event.data.error);
            } else {
                resolve(event.data);
            }
        };

        client.postMessage("SW Says: '" + msg + "'", [msg_chan.port2]);
    });
}

页面.js

// Handler for messages coming from the service worker
navigator.serviceWorker.addEventListener('message', function (event) {
    console.log("Client 1 Received Message: " + event.data);
    $.playSound('Sounds/Tethys.mp3');
});

当我在网页上发送消息时,控制台日志会显示并播放声音:

客户端 1 收到消息:[object Object]

但永远不会在后台。

请有人帮忙,已经好几个月了。

最佳答案

终于找到我的问题了!

我正在使用通知部分发送 FCM 消息,但它阻止使用服务工作人员功能将消息发布回我的页面。

{
  "to": "<token>",
 "notification": { // this was the problem
    "body": "test"
  }
  "data": {
    "chofer_id": 3,
    "mensaje": "hola"
  }
}

关于javascript - FCM Web后台服务人员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47066544/

相关文章:

java - Volley错误在Android Java Firebase中发送通知

javascript - frisby 的获取方法不适用于 https

javascript - 如何在 python 中使用 selenium 获取包含在 HTML 标记中的 html 文档

android - 使用Source.Server但用户未连接到互联网时,如何获取Firestore错误代码?

firebase - Firestore 安全规则获取功能错误

firebase - 如何从 Firebase 获取所有设备 token ?

ios - 从 firebase 检索所有通知

javascript - 使用连字符验证 Javascript 中的电话号码

javascript - 将一个值与多个值进行比较的最漂亮的方法是什么?

web - Firebase 身份验证仅限邀请方案 : How to communicate the credentials to user?