iOS 上的 LocalNotifications 无法正常工作
LocalNotifications on iOS not working properly
我的 iOS-App 上的 LocalNotifications 有问题。
在我的应用程序上,用户可以安排通知以在合同到期时获得提醒。他可以自己选择日期和时间。
然而,我一再收到用户的电子邮件,说他们的通知不起作用。
但是,在我自己的个人设备上进行测试时,我没有遇到任何问题,而且它们工作正常。
我想知道我是否缺少对 LocalNotifications 的一些理解。它们会在某个时候过期吗?当设备关闭时,UNUserNotificationCenter 会删除排队的通知吗?这种行为是否有任何可能的原因,或者其他人是否遇到过这种行为?
如有任何帮助,我们将不胜感激。
我在下面包含了创建 LocalNotification 的代码:
/**
Schedules a local notification.
- parameter company: String! of the contracts company name.
- parameter name: String! of the contracts name.
- parameter datum: Date! of the reminder.
- returns: String of NotificationID.
*/
static func scheduleNotification(company: String!, name: String!, datum: Date!) -> String! {
let notificationID = arc4random()
let content = UNMutableNotificationContent()
content.title = NSLocalizedString("Kündigungserinnerung ", comment: "") + company
content.body = NSLocalizedString("Falls Sie Ihren ", comment: "") + name + NSLocalizedString(" Vertrag kündigen möchten, wäre jetzt der richtige Zeitpunkt dafür! ", comment: "")
content.categoryIdentifier = Notification.Category.Local.identifier
content.userInfo = ["NotificationID": notificationID]
content.sound = UNNotificationSound.default()
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month, .day, .hour, .minute], from: datum)
// UnMark to check if Notifications work
//let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let finalComponents = NSDateComponents()
finalComponents.year = components.year!
finalComponents.month = components.month!
finalComponents.day = components.day!
finalComponents.hour = components.hour!
finalComponents.minute = components.minute!
let trigger = UNCalendarNotificationTrigger(dateMatching: finalComponents as DateComponents, repeats: false)
let requestIdentifier = "request"
let request = UNNotificationRequest(identifier: requestIdentifier, content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: { error in
if error != nil {
log.error(error!)
}
})
return String(notificationID)
}
另一个论坛的回答解决了我的问题:
我的 iOS-App 上的 LocalNotifications 有问题。
在我的应用程序上,用户可以安排通知以在合同到期时获得提醒。他可以自己选择日期和时间。 然而,我一再收到用户的电子邮件,说他们的通知不起作用。 但是,在我自己的个人设备上进行测试时,我没有遇到任何问题,而且它们工作正常。
我想知道我是否缺少对 LocalNotifications 的一些理解。它们会在某个时候过期吗?当设备关闭时,UNUserNotificationCenter 会删除排队的通知吗?这种行为是否有任何可能的原因,或者其他人是否遇到过这种行为?
如有任何帮助,我们将不胜感激。
我在下面包含了创建 LocalNotification 的代码:
/**
Schedules a local notification.
- parameter company: String! of the contracts company name.
- parameter name: String! of the contracts name.
- parameter datum: Date! of the reminder.
- returns: String of NotificationID.
*/
static func scheduleNotification(company: String!, name: String!, datum: Date!) -> String! {
let notificationID = arc4random()
let content = UNMutableNotificationContent()
content.title = NSLocalizedString("Kündigungserinnerung ", comment: "") + company
content.body = NSLocalizedString("Falls Sie Ihren ", comment: "") + name + NSLocalizedString(" Vertrag kündigen möchten, wäre jetzt der richtige Zeitpunkt dafür! ", comment: "")
content.categoryIdentifier = Notification.Category.Local.identifier
content.userInfo = ["NotificationID": notificationID]
content.sound = UNNotificationSound.default()
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month, .day, .hour, .minute], from: datum)
// UnMark to check if Notifications work
//let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let finalComponents = NSDateComponents()
finalComponents.year = components.year!
finalComponents.month = components.month!
finalComponents.day = components.day!
finalComponents.hour = components.hour!
finalComponents.minute = components.minute!
let trigger = UNCalendarNotificationTrigger(dateMatching: finalComponents as DateComponents, repeats: false)
let requestIdentifier = "request"
let request = UNNotificationRequest(identifier: requestIdentifier, content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: { error in
if error != nil {
log.error(error!)
}
})
return String(notificationID)
}
另一个论坛的回答解决了我的问题: