Очистить push-уведомления предыдущей выставки

У меня есть приложение в Expo, которое отправляет уведомление, когда кто-то отправляет сообщение, но если этот человек отправляет несколько сообщений, отправляется второе уведомление.

Могу ли я что-нибудь сделать, чтобы удалить предыдущее уведомление или просто обновить уведомление вместо добавления второго уведомления в список?

Обычно мне нужно принудительно переопределить или отклонить предыдущие уведомления.

Подход, который я надеялся использовать, заключался в добавлении слушателя, который очищал уведомления перед добавлением, но похоже, что это работает только тогда, когда приложение находится на переднем плане.

Есть ли в настоящее время рекомендуемый подход к этому?


person SeanVDH    schedule 02.09.2017    source источник
comment
Не могли бы вы объяснить, как вы с этим справились? У меня точно такая же проблема. Спасибо   -  person Vincent    schedule 08.04.2020


Ответы (2)


Вы можете удалить любые или все предыдущие уведомления в expo-notifications. Ваш вопрос неясен, но я предполагаю, что вы хотите удалить все предыдущие уведомления, если новое уведомление получено. Вы должны выбрать лучшее место для удаления уведомлений в коде. Но вот несколько советов (используйте следующий код в хуке useEffect):

// This listener is fired whenever a user taps on or interacts with a notification (works when app is foregrounded, backgrounded, or killed)
responseListener.current =
  Notifications.addNotificationResponseReceivedListener((response) => {
    // DISMISS ALL NOTIFICATION AFTER INTERACTION
    Notifications.dismissAllNotificationsAsync();
  });

Если вы хотите отклонить конкретное уведомление в этом случае, используйте dismissNotificationAsync (идентификатор: строка): метод Promise.

На всякий случай, если вы хотите отклонить все уведомления при получении нового, когда приложение находится на переднем плане (используйте следующий код в хуке useEffect).

// This listener is fired whenever a notification is received while the app is foregrounded
notificationListener.current =
  Notifications.addNotificationReceivedListener((notification) => {
    // setNotification(notification);
    // DISMISS ALL NOTIFICATION UPON RECEIVING NOTIFICATION WHILE IN FOREGROUND
    Notifications.dismissAllNotificationsAsync();
  });

Вы можете использовать метод Notifications.dismissAllNotificationsAsync () или dismissNotificationAsync (identifier: string): Promise где угодно, но вам нужно определите, где их лучше всего использовать.

person hafij    schedule 07.07.2021
comment
Я не могу это проверить, так как проект, над которым я работал, больше не действителен. С этой целью я не могу проверить, работает ли ваше решение, пока приложение работает в фоновом режиме, что было моей основной проблемой. - person SeanVDH; 08.07.2021

  _handleNotification = (notification) => {
  this.setState({notification: notification});
  console.log('get notification', this.state.notification);
  let localnotificationId = this.state.notification.notificationId;
  setTimeout(function () {
    Notifications.dismissNotificationAsync(localnotificationId);
  }, 10000)

};

Вот как я делаю в NodeJS

person flyblade    schedule 22.11.2017