当重复设置为“是”时,UNUserNotification 不会从待处理通知中删除 - Swift

Posted

技术标签:

【中文标题】当重复设置为“是”时,UNUserNotification 不会从待处理通知中删除 - Swift【英文标题】:UNUserNotification not get removed from pending notification when repeat is set to yes - Swift 【发布时间】:2019-01-22 08:40:51 【问题描述】:

我一直在构建剩余应用程序设置剩余在特定时间有或没有重复模式。

我一直在努力解决一个问题。任何帮助都会有助于解决它。

这是我面临的场景

当剩余部分是在没有重复模式的情况下创建的并且我正在删除剩余部分时,挂起的通知将被删除,但当其设置为重复模式时,挂起的通知不会被删除。

这是我删除通知的代码。

UNUserNotificationCenter.current().getPendingNotificationRequests  requests in
            let allNotifIds = requests.map( $0.identifier )
            let pendingTaskNotifIds = taskNotificationIds.filter( allNotifIds.contains($0) )
            UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: pendingTaskNotifIds)
        

添加通知的代码

  let content = UNMutableNotificationContent()

    //set badge content here (get list from db and update it.)

    content.badge = NSNumber(value: getBadgeCount())

    content.title="sometitle";

    content.body = "body data"

    content.sound = UNNotificationSound.default

    let twoWeeksTrigger =  UNTimeIntervalNotificationTrigger(timeInterval: TimeInterval.everyTwoWeeks, repeats: true)

    let id = UUID().uuidString
    let request = UNNotificationRequest(identifier: id, content: content, trigger: trigger)

    UNUserNotificationCenter.current().add(request)

这是我的日志,我创建了 2 个剩余部分(1 个是非重复任务,另一个是重复任务)

[<UNNotificationRequest: 0x600003dd5440; identifier: 06B35F80-9769-492A-8BFF-3108A11B1542, content: <UNNotificationContent: 0x600000786700; title: , subtitle: (null), body: Without repeat notification, summaryArgument: , summaryArgumentCount: 0, categoryIdentifier: com.example, launchImageName: , threadIdentifier: , attachments: (

), badge: 1, sound: <UNNotificationSound: 0x60000163b180>,, trigger: <UNCalendarNotificationTrigger: 0x6000033d7f40; dateComponents: <NSDateComponents: 0x6000005a0f20>

    Calendar Year: 2019

    Month: 1

    Day: 22

    Hour: 13

    Minute: 53

    Weekday: 3, repeats: NO>>, 

<UNNotificationRequest: 0x600003dd3ae0; identifier: D33A49EC-DD3C-4090-AD86-9F16ED4EA6CC, content: <UNNotificationContent: 0x6000007852c0; title: , subtitle: (null), body: Repeat notification, summaryArgument: , summaryArgumentCount: 0, categoryIdentifier: com.example, launchImageName: , threadIdentifier: , attachments: (

), badge: 1, sound: <UNNotificationSound: 0x600001639800>,, trigger: <UNCalendarNotificationTrigger: 0x6000033d5740; dateComponents: <NSDateComponents: 0x6000005a1ef0>

    Month: 1

    Day: 22

    Hour: 13

    Minute: 54, repeats: YES>>]

删除两个任务后,通知会因重复任务而被触发,并且我的通知对象在日志中打印了重复任务对象,只有非重复任务会被删除。这是日志供参考。

[<UNNotificationRequest: 0x600003d2b300; identifier: D33A49EC-DD3C-4090-AD86-9F16ED4EA6CC, content: <UNNotificationContent: 0x60000079ca80; title: , subtitle: (null), body: Repeat notification, summaryArgument: , summaryArgumentCount: 0, categoryIdentifier: com.lawrence.revival.category, launchImageName: , threadIdentifier: , attachments: (

), badge: 1, sound: <UNNotificationSound: 0x60000163fde0>,, trigger: <UNCalendarNotificationTrigger: 0x6000033f9a40; dateComponents: <NSDateComponents: 0x6000005be470>

    Month: 1

    Day: 22

    Hour: 13

    Minute: 54, repeats: YES>>]

【问题讨论】:

【参考方案1】:

按照我的想法,你的标识符是不同的。

首先,检查您的标识符是否相同

参考这个链接

https://***.com/a/40563595/2254673

【讨论】:

我已经匹配了 id,然后我删除了 id 参考 id D33A49EC-DD3C-4090-AD86-9F16ED4EA6CC 的通知,它也在日志中打印了相同的内容。 你能分享代码吗,你是如何添加重复通知的。只需添加不同的 categoryIdentifier 即可重复。 First UUID().uuidString 每次都会给出不同的字符串。所以请更改标识符并添加一些含义完整的标识符 我需要一个唯一的 id(UUID) 来完成不同的任务。从 UI 中删除任务时,我将获得用作通知 ID 的任务 ID,如果匹配发生则删除它,否则留下通知。

以上是关于当重复设置为“是”时,UNUserNotification 不会从待处理通知中删除 - Swift的主要内容,如果未能解决你的问题,请参考以下文章

当 IDENTITY_INSERT 设置为 OFF 时,无法在表“tbl Fingerprint”中插入标识列的显式值 [重复]

重复间隔设置为每小时时 UILocalNotification 应用程序崩溃

当两个div元素显示为内联块时如何删除它们之间的空白[重复]

在将模式设置为“no-cors”时使用 fetch 访问 API 时出错 [重复]

当鼠标离开元素时如何设置悬停过渡[重复]

当用户关闭浏览器而不单击注销时销毁或取消设置会话[重复]