本地通知标识符

Posted

技术标签:

【中文标题】本地通知标识符【英文标题】:Local Notifications Identifiers 【发布时间】:2018-08-06 09:17:49 【问题描述】:

我有以下代码用于请求和发布通知:

let request = UNNotificationRequest(identifier: "timerDone", content: content, trigger: trigger)

UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

它在一个 for 循环中,因此通常会执行多次 - 循环的每次迭代都会导致此代码运行,但是对于每次迭代,请求都具有相同的标识符。

这是否意味着我正在覆盖我刚刚在循环的上一个迭代中添加的上一个通知? (我问的原因是因为即使有多个计时器,在关闭应用程序后也只有一个通知;通知通常是针对计时器的通知,它是 for 循环中的最后一次迭代(此代码在应用程序中确实已辞职活跃))。

【问题讨论】:

【参考方案1】:

是的,它会用新通知覆盖旧通知。

您可以在循环中进行此更改:

let strIdentifier = "timerDone_\(i)"
let request = UNNotificationRequest(identifier: strIdentifier, content: content, trigger: trigger)

UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

【讨论】:

【参考方案2】:

如Apple documentation中所述:

如果您在安排新通知时使用相同的标识符,则 系统会删除先前安排的通知 标识符并将其替换为新标识符。

您始终可以为您的标识符添加一些唯一的内容、简单的迭代索引/编号、UUID、项目的 ID 或其他任何内容。

let identifier = "timerDone-\(index)"

【讨论】:

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

动作按钮的 Swift UNNotificationRequest 标识符点击了本地通知

Swift:多个本地通知,但只显示最新的

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

定期快速触发本地通知

在 iOS 10 中安排和处理本地通知

无法更新本地预定通知内容