我尝试使用FCM向所有主题订阅者发送通知。首先,我需要为用户订阅一个主题。我的工作(我使用JavaScript Firebase Cloud Messaging进行网络推送通知):
1)获取FCM实例
var messaging = firebase.messaging();
2)获取令牌
messaging.getToken();
3)通过ajax
将令牌发送到服务器4)将客户订阅服务器中的主题
https://iid.googleapis.com/iid/v1/IID_TOKEN/rel/topics/TOPIC_NAME
所以,我的js代码是这样的:
var messaging = firebase.messaging();
messaging.useServiceWorker(reg);
messaging.requestPermission()
.then(function () {
messaging.getToken()
.then(function (currentToken) {
if (currentToken) {
$.ajax({
type : 'POST',
url : URL_TO_SERVER_METHOD
data : {
token : currentToken
}
});
}
})
})
然后,如果我向https://fcm.googleapis.com/fcm/send提出所有必要参数的请求,我会在浏览器中收到通知。 一切正常,但我从fcm docs上读到,令牌有时会被fcm app刷新。这意味着如果令牌已刷新,但用户未使用该新令牌重新订阅,则他不会收到通知。
如何确保我的订阅者始终收到通知?
我已经看到了关于onTokenRefresh方法的一些内容,但是当浏览器关闭或计算机关闭时它会被调用(我确定,不是)?如何模拟令牌刷新动作?
我只能订阅一次(下次使用相同的令牌并不需要),但我不知道我的令牌是否旧,我必须重新订阅当前用户。我应该怎么做这个案子(它与以前的问题有关)?
答案 0 :(得分:0)
为确保您的用户始终被订阅,您绝对需要使用onTokenRefresh方法。仅当用户拥有新令牌时,才会触发onTokenRefersh。
代码看起来像这样
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);
});
});