带setTimeout和推送通知的后台应用

时间:2018-10-09 21:44:15

标签: javascript react-native push-notification settimeout expo

我们遇到了一个问题,即当应用程序进入前台时,在执行setTimeout处理程序之前先执行了推送通知代码。这是事件的顺序:

  1. 用户启动应用程序。 setTimeout(this.logout, 10000)被呼叫。
  2. 应用程序被置于后台。计时器继续倒计时。
  3. 等待10秒钟过去。由于应用程序是在后台运行的,因此this.logout回调将不会被调用,直到将应用程序重新购买到前台为止。
  4. 推送通知已发送到设备。
  5. 现在,用户点击“推送通知”,将打开应用程序。
  6. 执行推送通知代码
  7. this.logout代码将立即执行。

结果是用户被踢出应用程序,然后才能查看推送通知。

是否可以通过某种方式重新安排“事件队列”中的事件,以便首先执行this.logout并随后执行Push Notification处理代码?

编辑:我们正在使用Expo Push Notifications SDK

示例代码

componentDidMount() {
  this.notifications = Notifications.addListener(this.handleNotification);
  this.timeout = setTimeout(this.logout, 10000);
}

componentWillUnmount() {
  Notifications.remove(this.notifications);
}

this.handleNotification = () => { ... }
this.logout = () => { ... }

1 个答案:

答案 0 :(得分:1)

我通过关闭setTimeout计时器并使用时间戳(Date.now()-startTime)来查找经过的时间来解决该问题。