本地通知覆盖以前的本地通知

Posted

技术标签:

【中文标题】本地通知覆盖以前的本地通知【英文标题】:Local Notification overrides previous local notification 【发布时间】:2018-10-19 11:49:27 【问题描述】:

我有一个使用本地通知的 macOS Swift 应用程序。这是发送这些的一个小方法:

func sendPushMessage(title: String, message: String, userInfo: [String:Any]) 
        let notification: NSUserNotification = NSUserNotification()
        notification.title = title
        notification.informativeText = message
        notification.userInfo = userInfo
        notification.soundName = NSUserNotificationDefaultSoundName
        notification.deliveryDate = Date()
        self.center.scheduledNotifications = [notification]

这工作了很长时间,我已经收到了我的所有通知(以及所有通知都显示在通知中心)。但实际上最新的通知会覆盖之前的通知。假设只有一个通知槽总是被最新通知覆盖。

在我的通知中心,也只有一个通知可见(最新的),而不是所有收到的通知。我不知道什么时候“停止工作”,但我想一两个月前?我还在 10.13.6 高山上。

通知设置正确。

【问题讨论】:

self.center.scheduledNotifications = [notification] 看起来很奇怪。在我看来,你现在得到的行为是正常的,你得到的行为很奇怪(macOS 的变化?)。我会使用self.center.scheduledNotifications = self.center.scheduledNotifications + [notification](即结合所有当前计划并附加新的)或self.center.scheduleNotification(notification),它应该“附加”它。 没有变化,但感谢您的建议。 【参考方案1】:

我不知道我做错了什么。

通过将通知顺序(在通知设置中)更改为由应用手动更改来解决问题,然后它就可以工作了。之后,我可以将其更改回最新的并且仍在工作。肯定只是 macOS 中的一个错误。

【讨论】:

【参考方案2】:

参考documentation,您应该为每个通知设置不同的标识符。

标识符对于通知是唯一的。已发送通知 使用与现有通知相同的标识符替换 现有通知,而不是导致显示新的通知 通知。

你可以这样设置

notification.identifier = "yourIdentifier"

【讨论】:

将其设置为 notification.identifier = UUID().uuidString 但也没有成功... 您想在通知中添加新通知还是取消旧的所有通知?

以上是关于本地通知覆盖以前的本地通知的主要内容,如果未能解决你的问题,请参考以下文章

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

本地通知中的应用程序图标徽章是不是会被推送通知有效负载徽章覆盖?

FAQHMS Core推送服务与本地创建通知消息如何相互覆盖?

Obj-C,如何删除以前设置的本地推送通知?

如何在一段时间后取消安排以前安排的本地通知?

使用相同的请求标识符同时注册 2 个本地通知不被覆盖