Swift 3本地通知不会触发
我有以下设置,并没有任何通知是在所有的射击。
根据堆栈上的其他类似问题,我已经为每个请求添加了一个唯一的标识符,并且还将内容添加到了内容中。
我有这个要求用户许可的function。
func sendIntNotifications() { //1. Request permission from the user UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound], completionHandler: { (granted, error) in if granted { print ("Notification access granted") } else { print(error?.localizedDescription) } UNUserNotificationCenter.current().delegate = self }) // This function has a lot of other code that then calls this function to set multiple notifications : for daysInt in outputWeekdays { scheduleActualNotification(hourInt: hourInt, minuteInt: minuteInt, dayInt: daysInt) } }
这些是主要function:
func scheduleActualNotification(hourInt hour: Int, minuteInt minute: Int, dayInt day: Int) { // 3.1 create date components for each day var dateComponents = DateComponents() dateComponents.hour = hour dateComponents.minute = minute dateComponents.day = day //3.2 Create a calendar trigger for that day at that time let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true) //3.3 Message content let content = UNMutableNotificationContent() content.title = "Test Title" content.body = "Test body" content.badge = 1 // 3.4 Create the actual notification let request = UNNotificationRequest(identifier: "bob \(i+1)", content: content, trigger: trigger) // 3.5 Add our notification to the notification center UNUserNotificationCenter.current().add(request) { (error) in if let error = error { print("Uh oh! We had an error: \(error)") } } }
这个function是当这个应用程序打开时收到通知
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { completionHandler([.alert, .sound]) //calls the completionHandler indicating that both the alert and the sound is to be presented to the user }
有没有错误,哈哈!
编辑:
所以从用户界面,我select了2350和周六和周日。 我希望通知在周六和周日的2350发送。
我print(daysInt)
。 它的第一个值是1,第二个值是7,正如预期的那样。 其次,我进入了函数scheduleActualNotification
,时间的值是23,分钟是50,正如所料。
谢谢!
所以经过几周的挫折,这是解决scheme:
将dateComponents.day = day
replace为dateComponents.weekday = day
。 .day
是一个月中的一天,而.weekday
是一周中的一天!
也不要使用dateComponents.year = 2017
因为这导致通知不会触发。
通知现在工作得很好!
日历单元标志可以帮助您:
var notificationTriggerCalendar : UNCalendarNotificationTrigger? = nil if let fireDate = trigger.remindAt { let unitFlags = Set<Calendar.Component>([.hour, .year, .minute, .day, .month, .second]) var calendar = Calendar.current calendar.timeZone = .current let components = calendar.dateComponents(unitFlags, from: fireDate) let newDate = Calendar.current.date(from: components) notificationTriggerCalendar = UNCalendarNotificationTrigger.init(dateMatching: components, repeats: true) }
- 确保在Firebase中创build新用户的唯一用户名(Swift)
- 在Objective-C框架中使用Swift闭包
- Realm – Swift存储协议types
- 在Swift中使用iosMath
- 对成员dataTask的模糊引用(with:completionHandler :)'
- 在Swift中,对于AnyObject,我如何setValue()然后调用valueForKey()
- ios swift:是否可以改变string中某个单词的字体风格?
- 如何检查iOS Swift 2中的WiFi是否打开或closures?
- expression式types“NSMutableArray!” 没有更多的上下文是模棱两可的