如何用js刷新FCM令牌

时间:2020-05-31 17:10:27

标签: javascript reactjs firebase firebase-cloud-messaging

我正在为我的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的部分是否正确,甚至这是获取或不刷新令牌的正确方法。我真的很感谢任何提示和建议

1 个答案:

答案 0 :(得分:3)

出于测试目的,您可以通过调用deleteToken API通过API删除FCM令牌。完成此操作后,请重新加载页面,然后您的onTokenRefresh 应该启动。

相关问题