最后10天需要触发本地通知根据我们的终止日期。例如,当前日期为今日日期(10-08-2019),到期日期为(20-08-2019)之间需要触发本地通知。为了测试目的,更改了设备到期日期范围内的设备日期(根据开始日期和终止日期之间的10天范围),.But无法在最后10天内获得本地通知。最后10天需要每天触发本地通知。我已经使用了下面的代码,但我没有得到结果。
func deviceExpiryReminder(){
let dateString = "2010-08-20 00:00:00"
let formatter : DateFormatter = DateFormatter()
formatter.timeZone = NSTimeZone.local
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date = formatter.date(from: dateString)
if date != nil && date! > Date() {
let message = "Device Expire Reminder"
let title1 = "Your device is expire in {2} days"
let title2 = "Your device is due to expire"
let identifier = "DeviceExpire"
//trigger for every day from configured days before
for i in (0..<10) {
let preTitleMsg = title1.replacingOccurrences(of: "{2}", with: String(i))
var title = preTitleMsg
if i == 0 {
title = title2 + "today"
} else if i == 1 {
title = title2 + "tomorrow"
}
let userInfo = ["reminderType": "Device Expire",
"title": title,
"message": message,
"identifier": identifier]
let timeInterval = TimeInterval(-1 * i * 24 * 3600)
let triggerDate: Date = date!.addingTimeInterval(timeInterval)
if triggerDate > Date() {
createReminder(title, message, triggerDate, false, NSCalendar.Unit.day, nil, userInfo, identifier + String(i))
}
}
}
}
func createReminder(_ title: String, _ message: String, _ triggerDate: Date?, _ canRepeat: Bool, _ repeatInterval: NSCalendar.Unit, _ triggerDateComponents: DateComponents?, _ userInfo: [AnyHashable : Any]?, _ identifier: String) {
if #available(iOS 10.0, *) {
let content = UNMutableNotificationContent()
content.title = title
content.body = message
content.sound = UNNotificationSound.default
let center = UNUserNotificationCenter.current()
var trigger:UNNotificationTrigger?
if triggerDateComponents != nil {
trigger = UNCalendarNotificationTrigger(dateMatching: triggerDateComponents!, repeats: canRepeat)
} else {
trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: (triggerDate?.timeIntervalSinceNow)!, repeats: canRepeat)
}
let request = UNNotificationRequest.init(identifier: identifier, content: content, trigger: trigger)
center.add(request) { (error) in
if error != nil {
print("Error")
}else {
print("Notification added")
}
}
}
}发布于 2019-08-21 06:37:41
您应该添加“第二天”和“更改的时区”作为系统区域标识符。
试着告诉我:
func deviceExpiryReminder(){
let dateString = "2019-08-30 00:00:00"
let formatter : DateFormatter = DateFormatter()
formatter.timeZone = NSTimeZone.local
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date = formatter.date(from: dateString)
if date != nil && date! > Date() {
let message = "Device Expire Reminder"
let title1 = "Your device is expire in {2} days"
let title2 = "Your device is due to expire"
let identifier = "DeviceExpire"
//trigger for every day from configured days before
let numberofDays = self.daysBetweenDates(startDate: Date(), endDate: date ?? Date())
for i in (0...numberofDays) {
let preTitleMsg = title1.replacingOccurrences(of: "{2}", with: String(numberofDays - i))
var title = preTitleMsg
if numberofDays == i {
title = title2 + " today"
} else if numberofDays - 1 == i{
title = title2 + " tomorrow"
}
let userInfo = ["reminderType": "Device Expire",
"title": title,
"message": message,
"identifier": identifier]
var calendar = Calendar.current
calendar.timeZone = TimeZone(identifier: self.getCurrentTimeZone())!
let currentDay = Date()
let nextDate = Calendar.current.date(byAdding: .day, value: i, to: currentDay)
if nextDate! >= Date() {
createReminder(title, message, nextDate, false, NSCalendar.Unit.day, nil, userInfo, identifier + String(i))
}
}
}
}
func getCurrentTimeZone() -> String{
return String (TimeZone.current.identifier)
}
func createReminder(_ title: String, _ message: String, _ triggerDate: Date?, _ canRepeat: Bool, _ repeatInterval: NSCalendar.Unit, _ triggerDateComponents: DateComponents?, _ userInfo: [AnyHashable : Any]?, _ identifier: String) {
if #available(iOS 10.0, *) {
let content = UNMutableNotificationContent()
content.title = title
content.body = message
content.sound = UNNotificationSound.default
let center = UNUserNotificationCenter.current()
// *** create calendar object ***
var calendar = Calendar.current
calendar.timeZone = TimeZone(identifier: self.getCurrentTimeZone())!
let components = calendar.dateComponents([.month, .hour, .year, .day], from: triggerDate!)
print("trigger dates one by one : \(triggerDate!)")
let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: canRepeat)
let request = UNNotificationRequest.init(identifier: identifier, content: content, trigger: trigger)
center.add(request) { (error) in
if error != nil {
print("Error")
}else {
print("Notification added")
}
}
}
}
func daysBetweenDates(startDate: Date, endDate: Date) -> Int {
let daysBetween = Calendar.current.dateComponents([.day], from: startDate, to: endDate)
print(daysBetween.day!)
return daysBetween.day!
}https://stackoverflow.com/questions/57440873
复制相似问题