Мы столкнулись с проблемой, когда код Push-уведомления выполняется до того, как обработчик setTimeout будет запущен, когда приложение выходит на передний план.Вот последовательность событий:
- Пользователь запускает приложение.
setTimeout(this.logout, 10000)
вызывается. - Приложение помещается в фоновый режим.Таймер продолжает обратный отсчет.
- Подождите 10 секунд, чтобы пройти.Поскольку приложение работает в фоновом режиме, обратный вызов
this.logout
не будет вызываться до тех пор, пока приложение не будет выкуплено на переднем плане. - На устройство отправлено push-уведомление.
- Теперь пользователь нажимает наPush-уведомление, которое открывает приложение.
- Код Push-уведомления выполняется
this.logout
Код выполняется немедленно.
В результате пользовательвыгнали из приложения, прежде чем он смог просмотреть Push-уведомление.
Есть ли способ каким-либо образом переупорядочить события в очереди событий так, чтобы this.logout выполнялся первым, а код обработки push-уведомлений - вторым?
Редактировать: Мы используем SDK push-уведомлений Expo
Образец кода
componentDidMount() {
this.notifications = Notifications.addListener(this.handleNotification);
this.timeout = setTimeout(this.logout, 10000);
}
componentWillUnmount() {
Notifications.remove(this.notifications);
}
this.handleNotification = () => { ... }
this.logout = () => { ... }