清除以前的世博会推送通知

Posted

技术标签:

【中文标题】清除以前的世博会推送通知【英文标题】:Clear Previous Expo Push Notifications 【发布时间】:2017-09-02 00:13:17 【问题描述】:

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

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

基本上我需要强制覆盖或关闭以前的通知。

我希望使用的方法是添加一个侦听器,该侦听器在附加之前清除通知,但似乎这仅在应用程序处于前台时才有效。

目前有推荐的方法吗?

【问题讨论】:

您能解释一下您是如何处理这个问题的吗?我有完全一样的问题。谢谢 【参考方案1】:

您可以清除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 方法,但您需要找出最适合使用它们的位置。

【讨论】:

我无法验证这一点,因为我从事的项目不再有效。为此,我无法测试您的解决方案在应用程序处于后台时是否有效,这是我的根本问题【参考方案2】:
  _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 中的做法

【讨论】:

以上是关于清除以前的世博会推送通知的主要内容,如果未能解决你的问题,请参考以下文章

React Native - 在接收本地推送通知时清除以前的推送通知

使用 Baqend 的世博会推送通知

世博会推送通知在构建后不起作用

清除 Worklight 服务器上的推送通知注册

推送通知徽章清除警报

收到推送通知时清除徽章