Я использую облачный обмен сообщениями firebase для реализации уведомлений pu sh для моего веб-сайта. Маркер регистрации создается, когда пользователь регистрируется, и сохраняется как поле пользовательского документа в firestore. До этого момента программа работала должным образом (токен был сгенерирован и сохранен в базе данных). Однако когда я попытался отправить тестовое сообщение на свое устройство с помощью регистрационного токена на консоли firebase, я не получил никакого уведомления. Метод onMessage () не запускался, даже когда у меня было приложение на переднем плане, так как на консоли ничего не выводилось. Мне интересно, что я пропустил.
React component
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);
})
Я также включаю firebase-messaging-sw. js в index. html.
index. html
<script src="firebase-messaging-sw.js"></script>