Hallo!
In diesem Artikel möchte ich meine Erfahrungen mit der Verwendung einer (zumindest für mich) nicht offensichtlichen Option zum Ändern des Benachrichtigungstextes der Anwendung und zum Senden zusätzlicher Daten über das UNUserNotificationCenter mitteilen.
Ich hoffe, dieser Artikel ist nützlich für Anfänger in der Programmierung für iOS auf Swift. Es wird davon ausgegangen, dass Sie mindestens einige Programmiererfahrung mit Swift für iOS haben. Ich habe Swift 5 und Xcode 10.2.1 verwendet. Und so fangen wir an.
Herausforderung
Ich habe eine Anwendung, die die Benutzerbenachrichtigungen anzeigt. Eine Benachrichtigung besteht aus Text und Hintergrundtext.
Die Idee ist also, dem Benutzer zuerst nur den Haupttext anzuzeigen. Wenn der Benutzer den Nebentext wissen möchte, muss er in der Benachrichtigung auf die Schaltfläche „Anzeigen“ klicken.
Ich verwende die folgende Methode, um eine Benachrichtigung anzuzeigen (alle Erläuterungen unten):
1. Zunächst müssen wir eine Instanz von UNUserNotificationCenter definieren:
class NotificationService: NSObject, UNUserNotificationCenterDelegate { let notificationCenter = UNUserNotificationCenter.current() }
2. Als Nächstes deklarieren wir eine Methode, mit der wir Benachrichtigungen senden:
Meine Benachrichtigungsanforderungsmethode Wenn wir diese Methode aufrufen, wird zum festgelegten Zeitpunkt eine Benachrichtigung angezeigt.
Wenn der Benutzer die Benachrichtigung herunterzieht, wird die Schaltfläche "Show me" angezeigt. Anschließend muss der Benutzer auf diese Schaltfläche klicken, um den Hintergrundtext anzuzeigen. Dazu müssen wir die Delegate-Methode UNUserNotificationCenterDelegate verwenden:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { … }
Der Code, den ich in der Methode dieses Delegaten verwende, lautet also wie folgt:
Meine Delegatenmethode func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { print(“didReceive response”)
Und so sieht es aus:

Innerhalb des Projekts (das Sie über den folgenden Link herunterladen können) gibt es etwas mehr Code, aber das Wesentliche der Idee wird in diesem Artikel beschrieben.
Vielen Dank!
Link zum Projekt