后台应用/ setTimeout 和推送通知
App in background w/ setTimeout and push notification
我们 运行 遇到一个问题,当应用程序进入前台时,在执行 setTimeout 处理程序之前执行推送通知代码。这是事件的顺序:
- 用户启动应用程序。
setTimeout(this.logout, 10000)
被调用。
- 应用进入后台。计时器继续倒计时。
- 等待 10 秒。因为应用程序在后台,所以
this.logout
回调不会被调用,直到应用程序被买回前台。
- 推送通知已发送到设备。
- 现在,用户点击推送通知,打开应用程序。
- 执行推送通知代码
this.logout
代码立即执行。
结果是用户在查看推送通知之前被踢出应用程序。
有没有办法以某种方式重新安排事件队列中的事件,以便首先执行 this.logout,然后执行推送通知处理代码?
编辑:我们正在使用 Expo 推送通知 SDK
示例代码
componentDidMount() {
this.notifications = Notifications.addListener(this.handleNotification);
this.timeout = setTimeout(this.logout, 10000);
}
componentWillUnmount() {
Notifications.remove(this.notifications);
}
this.handleNotification = () => { ... }
this.logout = () => { ... }
我通过关闭 setTimeout 计时器并使用时间戳 (Date.now() - startTime) 找到经过的时间量来解决它。
我们 运行 遇到一个问题,当应用程序进入前台时,在执行 setTimeout 处理程序之前执行推送通知代码。这是事件的顺序:
- 用户启动应用程序。
setTimeout(this.logout, 10000)
被调用。 - 应用进入后台。计时器继续倒计时。
- 等待 10 秒。因为应用程序在后台,所以
this.logout
回调不会被调用,直到应用程序被买回前台。 - 推送通知已发送到设备。
- 现在,用户点击推送通知,打开应用程序。
- 执行推送通知代码
this.logout
代码立即执行。
结果是用户在查看推送通知之前被踢出应用程序。
有没有办法以某种方式重新安排事件队列中的事件,以便首先执行 this.logout,然后执行推送通知处理代码?
编辑:我们正在使用 Expo 推送通知 SDK
示例代码
componentDidMount() {
this.notifications = Notifications.addListener(this.handleNotification);
this.timeout = setTimeout(this.logout, 10000);
}
componentWillUnmount() {
Notifications.remove(this.notifications);
}
this.handleNotification = () => { ... }
this.logout = () => { ... }
我通过关闭 setTimeout 计时器并使用时间戳 (Date.now() - startTime) 找到经过的时间量来解决它。