Приложение в фоновом режиме с setTimeout и push-уведомлением - PullRequest
0 голосов
/ 10 октября 2018

Мы столкнулись с проблемой, когда код Push-уведомления выполняется до того, как обработчик setTimeout будет запущен, когда приложение выходит на передний план.Вот последовательность событий:

  1. Пользователь запускает приложение.setTimeout(this.logout, 10000) вызывается.
  2. Приложение помещается в фоновый режим.Таймер продолжает обратный отсчет.
  3. Подождите 10 секунд, чтобы пройти.Поскольку приложение работает в фоновом режиме, обратный вызов this.logout не будет вызываться до тех пор, пока приложение не будет выкуплено на переднем плане.
  4. На устройство отправлено push-уведомление.
  5. Теперь пользователь нажимает наPush-уведомление, которое открывает приложение.
  6. Код Push-уведомления выполняется
  7. 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 = () => { ... }

1 Ответ

0 голосов
/ 23 октября 2018

Я решил это, выключив таймер setTimeout и используя временные метки (Date.now () - startTime), чтобы найти количество прошедшего времени.

...