Zum Inhalt springen

Anpassung von iOS-Push-Benachrichtigungen

Wenn ein iOS-Gerät eine Benachrichtigung mit einer Warnung erhält, zeigt das System den Inhalt der Warnung in zwei Stufen an. Zuerst wird ein verkürztes Banner mit dem Titel, dem Untertitel und zwei bis vier Zeilen Text aus der Benachrichtigung angezeigt. Wenn der Benutzer auf das verkürzte Banner drückt, zeigt iOS die vollständige Benutzeroberfläche der Benachrichtigung an, einschließlich aller benachrichtigungsbezogenen Aktionen. Das System stellt die Benutzeroberfläche für das verkürzte Banner bereit, aber Sie können die vollständige Benutzeroberfläche mit einer App-Erweiterung für Benachrichtigungsinhalte anpassen.

Die App-Erweiterung für Benachrichtigungsinhalte verwaltet einen View Controller, der Ihre benutzerdefinierte Benutzeroberfläche für Benachrichtigungen anzeigt. Dieser View Controller kann die standardmäßige Systemoberfläche für Ihre Benachrichtigungen ergänzen oder ersetzen. Sie können Ihren View Controller verwenden, um:

  • Die Platzierung von Elementen anzupassen, einschließlich Titel, Untertitel und Text der Warnung.
  • Andere Schriftarten oder Stile für Oberflächenelemente zu verwenden.
  • App-spezifische Daten anzuzeigen – zum Beispiel Daten, die in app-spezifischen Schlüsseln der Payload der Benachrichtigung gespeichert sind.
  • Benutzerdefinierte Bilder oder Branding einzubinden.

Ihre App-Erweiterung muss ihren View Controller mit den sofort verfügbaren Daten konfigurieren, wie dem Inhalt der Benachrichtigung und den Dateien, die im Bundle Ihrer App-Erweiterung vorhanden sind. Wenn Sie eine App-Gruppe verwenden, um Daten zwischen Ihrer App und Ihrer App-Erweiterung zu teilen, können Sie auch alle Dateien verwenden, die in der App-Gruppe gefunden werden. Um sicherzustellen, dass Ihre Benachrichtigungen rechtzeitig zugestellt werden, konfigurieren Sie die Ansichten so schnell wie möglich. Führen Sie keine lang andauernden Aufgaben aus, wie den Versuch, Daten über das Netzwerk abzurufen.

Fügen Sie die App-Erweiterung für Benachrichtigungsinhalte zu Ihrem Projekt hinzu

Anchor link to

So fügen Sie eine App-Erweiterung für Benachrichtigungsinhalte zu Ihrer iOS-App hinzu:

  1. Wählen Sie in Xcode Datei > Neu > Ziel.
  2. Wählen Sie Notification Content Extension aus der iOS Application Extension.
  3. Klicken Sie auf Weiter.
  4. Geben Sie einen Namen für Ihre App-Erweiterung an.
  5. Klicken Sie auf Fertig stellen.

Fügen Sie Ansichten zu Ihrem View Controller hinzu

Anchor link to

Die von Xcode bereitgestellte Vorlage enthält ein Storyboard und einen View Controller, die Sie konfigurieren können. Erstellen Sie Ihre benutzerdefinierte Benutzeroberfläche, indem Sie Ansichten zu Ihrem View Controller hinzufügen. Verwenden Sie beispielsweise Labels, um den Titel, den Untertitel und den Text der Benachrichtigung anzuzeigen. Sie können auch Bildansichten und Ansichten hinzufügen, die nicht interaktiven Inhalt anzeigen. Sie müssen keinen anfänglichen Inhalt für Ihre Ansichten bereitstellen.

In iOS 12 und höher können Sie interaktive Steuerelemente (z. B. Schaltflächen oder Schalter) hinzufügen. Weitere Informationen finden Sie unter Unterstützung interaktiver Steuerelemente.

Konfigurieren Sie Ihren View Controller

Anchor link to

Verwenden Sie die didReceive(_:)-Methode Ihres View Controllers, um dessen Labels und andere Ansichten zu aktualisieren. Die Payload der Benachrichtigung enthält die Daten, die zur Konfiguration Ihres View Controllers verwendet werden. Sie können auch Daten aus den anderen Dateien Ihrer App-Erweiterung verwenden. Listing 1 zeigt eine Version dieser Methode, die den Titel und den Text aus der Payload der Benachrichtigung abruft und die Zeichenfolgen zwei UILabel-Steuerelementen zuweist, die als Outlets auf dem View Controller gespeichert sind.

