我已经创建了一个 firebase 通知 Web 应用程序。当我从 Web 应用程序登录时,我生成 FCM token 并将其发送到我的 API 服务器,这是正常工作的。我在我的代码中编写了 onTokenRefresh 方法,但我无法测试这个代码。 有什么方法可以测试这段代码吗?
firebase.initializeApp(config);
messaging = firebase.messaging();
// Get Instance ID token. Initially, this makes a network call, once retrieved
// subsequent calls to getToken will return from cache.
messaging.requestPermission().then(function() {
return messaging.getToken();
}).then(function(currentToken) {
if (currentToken) {
sendTokenToServer(currentToken);
updateUIForPushEnabled(currentToken);
} else {
// Show permission request.
console.log('No Instance ID token available. Request permission to generate one.');
// Show permission UI.
updateUIForPushPermissionRequired();
setTokenSentToServer(false);
}
})
.catch(function(err) {
console.log('An error occurred while retrieving token. ', err);
showToken('Error retrieving Instance ID token. ', err);
setTokenSentToServer(false);
});
}
// Callback fired if Instance ID token is updated.
messaging.onTokenRefresh(function() {
messaging.getToken()
.then(function(refreshedToken) {
console.log('Token refreshed.');
// Indicate that the new Instance ID token has not yet been sent to the
// app server.
setTokenSentToServer(false);
// Send Instance ID token to app server.
sendTokenToServer(refreshedToken);
// ...
})
.catch(function(err) {
console.log('Unable to retrieve refreshed token ', err);
showToken('Unable to retrieve refreshed token ', err);
});
});
最佳答案
在撰写本文时未使用 onTokenRefresh。
将来库将更改,以便 token 可以过期并由 FCM 刷新,并且此回调将用于发出更改信号。
我能给出的最佳建议是通过编写一个调用 getToken() 的测试来“伪造此事件”,取消注册 firebase 消息服务 worker (这将通过取消订阅 PushSubscription 使 token 无效):
navigator.serviceWorker.getRegistrations().then((regs) => {
return Promise.all(regs.map(reg => reg.unregister()));
});
然后手动调用您在 onTokenRefresh 代码中运行的代码。
关于javascript - 如何在 javascript 中测试 firebase 通知 OnTokenRefresh 方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42136312/