我正在为我的React Web推送通知设置FCM,并且它做的一切正常,除了我不知道令牌过期后如何刷新 我有一个FCMListener函数,其代码如下
navigator.serviceWorker
.register("/static-files/firebase-messaging-sw.js")
.then((registration) => {
firebase.initializeApp(settings.getConfig().FIREBASE_CONFIG);
const messaging = firebase.messaging();
messaging.useServiceWorker(registration);
try {
messaging
.requestPermission()
.then(() => {
return messaging.getToken();
})
.then((token) => {
let topic = `${userInfo.is_host ? "host" : "guest"}`;
if (token) {
this.subscribeToTopic(topic, token);
this.sendTokenToServer({
os: "web",
push_token: token,
});
} else {
messaging.onTokenRefresh(() => {
messaging
.getToken()
.then((refreshedToken) => {
this.subscribeToTopic(topic, token);
this.sendTokenToServer({
os: "web",
push_token: refreshedToken,
});
})
.catch((err) => {
console.log("Unable to retrieve refreshed token ", err);
});
});
}
});
} catch (error) {
if (error.code === "messaging/permission-blocked") {
console.log("Please Unblock Notification Request Manually");
} else {
console.log("Error Occurred", error);
}
}
messaging.onMessage((payload) => {
console.log("Notification Received", payload);
alert(payload.notification.body);
});
});
};
}
因为我不知道如何使Firebase令牌过期,并且我无法测试令牌过期时会发生什么,所以我不知道我尝试获取refreshedToken的部分是否正确,甚至这是获取或不刷新令牌的正确方法。我真的很感谢任何提示和建议
答案 0 :(得分:3)
出于测试目的,您可以通过调用deleteToken
API通过API删除FCM令牌。完成此操作后,请重新加载页面,然后您的onTokenRefresh
应该启动。