Dzięki temu mogę planować powiadomienia takie jak te;Sposób obsługi funkcji UserNotifications Akcje w systemie iOS 10
//iOS 10 Notification
if #available(iOS 10.0, *) {
var displayDate: String {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = DateFormatter.Style.full
return dateFormatter.string(from: datePicker.date as Date)
}
let notif = UNMutableNotificationContent()
notif.title = "I am a Reminder"
notif.subtitle = "\(displayDate)"
notif.body = "Here's the body of the notification"
notif.sound = UNNotificationSound.default()
notif.categoryIdentifier = "reminderNotification"
let today = NSDate()
let interval = datePicker.date.timeIntervalSince(today as Date)
let notifTrigger = UNTimeIntervalNotificationTrigger(timeInterval: interval, repeats: false)
let request = UNNotificationRequest(identifier: "reminderNotif", content: notif, trigger: notifTrigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: { error in
if error != nil {
print(error)
// completion(Success: false)
} else {
//completion(Sucess: true)
}
})
}
prosić o uprawnieniach w appDelegate
i powiadomienia pojawiają się w porządku z moim zdaniem przy użyciu niestandardowego rozszerzenia powiadomień.
Dodałem powiadomienia o kategorii powiadomień do kategorii appDelegate
; one również się pojawiają.
//Notifications Actions
private func configureUserNotifications() {
if #available(iOS 10.0, *) {
let tomorrowAction = UNNotificationAction(identifier: "tomorrowReminder", title: "Remind Me Tomorrow", options: [])
let dismissAction = UNNotificationAction(identifier: "dismissReminder", title: "Dismiss", options: [])
let category = UNNotificationCategory(identifier: "reminderNotification", actions: [tomorrowAction, dismissAction], intentIdentifiers: [], options: [.customDismissAction])
UNUserNotificationCenter.current().setNotificationCategories([category])
} else {
// Fallback on earlier versions
}
}
Mam tę samą kategorię w pliku z rozszerzeniem zgłoszenia .plist
. I w rozszerzeniu powiadomień mam następujące elementy, aby zmienić tekst, gdy użytkownik kliknie akcję.
//Handle Notification Actions And Update Notification Window
private func didReceive(_ response: UNNotificationResponse, completionHandler done: (UNNotificationContentExtensionResponseOption) -> Void) {
if response.actionIdentifier == "tomorrowReminder" {
print("Tomrrow Button Pressed")
subLabel.text = "Reminder For Tomorrow"
subLabel.textColor = UIColor.blue
done(.dismissAndForwardAction)
}
if response.actionIdentifier == "dismissReminder" {
print("Dismiss Button Pressed")
done(.dismiss)
} else {
print("Else response")
done(.dismissAndForwardAction)
}
}
Tekst jednak się nie zmienia i nie jest wywoływana żadna z instrukcji;
Over w appDelegate Mam następujące;
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().delegate = self
configureUserNotifications()
}
}
extension AppDelegate: UNUserNotificationCenterDelegate {
@available(iOS 10.0, *)
private func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
completionHandler([.alert, .sound])
}
@available(iOS 10.0, *)
private func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler:() -> Void) {
print("Recieved Action For \(response.actionIdentifier)")
if response.actionIdentifier == "tomorrowReminder" {
print("Tomorrow Reminder")
//Set new reminder for tomorrow using the notification content title
completionHandler()
}
if response.actionIdentifier == "dismissReminder" {
print("Dismiss Reminder...")
completionHandler()
}
}
}
Żadna z tych funkcji są rzeczywiście nazywa się w appDelegate
albo. Nie jestem pewien, czy problem z aktualizacją widoku rozszerzenia jest związany z delegatem aplikacji. Nie sądzę, że śledziłem wideo Apple WWDC, a także inne samouczki i patrzę na API dokumentu i nie mogę tego zrozumieć;
- Dlaczego etykiety tekstowe rozszerzenia powiadomień nie są aktualizowane?
- Dlaczego funkcje w appDelegate nie są wywoływane?
- Jak korzystać z treści powiadomień w aplikacji do delegowania, aby użyć działania ?
PS: Spędziłem ostatnie tygodnie badając i próbując to zrozumieć, wydawało mi się to dość proste i nie jestem pewien, czego mi brakuje. Wiem, że nie jestem jedynym, który ma te problemy.
Co znaczy "@ escaping"? – Honey
Omg, dziękuję! Czy wiesz, w jaki sposób mogę "notification.request.content.title" w delegacie aplikacji zaplanować nowe powiadomienie? Na przykład próbuję zaplanować przypomnienie i wykonać akcję, aby ponownie przypomnieć o jutrze. –
Nie ma znaczenia, wszystko co potrzebowałem zrobić, to użyć 'response.notification.request.content.title' –