我使用Firebase云消息传递为我的网站实施推送通知。用户注册时创建注册令牌,并将其作为用户文档的字段存储在Firestore中。到目前为止,该程序按预期工作(生成了令牌并将其存储在数据库中)。但是,当我尝试使用Firebase控制台上的注册令牌向设备发送测试消息时,没有收到任何通知。即使在前台放置应用程序时,也不会触发onMessage()方法,因为控制台上没有打印出任何内容。我想知道我错过了什么。
反应组件
componentDidMount() {
firebase.auth().onAuthStateChanged((user) => {
firebase.firestore().collection("users").doc(user.uid).get()
.then((doc) => {
if (!doc.exists) {
const messaging = firebase.messaging();
messaging.usePublicVapidKey("my app's key");
messaging.requestPermission()
.then(() => {
messaging.getToken()
.then((currentToken) => {
if (currentToken) {
firebase.firestore().collection("users").doc(user.uid).set({
name: user.displayName,
email: user.email,
token: currentToken
})
}
})
})
}
})
})
}
firebase-messaging-sw.js
importScripts('https://www.gstatic.com/firebasejs/7.11.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.11.0/firebase-messaging.js');
const firebaseConfig = {
apiKey: ...,
authDomain: ...,
databaseURL: ...,
projectId: ...,
storageBucket: ...,
messagingSenderId: ...,
appId: ...,
measurementId: ...
};
firebase.initializeApp(firebaseConfig);
const messaging = firebase.messaging();
messaging.usePublicVapidKey(...);
messaging.onMessage((payload) => {
console.log("Message received: " + payload);
})
我还在index.html中包括了firebase-messaging-sw.js。
index.html
<script src="firebase-messaging-sw.js"></script>