清除以前的世博推送通知

时间:2017-09-02 00:13:17

标签: react-native push-notification notifications expo

当有人发送消息时,我在Expo中有我的应用程序推送通知,但如果该人发送多条消息,则会推送第二个通知。

我可以做些什么来清除以前的通知,或者只是更新通知而不是向列表中添加第二个通知?

基本上我需要强制覆盖或取消之前的通知。

我希望使用的方法是添加一个在追加之前清除通知的侦听器,但似乎只有当应用程序位于前台时才会有效。

目前是否有推荐的方法?

2 个答案:

答案 0 :(得分:0)

您可以在 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(identifier: string): 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 方法,但您需要找出最适合使用它们的地方。

答案 1 :(得分:-1)

  _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中的做法