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

时间:2018-08-22 12:26:24

标签: ios swift localnotification

我正在用本地通知创建一个提醒,其中我必须注册一个带有某些标识符的本地通知,让我们说X,它应按定义的时间间隔触发,且无重复,同时我想注册相同的通知10分钟后使用相同的标识符,第一个被解雇。

在我的情况下,如果第一个通知被触发并且用户未对其执行任何操作,则在10分钟后,如果相同的通知被触发,则在通知中心(托盘)中不应有2条通知。相反,只有最后的通知应该在那里。

以下是我为完成此操作而执行的代码:

    notificationContent.categoryIdentifier = Notification.Category.tutorial


    let notificationTrigger1 = UNTimeIntervalNotificationTrigger(timeInterval: 10, repeats: false)

    let request1 = UNNotificationRequest(identifier: "FiveSecond", content: notificationContent, trigger: notificationTrigger1)

    center.add(request1, withCompletionHandler: {(_ error: Error?) -> Void in
        if error == nil {
            print("add NotificationRequest1 succeeded!")
            center.removePendingNotificationRequests(withIdentifiers: [Notification.Category.tutorial])
        }
    })


    let notificationTrigger2 = UNTimeIntervalNotificationTrigger(timeInterval: 60*10, repeats: true)

    let request2 = UNNotificationRequest(identifier: "FiveSecond", content: notificationContent, trigger: notificationTrigger2)

    center.add(request2, withCompletionHandler: {(_ error: Error?) -> Void in
        if error == nil {
            print("add NotificationRequest2 succeeded!")
            center.removePendingNotificationRequests(withIdentifiers: [Notification.Category.tutorial])
        }
    })

在此代码中,问题在于第一个通知未触发,而10分钟后仅第二个通知被触发。

1 个答案:

答案 0 :(得分:0)

您将两次删除先前计划的通知:

if error == nil {
    print("add NotificationRequest2 succeeded!")
    //remove previous notifications
    center.removePendingNotificationRequests(withIdentifiers: [Notification.Category.tutorial]) 
}

您应该在应用程序闲置时设置两个通知,前提是用户不会做出反应-这是设置这两个通知的唯一机会。

要在用户采取措施时删除第二个通知,就是在处理该操作的代码中删除不需要的通知,或者在应用程序激活时照顾该逻辑。