Wir ändern den Inhalt der Benachrichtigungsanwendung iOS

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
 // 1 //   ,      Tuple    . // showBody -     Bool,           . // withAction -     Bool,       ,   ""  . // atDate date -    Date,      ,      . func showNotification(with item: (String, String), showBody: Bool, withAction: Bool, atDate date: Date) { // 2 //    let content = UNMutableNotificationContent() // 3 //     let userActionsIdentifier = “showMe” // 4 //      . content.title = item.0 // 5 //    ,      false,  ,       . if showBody { content.body = item.1 } // 6 //     -    notificationCenter userInfo      . content.userInfo = [item.0: item.1] content.sound = UNNotificationSound.default // 7 //        withAction  true,      "Show me". if withAction { content.categoryIdentifier = userActionsIdentifier } // 8 //    ,        . let notificationID = item.0 // 9 //      . //       ,      . var dc = DateComponents() dc.hour = Calendar.current.component(.hour, from: date) dc.minute = Calendar.current.component(.minute, from: date) dc.second = Calendar.current.component(.second, from: date) // 10 //   .     ,       UNCalendarNotificationTrigger. let trigger = UNCalendarNotificationTrigger(dateMatching: dc, repeats: false) // 11 //        ,   . let request = UNNotificationRequest(identifier: notificationID, content: content, trigger: trigger) // 12 //     notificationCenter,     . notificationCenter.add(request) { (error) in error == nil ? print(“notifacation request was added at “, trigger.nextTriggerDate()!) : print(error.debugDescription) } // 13 //    .            .      . let action = UNNotificationAction(identifier: “showMe”, title: “Show me”, options: []) // 14 //   . let category = UNNotificationCategory(identifier:userActionsIdentifier, actions: [action], intentIdentifiers: [], options: []) // 15 //      notificationCenter. notificationCenter.setNotificationCategories([category]) } 



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”) // 1 //   switch     switch response.actionIdentifier { case “showMe”: print(“showMe action”) // 2 //      userInfo,      showNotification   6,      String. let mainText = response.notification.request.content.userInfo.keys.first! as! String // 3 //       userInfo,      showNotification   6,       String. let subText = response.notification.request.content.userInfo.values.first! as! String // 4 //       showNotificationlet,    : // showBody    true,  withAction  false (       ). self.showNotification(with: (mainText, subText), showBody: true, withAction: false, atDate: Date(timeInterval: 3, since: Date())) default: print(“defaul action”) } completionHandler() } 



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

Source: https://habr.com/ru/post/de451454/


All Articles