#ios #swift #xcode #localnotification #uncalendarnotificationtrigger
#iOS #swift #xcode #локальное уведомление #некалендарный триггер
Вопрос:
Несмотря на то, что я потратил буквально несколько дней на этот код, я все еще не могу заставить его сработать должным образом. Я просмотрел много недавних онлайн-руководств, и мой код соответствует им всем, но все равно не будет вести себя должным образом при сборке на симуляторе или устройстве. Все, что я хочу, это чтобы локальное уведомление запускалось в определенное время каждый день (код показан при попытке 10:12 утра). Целью развертывания является iOS 14.3, и я использую последнюю версию swift 5. В отчаянии я даже попытался использовать метод time interval UNTimeIntervalNotificaitonTrigger для создания промежутка времени на следующий день, но это время от времени проверяется как на устройстве, так и на симуляторе (иногда срабатывает в секундах или минутах) Однако в идеале мне бы хотелось, чтобы он запускался в определенное время каждый день.
Я ничего не кодировал в AppDelegate или sceneDelegate, потому что учебные пособия, которым я следовал, вообще не работали. Весь этот код — это viewDidLoad ViewController, с которого я хочу, чтобы уведомление было авторизовано (это не начальный контроллер представления, если это имеет значение). Прошу о помощи!
//STEP 1 - Ask user for permission to notify
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { success, error in
if success {
// TO REMOVE NOTIFICAITONS: UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
print("All set with User Authorisation!")
} else if let error = error {
print("Oh No, Authorisation did not work: ", error.localizedDescription)
}
}
//STEP 2 - Create Notification Content
let content = UNMutableNotificationContent()
content.title = "Daily Notification TITLE"
content.subtitle = "Hey - this is your daily notification SUBTITLE"
content.body = "This is the BODY of your daily notification"
content.sound = UNNotificationSound.default
//STEP 3 - Set up the Trigger by time each day
var triggerTime = DateComponents()
triggerTime.hour = 10
triggerTime.minute = 12
let myNotificationTrigger = UNCalendarNotificationTrigger(dateMatching: triggerTime, repeats: true)
// STEP 4 - Creating the Request
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: myNotificationTrigger)
// Step 5 - Register the Request
UNUserNotificationCenter.current().add(request) { (error) in
if let error = error{
print("Error has occured: (error.localizedDescription)")
} else {
print("Added Notification: (UUID().uuidString)")
}
}
} // END OF THE viewDidLoad bracket
Комментарии:
1. Что вы подразумеваете под «не работает»?
2. @Sweeper спасибо — вообще не срабатывает. Авторизация работает без проблем, когда я обращаюсь к этому контроллеру представления.