【问题标题】:How I can test firebase notification OnTokenRefresh method call in javascript?如何在 javascript 中测试 Firebase 通知 OnTokenRefresh 方法调用?
【发布时间】:2017-06-27 10:33:19
【问题描述】:

我创建了一个 Firebase 通知 Web 应用程序。当我从 Web 应用程序登录时,我生成 FCM 令牌并将其发送到我的 API 服务器,这工作正常。我在我的代码中编写了 onTokenRefresh 方法,但我无法测试这段代码。 有什么方法可以测试这段代码吗?

firebase.initializeApp(config);
messaging = firebase.messaging();


// Get Instance ID token. Initially, this makes a network call, once retrieved
      // subsequent calls to getToken will return from cache.
      messaging.requestPermission().then(function() {
        return messaging.getToken();
    }).then(function(currentToken) {
        if (currentToken) {
          sendTokenToServer(currentToken);
          updateUIForPushEnabled(currentToken);
        } else {
          // Show permission request.
          console.log('No Instance ID token available. Request permission to generate one.');
          // Show permission UI.
          updateUIForPushPermissionRequired();
          setTokenSentToServer(false);
        }
      })
      .catch(function(err) {
        console.log('An error occurred while retrieving token. ', err);
        showToken('Error retrieving Instance ID token. ', err);
        setTokenSentToServer(false);
      });
    }

     // Callback fired if Instance ID token is updated.
        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);
            showToken('Unable to retrieve refreshed token ', err);
          });
        });

【问题讨论】:

  • 我在 1 小时后从我的 API 服务器发送消息,然后我收到以下错误 MulticastResult(multicast_id=76342......7621,total=7,success=4,failure=3,canonical_ids=2 ,结果:[[ messageId=0:148...........9fd7ecd canonicalRegistrationId=APA91b............Xa5c2v9],[errorCode=NotRegistered],[errorCode=NotRegistered ], [ messageId=0:14......cd ], [ messageId=0:14....cd ], [ messageId=0:14....cd canonicalRegistrationId=APA9...... .....pUNB2QGu ], [ errorCode=NotRegistered ]] 当我从我的开发控制台调用时,获取新的 firebase 通知令牌。

标签: javascript firebase firebase-cloud-messaging firebase-notifications


【解决方案1】:

在撰写本文时,未使用 onTokenRefresh。

将来库将更改,以便令牌可以过期并由 FCM 刷新,并且此回调将用于发出更改信号。

我能给出的最佳建议是通过编写一个调用 getToken() 的测试来“伪造此事件”,取消注册 firebase 消息传递服务工作者(这将通过取消订阅 PushSubscription 使令牌无效):

navigator.serviceWorker.getRegistrations().then((regs) => {
  return Promise.all(regs.map(reg => reg.unregister()));
});

然后手动调用你在onTokenRefresh代码中运行的代码。

【讨论】:

  • 嘿!用户清除浏览器缓存后是否可以获得新令牌?就像在后台不需要用户访问网站一样。在服务工作者中使用 onTokenRefresh 或者使用 SyncManager ?
猜你喜欢
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 2022-12-22
相关资源
最近更新 更多