S.Aminnejad
S.Aminnejad

Reputation: 107

how to refresh FCM token with js

I am setting up FCM for my React web push notification and it is doing everything properly, except I don't know how to refresh token when it's expired I have an FCMListener function which its code is as follow

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

as I don't know how to expire a firebase token and I can't test what happens when the token is expired I don't know if the part where I am trying to get refreshedToken is right or not or even if this is the proper way to get refreshed token or not. I would really appreciate any hint and advise

Upvotes: 1

Views: 3362

Answers (1)

Frank van Puffelen
Frank van Puffelen

Reputation: 598817

For testing purposes you can delete the FCM token through the API by calling the deleteToken API. After doing that, reload the page, and your onTokenRefresh should fire.

Upvotes: 4

Related Questions