reactjs - 服务人员无法控制客户端
问题描述
互联网上关于这个主题的资源非常模糊,在我获得完整的文档之前无法使用。
我有下面的服务工作者在函数内接收firebase推送通知setBackgroundMessageHandler
:
importScripts('https://www.gstatic.com/firebasejs/7.24.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.24.0/firebase-messaging.js');
const firebaseConfig = {
apiKey: "***",
authDomain: "****",
databaseURL: "https://gratis-3ce5a.firebaseio.com",
projectId: "gratis-3ce5a",
storageBucket: "gratis-3ce5a.appspot.com",
messagingSenderId: "***",
appId: "***",
measurementId: "G-PNXHN4YXYF"
};
firebase.initializeApp(firebaseConfig);
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function(payload) {
console.log('[firebase-messaging-sw.js] Received background message ', payload);
const notificationTitle = payload.data.title;
const notificationOptions = {
body: payload.data.body,
icon: '/firebase-logo.png'
};
self.clients.matchAll({
includeUncontrolled: 'true'
}).then(function(clients){
clients[0].postMessage({data: notificationTitle});
})
});
以下是我想在其中接收消息的组件:
import { useState } from 'react';
import React from 'react';
import { onMessageListener } from './firebaseInit';
export const Messaging=()=>{
const [message, setMessage]=useState('');
navigator.serviceWorker.onmessage = (event) => {
console.log(event.data);
};
return(
<h1>{message}</h1>
);
}
下面是serviceWorker.js
文件:
export const registerServiceWorker = () => {
if ('serviceWorker' in navigator) {
navigator.serviceWorker
.register('firebase-messaging-sw.js')
.then(function (registration) {
// eslint-disable-next-line no-console
console.log('[SW]: SCOPE: ', registration.scope);
return registration.scope;
})
.catch(function (err) {
return err;
});
}
};
我在 中成功接收消息setBackgroundMessageHandler
,但消息未到达功能性反应组件。
这是我第一次接触服务人员。我不知道他们如何与反应组件进行通信。请帮我找出我的代码中的问题并纠正它。
编辑 我已经找到了问题的根源,并注意到服务人员无法控制客户端。虽然我已经成功地向客户端发布消息,但仍然想知道服务人员不控制客户端的原因。
解决方案
推荐阅读
- javascript - 使用三元运算符克隆过滤器函数
- javascript - 一个对象字面量在严格模式下不能有多个同名的属性 React Typescript
- compiler-errors - 错误:找不到符号 DebugAppCheckProviderFactory.getInstance());
- python - 搜索所有连接组件时的递归深度问题
- android - Android:有没有办法在没有签名的情况下生成我的应用程序的“.aab”文件?
- mongodb - 临时收集返回计数为零
- ubuntu - 更新 Ubuntu 16.04 后,Freeradius 不起作用
- reactjs - 未捕获(承诺) SyntaxError:JSON 输入意外结束和 403 错误
- c - 将一个数组复制到另一个数组,同时对其进行排序
- c# - 当定义了隐式转换时,为什么这个显式转换不起作用?