当有人发送消息时,我在Expo中有我的应用程序推送通知,但如果该人发送多条消息,则会推送第二个通知。
我可以做些什么来清除以前的通知,或者只是更新通知而不是向列表中添加第二个通知?
基本上我需要强制覆盖或取消之前的通知。
我希望使用的方法是添加一个在追加之前清除通知的侦听器,但似乎只有当应用程序位于前台时才会有效。
目前是否有推荐的方法?
答案 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中的做法