首页 文章

fcm订阅主题

提问于
浏览
0

我正在尝试使用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发出请求,我会在浏览器中收到通知 . 一切正常,但我重新订阅了这个新令牌,他不会得到通知 .

问题#1:

如何确保我的订阅者始终收到通知?

问题2:

我已经看到了关于onTokenRefresh方法的一些内容,但是当浏览器关闭或计算机关闭时它会被调用(我确定,不是)?如何模拟令牌刷新动作?

问题#3:

我只能订阅一次(下次不需要相同的令牌),但我不知道我的令牌是否旧,我必须重新订阅当前用户 . 我应该怎么做这个案子(它与以前的问题有关)?

1 回答

  • 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);               
            });
    });
    

相关问题