// Konfigurieren der Benutzeroberfläche zur Laufzeit
func didReceive(_ notification: UNNotification) {
self.bodyText?.text = notification.request.content.body
self.headlineText?.text = notification.request.content.title
}

Wenn eine zweite Benachrichtigung eintrifft, während Ihr View Controller bereits sichtbar ist, ruft das System die didReceive(_:)-Methode erneut mit der neuen Payload der Benachrichtigung auf.

Unterstützung interaktiver Steuerelemente

Anchor link to

In iOS 12 und höher können Sie Benutzerinteraktionen in Ihren benutzerdefinierten Benachrichtigungen aktivieren. Dies ermöglicht es Ihnen, interaktive Steuerelemente wie Schaltflächen und Schalter zu Ihrer benutzerdefinierten Oberfläche hinzuzufügen.

So aktivieren Sie Benutzerinteraktionen:

  1. Öffnen Sie die info.plist-Datei Ihrer Notification Content Extension.
  2. Fügen Sie den Schlüssel UNNotificationExtensionUserInteractionEnabled zu Ihren Erweiterungsattributen hinzu. Geben Sie ihm einen booleschen Wert und setzen Sie ihn auf YES.
Aktivieren von Benutzerinteraktionen in der info.plist-Datei der Benachrichtigungserweiterung

Fügen Sie Apple Pay zu Ihrer Push-Benachrichtigungserweiterung hinzu (Beispielansicht)

Anchor link to

Codeblock-Beispiel mit Apple Pay-Button in der Push-Benachrichtigungserweiterung

Anchor link to
import UIKit
import Foundation
import UserNotifications
import UserNotificationsUI
import PassKit
class NotificationViewController: UIViewController, UNNotificationContentExtension, PKPaymentAuthorizationViewControllerDelegate {
func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
controller.dismiss(animated: true, completion: nil)
}
@IBOutlet weak var buyWithApplePayButton: UIButton!
@IBOutlet weak var containerView: UIView!
@IBOutlet weak var payInAppButton: UIButton!
@IBOutlet weak var segmentCustom: UISegmentedControl!
private var amount: NSDecimalNumber = 0;
override func viewDidLoad() {
super.viewDidLoad()
buttonCustomisation()
amount = NSDecimalNumber.init(value: 5)
}
func buttonCustomisation () {
self.buyWithApplePayButton.layer.masksToBounds = true
self.buyWithApplePayButton.layer.cornerRadius = 10
self.payInAppButton.layer.masksToBounds = true
self.payInAppButton.layer.cornerRadius = 10
self.containerView.layer.borderColor = UIColor.gray.cgColor
self.containerView.layer.borderWidth = 0.7
self.containerView.layer.masksToBounds = true
self.containerView.layer.cornerRadius = 20
}
func didReceive(_ notification: UNNotification) {
// Configuring the notification interface at runtime
}
@IBAction func buyWithApplePayAction(_ sender: Any) {
let request = PKPaymentRequest()
request.merchantIdentifier = "merchant.com.sample.ApplePayAction"
request.supportedNetworks = [PKPaymentNetwork.visa, PKPaymentNetwork.masterCard, PKPaymentNetwork.amex]
request.merchantCapabilities = PKMerchantCapability.capability3DS
request.countryCode = "US"
request.currencyCode = "USD"
request.paymentSummaryItems = [
PKPaymentSummaryItem(label: "Some Product", amount: amount)
]
let applePayController = PKPaymentAuthorizationViewController(paymentRequest: request)
applePayController?.delegate = self
self.present(applePayController!, animated: true, completion: nil)
}
@IBAction func payInAppButtonAction(_ sender: Any) {
print("pay in app button tapped")
}
@IBAction func segmentAction(_ sender: Any) {
switch segmentCustom.selectedSegmentIndex {
case 0:
amount = NSDecimalNumber.init(value: 5)
break
case 1:
amount = NSDecimalNumber.init(value: 10)
break
case 2:
amount = NSDecimalNumber.init(value: 20)
break
default:
amount = NSDecimalNumber.init(value: 5)
break
}
}
}