我想每30分钟发送一次本地通知。我已经实现了重复本地通知,但是它删除了之前的本地通知。该场景如下所述: 我的客户想获得夜间警报。他希望早上醒来时可以立即查看所有通知警报。
代码如下:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound], completionHandler: {didAllow,error in })
return true
}
func applicationDidEnterBackground(_ application: UIApplication) {
let content = UNMutableNotificationContent()
content.title = "Hello"
content.subtitle = "I am your local notification"
content.body = "Yippppiiiieee...."
content.badge = 1
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true)
let request = UNNotificationRequest(identifier: "testing", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}
答案 0 :(得分:0)
先前的待处理通知被取消,因为您使用相同的identifier
创建了一个新通知。按照documentation
如果您提供唯一标识符,则系统会创建一个新通知。
如果标识符与先前传递的通知匹配,则系统再次提醒用户,用新的通知替换旧的通知,并将新的通知放在列表的顶部。
如果标识符与待处理请求匹配,则新请求将替换待处理请求。
解决方案是始终使用新标识符创建UNNotificationRequest
var notificationCount = 0
func applicationDidEnterBackground(_ application: UIApplication) {
// (...)
notificationCount += 1
let request = UNNotificationRequest(identifier: "testing\(notificationCount)", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}
答案 1 :(得分:0)
首先,您不应使用相同的标识符,因为它会删除已安排的标识符
let request = UNNotificationRequest(identifier: "testing", content: content, trigger: trigger)
您必须插入不同的TimeInterval
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true)
//
(1...10).forEach {
let content = UNMutableNotificationContent()
content.title = "Hello \($0)"
content.subtitle = "I am your local notification \($0)"
content.body = "Yippppiiiieee.... \($0)"
content.badge = 1
let trigger = UNTimeIntervalNotificationTrigger(timeInterval:TimeInterval($0*1800), repeats: false)
let request = UNNotificationRequest(identifier: "testing\($0)", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}
答案 2 :(得分:0)
请勿使用相同的标识符。它将覆盖先前的通知。
现在您会问,如果每次生成一个随机字符串,我将如何识别被窃听的通知?
因此,假设您有一个名为“ coffeeTimeNotificationID”的标识符。只需将时间戳值([NSDate timeIntervalSinceReferenceDate]]
)附加到此字符串即可。现在您的字符串应如下所示:“ coffeeTimeNotificationID1232134314
”。
每当用户点击此通知时,只需在标识符字符串中搜索“ coffeeTimeNotificationID
”即可。如果找到它,您将知道点击了哪种通知。