我想使用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文档中了解到,令牌有时会被fcm应用程序刷新。这意味着如果令牌已经被刷新,但是用户没有使用新令牌重新订阅,他将无法收到通知。
- 问题1:
我如何确保我的订阅者始终能收到通知?
- 问题2:
我看到了onTokenRefresh方法的相关内容,但当浏览器关闭或计算机关闭时,它是否会被调用(我确定不会)?如何模拟令牌刷新操作?
- 问题3:
我只能进行一次订阅(下一次使用相同的令牌不需要),但我不知道我的令牌是否过期,我是否需要重新订阅当前用户。在这种情况下我该怎么办(这与前面的问题有关)?