Push Notifications Tutorial: Erste Schritte

Update Hinweis: Chuck Krutsinger hat dieses Tutorial für Xcode 11 und Swift 5 aktualisiert. Jack Wu schrieb das ursprüngliche Tutorial und Keegan Rush schrieb ein früheres Update.

iOS-Entwickler lieben es, sich vorzustellen, dass Menschen ihre großartige App ständig nutzen. Aber natürlich müssen Benutzer manchmal die App schließen und andere Aktivitäten ausführen. Wäsche faltet sich nicht selbst, wissen Sie! Glücklicherweise ermöglichen Push-Benachrichtigungen Entwicklern, Benutzer zu erreichen und kleine Aufgaben auszuführen — auch wenn Benutzer eine App nicht aktiv verwenden! In diesem Tutorial erfahren Sie, wie Sie:

  • Konfigurieren Sie Ihre App, um Push-Benachrichtigungen zu erhalten.
  • Zeigen Sie sie Ihren Benutzern an oder führen Sie andere Aufgaben aus.

Erste Schritte

Was sind Push-Benachrichtigungen? Dabei handelt es sich um Nachrichten, die über den Apple Push Notification Service (APNs) an Ihre App gesendet werden, auch wenn Ihre App nicht ausgeführt wird oder das Telefon im Ruhezustand ist. Wofür können Sie Push-Benachrichtigungen verwenden?

  • Zeigt eine kurze Textnachricht an, die als Warnung bezeichnet wird und die Aufmerksamkeit auf etwas Neues in Ihrer App lenkt.
  • Spielen Sie einen Benachrichtigungston ab.
  • Legen Sie eine Ausweisnummer auf dem Symbol der App fest, um den Benutzer über neue Elemente zu informieren.
  • Geben Sie Aktionen an, die der Benutzer ausführen kann, ohne die App zu öffnen.
  • Zeigt einen Medienanhang an.
  • Sei still, damit die App eine Aufgabe im Hintergrund ausführen kann.
  • Gruppieren Sie Benachrichtigungen in Threads.
  • Gelieferte Benachrichtigungen bearbeiten oder entfernen.
  • Führen Sie den Code aus, um Ihre Benachrichtigung zu ändern, bevor Sie sie anzeigen.
  • Zeigt eine benutzerdefinierte, interaktive Benutzeroberfläche für Ihre Benachrichtigung an.
  • Und wahrscheinlich noch mehr.

Dieses Tutorial behandelt viele dieser Anwendungen, um Ihnen den Einstieg in die Erstellung von Push-Benachrichtigungen in Ihren Apps zu erleichtern. Um dieses Tutorial abzuschließen, benötigen Sie Folgendes:

  • Xcode 11.4 oder höher. Frühere Versionen von Xcode unterstützen keine Push-Benachrichtigungen mit dem Simulator.
  • Eine Mitgliedschaft im Apple Developer Program, um die App mit der Berechtigung Push-Benachrichtigungen kompilieren zu können.
Hinweis: Später im Tutorial erfahren Sie, wie Sie Push-Benachrichtigungen an ein reales Gerät senden, indem Sie an ein reales Gerät senden.

Um Push-Benachrichtigungen zu senden und zu empfangen, müssen Sie drei Hauptaufgaben ausführen:

  1. Konfigurieren Sie Ihre App und registrieren Sie sie beim APNs.
  2. Senden Sie eine Push-Benachrichtigung von einem Server an bestimmte Geräte über APNs. Sie simulieren das mit Xcode.
  3. Verwenden Sie Rückrufe in der App, um Push-Benachrichtigungen zu empfangen und zu verarbeiten.

Das Senden von Push-Benachrichtigungen liegt in der Verantwortung der Serverkomponente Ihrer App. Viele Apps verwenden Drittanbieter, um Push-Benachrichtigungen zu senden. Andere verwenden benutzerdefinierte Lösungen oder gängige Bibliotheken (z. B. Houston). Sie werden nur auf das Senden von Push-Nachrichten in diesem Tutorial berühren, so sicher sein, die zu überprüfen, wo von hier gehen? abschnitt, um auf Ihrem Wissen über Push-Benachrichtigungen aufzubauen.

Um zu beginnen, laden Sie das WenderCast Starter-Projekt über die Schaltfläche Materialien herunterladen oben oder unten in diesem Lernprogramm herunter. WenderCast ist jedermanns Go-to-Quelle für raywenderlich.com podcasts und aktuelle Nachrichten.

Öffnen Sie im Starter-Ordner WenderCast.xcodeproj. Wählen Sie im Projektnavigator WenderCast und anschließend das WenderCast-Ziel aus. Wählen Sie auf der Registerkarte Allgemein & Fähigkeiten Ihr Entwicklungsteam aus. Baue und laufe in einem Simulator.

Starterprojekt erstellen und ausführen

WenderCast zeigt eine Liste der raywenderlich.com podcasts und ermöglicht es Benutzern, sie zu spielen. Benutzer werden jedoch nicht informiert, wenn ein neuer Podcast verfügbar ist und die Registerkarte Nachrichten leer ist! Sie werden diese Probleme bald mit der Leistung von Push-Benachrichtigungen beheben.

Senden und Empfangen von Push-Benachrichtigungen

Konfigurieren der App

Sicherheit ist für Push-Benachrichtigungen sehr wichtig. Sie möchten nicht, dass jemand anderes Push-Benachrichtigungen über Ihre App an Ihre Benutzer sendet. Sie müssen mehrere Aufgaben ausführen, um Ihre App für den sicheren Empfang von Push-Benachrichtigungen zu konfigurieren.

Aktivieren des Push-Benachrichtigungsdienstes

Zuerst müssen Sie die Bundle-ID ändern. Markieren Sie in Xcode WenderCast im Projektnavigator und wählen Sie dann das WenderCast-Ziel aus. Wählen Sie Allgemein und ändern Sie dann die Bundle-ID in etwas Eindeutiges, damit der Push-Benachrichtigungsserver von Apple Pushs an diese App weiterleiten kann.

Ändern Sie die Bundle-ID

Als nächstes müssen Sie eine App-ID in Ihrem Entwicklerkonto erstellen und die Push-Benachrichtigungsberechtigung aktivieren. Xcode hat eine einfache Möglichkeit, dies zu tun: Klicken Sie bei weiterhin ausgewähltem Powercast-Ziel auf die Registerkarte Signing & Capabilities und dann auf die Schaltfläche + Capability. Geben Sie „push“ in das Filterfeld ein und drücken Sie die Eingabetaste.

Fügen Sie die Push-Benachrichtigungsfunktion hinzu

Nachdem Sie die Berechtigung für Push-Benachrichtigungen hinzugefügt haben, sollte Ihr Projekt folgendermaßen aussehen:

Projekt mit Push-Benachrichtigungsberechtigung

Hinweis: Wenn Probleme auftreten, besuchen Sie das Apple Developer Center. Möglicherweise müssen Sie einer neuen Entwicklerlizenz zustimmen, die Apple gerne aktualisiert, und es erneut versuchen.

Hinter den Kulissen wird die App-ID erstellt und dann die Berechtigung für Push-Benachrichtigungen hinzugefügt. Sie können sich im Apple Developer Center anmelden, um dies zu überprüfen:

App-ID-Konfiguration mit Push-Benachrichtigungsberechtigung

Das ist alles, was Sie jetzt konfigurieren müssen. Sie sind bereit, die App zu verbessern.

Um Erlaubnis für Benutzerbenachrichtigungen bitten

Sie müssen sich in zwei Schritten für Push-Benachrichtigungen registrieren. Zunächst müssen Sie die Berechtigung des Benutzers zum Anzeigen von Benachrichtigungen einholen. Anschließend können Sie das Gerät registrieren, um Remote-Benachrichtigungen (Push-Benachrichtigungen) zu erhalten. Wenn alles gut geht, stellt Ihnen das System ein Gerätetoken zur Verfügung, das Sie sich als „Adresse“ für dieses Gerät vorstellen können.

In WenderCast registrieren Sie sich sofort nach dem Start der App für Push-Benachrichtigungen. Fragen Sie zuerst nach Benutzerberechtigungen.

Öffnen Sie AppDelegate.swift und fügen Sie Folgendes am Anfang der Datei hinzu:

import UserNotifications

Fügen Sie dann die folgende Methode am Ende von AppDelegate hinzu:

func registerForPushNotifications() { //1 UNUserNotificationCenter.current() //2 .requestAuthorization(options: ) { granted, _ in //3 print("Permission granted: \(granted)") }}

Was dieser Code tut:

  1. UNUserNotificationCenter verarbeitet alle -verwandte Aktivitäten in der App, einschließlich Push-Benachrichtigungen.
  2. Sie rufen requestAuthorization(options:completionHandler:) auf, um (Sie haben es erraten) die Autorisierung zum Anzeigen von Benachrichtigungen anzufordern. Die übergebenen options geben die Arten von Benachrichtigungen an, die Ihre App verwenden soll.
  3. Der Completion-Handler empfängt einen Bool, der angibt, ob die Autorisierung erfolgreich war. In diesem Fall drucken Sie einfach das Ergebnis.
Hinweis: Die Optionen, die Sie an requestAuthorization(options:completionHandler:) können eine beliebige Kombination von UNAuthorizationOptions:

  • .abzeichen: Zeigen Sie eine Nummer in der Ecke des App-Symbols an.
  • .sound: Spielt einen Sound ab.
  • .warnung: Zeigt eine Textbenachrichtigung an.
  • .carPlay: Display benachrichtigungen in CarPlay.
  • .provisorisch: Post nicht unterbrechende Benachrichtigungen. Der Benutzer erhält keine Berechtigungsanfrage, wenn Sie nur diese Option verwenden, aber Ihre Benachrichtigungen werden nur stillschweigend im Benachrichtigungscenter angezeigt.
  • .providesAppNotificationSettings: Gibt an, dass die App über eine eigene Benutzeroberfläche für Benachrichtigungseinstellungen verfügt.
  • .criticalAlert: Ignorieren die stumm schalter und Nicht Stören. Sie benötigen eine spezielle Berechtigung von Apple, um diese Option zu verwenden, da sie nur für sehr spezielle Anwendungsfälle gedacht ist.

Fügen Sie am Ende von application(_:didFinishLaunchingWithOptions:), kurz vor dem return:

registerForPushNotifications()

Aufruf von registerForPushNotifications() Hier wird sichergestellt, dass die App bei jedem Start versucht, sich für Push-Benachrichtigungen zu registrieren.

Erstellen und ausführen. Wenn die App gestartet wird, sollten Sie eine Eingabeaufforderung erhalten, in der Sie um Erlaubnis gebeten werden, Ihnen Benachrichtigungen zu senden.

Eingabeaufforderung für Benachrichtigungen

Tippen Sie auf Zulassen und puh! Die App kann jetzt Benachrichtigungen anzeigen. Großartig! Was aber, wenn der Benutzer die Berechtigungen ablehnt? Fügen Sie diese Methode in AppDelegate:

func getNotificationSettings() { UNUserNotificationCenter.current().getNotificationSettings { settings in print("Notification settings: \(settings)") }}

Zuerst haben Sie die gewünschten Einstellungen festgelegt. Diese Methode gibt die vom Benutzer gewährten Einstellungen zurück. Im Moment drucken Sie sie, aber Sie werden in Kürze hierher zurückkehren, um mehr damit zu tun.

Ersetzen Sie in registerForPushNotifications()den Aufruf von requestAuthorization(options:completionHandler:) durch Folgendes:

UNUserNotificationCenter.current() .requestAuthorization( options: ) { granted, _ in print("Permission granted: \(granted)") guard granted else { return } self?.getNotificationSettings() }

Sie haben im Completion-Handler einen Aufruf von getNotificationSettings()hinzugefügt. Dies ist wichtig, da der Benutzer jederzeit in die App Einstellungen gehen und seine Benachrichtigungsberechtigungen ändern kann. Das guard vermeidet diesen Aufruf in Fällen, in denen keine Berechtigung erteilt wurde.

Registrierung bei APNs

Jetzt, da Sie über Berechtigungen verfügen, registrieren Sie sich für Remote-Benachrichtigungen!

Fügen Sie in getNotificationSettings() unter der print innerhalb des Verschlusses Folgendes hinzu:

guard settings.authorizationStatus == .authorized else { return }DispatchQueue.main.async { UIApplication.shared.registerForRemoteNotifications()}

Hier überprüfen Sie, ob die authorizationStatus.authorized: Der Benutzer hat Benachrichtigungsberechtigungen erteilt. Wenn ja, rufen Sie UIApplication.shared.registerForRemoteNotifications() auf, um die Registrierung beim Apple Push Notification Service zu starten. Sie müssen dies im Hauptthread aufrufen, sonst erhalten Sie eine Laufzeitwarnung.

Fügen Sie am Ende von AppDelegateFolgendes hinzu:

func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) } let token = tokenParts.joined() print("Device Token: \(token)")}

Diese Methode wird von iOS immer dann aufgerufen, wenn ein Aufruf von registerForRemoteNotifications() erfolgreich ist. Der Code mag kryptisch aussehen, aber er nimmt einfach eine empfangene deviceToken und konvertiert sie in eine Zeichenfolge. Das Device Token ist die Frucht dieses Prozesses. Es wird von APNs bereitgestellt und identifiziert diese App auf diesem bestimmten Gerät eindeutig.

Beim Senden einer Push-Benachrichtigung verwendet der Server Token als „Adressen“, um an die richtigen Geräte zu liefern. In Ihrer App würden Sie dieses Token jetzt an Ihren Server senden, um es zu speichern und später zum Senden von Benachrichtigungen zu verwenden.

Fügen Sie nun Folgendes hinzu:

func application( _ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { print("Failed to register: \(error)")}

Diese Methode wird von iOS aufgerufen, wenn registerForRemoteNotifications() fehlschlägt. Sie drucken nur den Fehler für jetzt.

Das war’s! Bauen und laufen. Da Sie sich in einem Simulator befinden, wird ein Failed to register Fehler angezeigt. Sie können das vorerst ignorieren. Wenn Sie später auf einem realen Gerät ausgeführt werden, sollten Sie ein Token in der Konsolenausgabe erhalten. Hier ein Beispiel:

Beispiel eines Geräte-Tokens

Hinweis: Es gibt mehrere Gründe, warum die Registrierung fehlschlagen kann. Meistens liegt es daran, dass die App-ID nicht richtig konfiguriert wurde. Die Fehlermeldung gibt im Allgemeinen einen guten Hinweis darauf, was falsch ist.

Senden einer simulierten Push-Benachrichtigung

Verwenden Sie einen Texteditor, um eine Datei namens first zu erstellen.apn, die Sie an das simctl-Dienstprogramm von Xcode übergeben. Fügen Sie den folgenden JSON-Text ein und speichern Sie die Datei.

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

Die Struktur dieses JSON wird im nächsten Abschnitt erläutert. Geduld, Heuschrecke.

Erstellen Sie die App und führen Sie sie erneut auf dem Simulator aus. Die App ist noch nicht in der Lage, Push-Benachrichtigungen im Vordergrund zu verarbeiten.

Um simctl verwenden zu können, müssen Sie die Gerätekennung für den Simulator kennen, in dem Sie die App ausführen. Wenn im Simulator nur ein Gerät ausgeführt wird, können Sie booted anstelle einer Kennung verwenden. Um die Kennung zu erhalten, wählen Sie in Xcode Windows ▸ Geräte und Simulatoren, wählen Sie dann oben die Registerkarte Simulatoren und wählen Sie den verwendeten Simulator aus der Liste links aus. Verwenden Sie Ihre Maus, um die Kennung zu kopieren. Möglicherweise müssen Sie das Dialogfeld erweitern, um es vollständig anzuzeigen.

Gerätekennung in Xcode finden

Öffnen Sie die Terminal-App und wechseln Sie in das Verzeichnis, in dem Sie zuerst gespeichert haben.apn. Geben Sie dann den folgenden Befehl ein, indem Sie entweder gebootet oder die Gerätekennung von Xcode anstelle von device_identifier : xcrun simctl push device_identifier bundle_identifier first.apn . Ersetzen Sie device_identifier durch die Gerätekennung, die Sie aus Xcode kopiert haben, und ersetzen Sie bundle_identifier durch die Bundle—ID der App, die Sie beim ersten Einrichten des Projekts verwendet haben. Hier ist ein Beispiel:

Verwenden von xcrun simctl zum Senden einer Push-Benachrichtigung vom Terminal

Führen Sie den Befehl aus und Sie sehen die Push-Benachrichtigung auf dem Simulator!

Push-Benachrichtigung erscheint im Simulator

Tippen Sie auf die Benachrichtigung, um die App zu starten.

App aus der Push-Benachrichtigung gestartet

Ist das nicht cool? :]

Betrachten einer grundlegenden Push-Benachrichtigung

Bevor Sie mit der Behandlung von Push-Benachrichtigungen fortfahren, werfen Sie einen Blick auf den Hauptteil der Benachrichtigung, die Sie gesendet haben:

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

Die Nutzlast ist ein JSON-Wörterbuch, das mindestens ein Element enthält, aps, das auch ein Wörterbuch ist. In diesem Beispiel enthält aps die Felder alertsound und link_url. Wenn das Gerät diese Push-Benachrichtigung erhält, zeigt es eine Alarmansicht mit dem Text „Breaking News!“ und spielt den Standard-Sound-Effekt.

link_url ist eigentlich ein benutzerdefiniertes Feld. Sie können der Nutzlast wie folgt benutzerdefinierte Felder hinzufügen, die an Ihre Anwendung gesendet werden. Da Sie es noch nicht in der App verarbeiten, führt dieses Schlüssel / Wert-Paar derzeit nichts aus.

Korrektur: Ein kluger Leser wies darauf hin, dass in der Dokumentation von Apple angegeben ist, dass benutzerdefinierter Inhalt wie link_url auf Peer-Ebene zum aps Wörterbucheintrag und nicht darin enthalten sein sollte. Es funktioniert immer noch, wenn Sie es hineinlegen, aber wir empfehlen immer, sich an die Dokumentation von Apple zu halten, und werden dies in unserem nächsten Update dieses Tutorials korrigieren.

Es gibt acht integrierte Schlüssel, die Sie dem aps Wörterbuch hinzufügen können (weitere Informationen finden Sie in der offiziellen Payload Key-Referenz):

  • alert: Dies kann eine Zeichenfolge wie im vorherigen Beispiel oder ein Wörterbuch sein. Als Wörterbuch kann es den Text lokalisieren oder andere Aspekte der Benachrichtigung ändern.
  • badge: Dies ist eine Zahl, die in der Ecke des App-Symbols angezeigt wird. Sie können das Abzeichen entfernen, indem Sie es auf 0 setzen.
  • sound: Name der Datei eines benutzerdefinierten Benachrichtigungstons in der App. Diese müssen kürzer als 30 Sekunden sein.
  • thread-id: Verwenden Sie diesen Schlüssel, um Benachrichtigungen zu gruppieren.
  • Kategorie: Dies definiert die Kategorie der Benachrichtigung, die verwendet wird, um benutzerdefinierte Aktionen für die Benachrichtigung anzuzeigen. Sie werden dies in Kürze erkunden.
  • content-available: Wenn Sie diese Taste auf 1 setzen, wird die Push-Benachrichtigung stumm geschaltet. Sie erfahren mehr darüber im Abschnitt Stille Push-Benachrichtigungen unten.
  • mutable-content: Wenn Sie diesen Schlüssel auf 1 , kann Ihre App die Benachrichtigung ändern, bevor sie angezeigt wird.
  • target-content-id: Dies ist die Kennung des vorgelegten Fensters.

Darüber hinaus können Sie beliebig viele benutzerdefinierte Daten hinzufügen, solange die Nutzlast 4.096 Byte nicht überschreitet.

Wenn Sie genug Spaß daran haben, diese Optionen auszuprobieren und Push-Benachrichtigungen an Ihren Simulator zu senden, fahren Sie mit dem nächsten Abschnitt fort!

Umgang mit Push-Benachrichtigungen

In diesem Abschnitt erfahren Sie, wie Sie Aktionen ausführen, wenn Ihre App Benachrichtigungen empfängt und wenn Benutzer darauf tippen.

Verstehen, was passiert, wenn Sie eine Push-Benachrichtigung erhalten

Wenn Ihre App eine Push-Benachrichtigung erhält, ruft iOS eine Methode in UIApplicationDelegate auf.

Sie müssen eine Benachrichtigung unterschiedlich behandeln, je nachdem, in welchem Status sich Ihre App befindet, wenn die Benachrichtigung empfangen wird:

  • Wenn Ihre App nicht ausgeführt wurde und der Benutzer sie durch Tippen auf die Push-Benachrichtigung startet, übergibt iOS die Benachrichtigung an Ihre App im launchOptions von application(_:didFinishLaunchingWithOptions:).
  • Wenn Ihre App entweder im Vordergrund oder im Hintergrund ausgeführt wurde, benachrichtigt das System Ihre App durch den Aufruf von application(_:didReceiveRemoteNotification:fetchCompletionHandler:). Wenn der Benutzer die App durch Tippen auf die Push-Benachrichtigung öffnet, ruft iOS diese Methode möglicherweise erneut auf, sodass Sie die Benutzeroberfläche aktualisieren und relevante Informationen anzeigen können.

Im ersten Fall erstellt WenderCast die Nachricht und öffnet sie direkt auf der Registerkarte Nachrichten. In Appdelegieren.swift, fügen Sie den folgenden Code an das Ende von application(_:didFinishLaunchingWithOptions:), kurz vor der return-Anweisung:

// Check if launched from notificationlet notificationOption = launchOptions?// 1if let notification = notificationOption as? , let aps = notification as? { // 2 NewsItem.makeNewsItem(aps) // 3 (window?.rootViewController as? UITabBarController)?.selectedIndex = 1}

Dies ist, was Sie tun:

  1. Überprüfen Sie, ob der Wert für UIApplication.LaunchOptionsKey.remoteNotification existiert in launchOptions. Wenn dies der Fall ist, wurde Ihre App über eine Benachrichtigung gestartet. Dies enthält die von Ihnen gesendete Push-Benachrichtigungsnutzlast.
  2. Da das aps Wörterbuch existiert, erstellen Sie damit ein NewsItem.
  3. Ändern Sie die ausgewählte Registerkarte des Tab-Controllers in den Bereich News.

Um dies zu testen, müssen Sie das Schema von WenderCast bearbeiten. Erstellen und ausführen Sie zuerst, um den neuesten Code auf dem Simulator zu installieren. Klicken Sie dann auf das Powercast-Schema und wählen Sie Schema bearbeiten…:

Bearbeiten Sie das Schema

Wählen Sie in der Seitenleiste Ausführen und dann auf der Registerkarte Info die Option Warten, bis die ausführbare Datei gestartet wird:

Wählen Sie Warten, bis die ausführbare Datei gestartet wird

Mit dieser Option wartet der Debugger darauf, dass die App nach der Installation zum ersten Mal gestartet wird, um sie anzuhängen.

Erstellen und ausführen. Sobald die Installation abgeschlossen ist, senden Sie wie zuvor weitere aktuelle Nachrichten mit xcrun simctl. Tippen Sie auf die Benachrichtigung, und die App wird für Nachrichten geöffnet:

App auf der Registerkarte News geöffnet

Um die Situation zu bewältigen, in der Ihre App ausgeführt wird, wenn eine Push-Benachrichtigung empfangen wird, fügen Sie Folgendes zu AppDelegate hinzu:

func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: , fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { guard let aps = userInfo as? else { completionHandler(.failed) return } NewsItem.makeNewsItem(aps)}

Dies versucht, die aps aus dem mitgelieferten userInfo -Objekt und erstellt bei Erfolg ein neues NewsItem daraus.

Da iOS diese Methode aufruft, wenn die App ausgeführt wird, müssen Sie das Schema wieder so ändern, dass die App automatisch gestartet wird, um sie zu testen. Wählen Sie im Schema-Editor unter Starten die Option Automatisch aus.

Erstellen und ausführen. Lassen Sie die App im Vordergrund und auf der Registerkarte Nachrichten laufen. Senden Sie eine weitere News-Push-Benachrichtigung und sehen Sie zu, wie sie im Feed angezeigt wird:

Zweite Push-Benachrichtigung auf der Registerkarte News

Das war’s! Ihre App kann jetzt auf magische Weise aktuelle Nachrichten empfangen. :]

Hinweis: Es kann nicht garantiert werden, dass Push-Benachrichtigungen eintreffen. Dies ist für WenderCast in Ordnung, da die vollständige Liste der Nachrichten für diese App nicht allzu wichtig ist. Im Allgemeinen sollten Sie Push-Benachrichtigungen jedoch nicht als einzige Möglichkeit zur Bereitstellung von Inhalten verwenden. Stattdessen sollten Push-Benachrichtigungen signalisieren, dass neue Inhalte verfügbar sind, und die App den Inhalt von der Quelle herunterladen lassen (z. B. von einer REST-API).

Arbeiten mit umsetzbaren Benachrichtigungen

Mit umsetzbaren Benachrichtigungen können Sie der Benachrichtigung selbst benutzerdefinierte Schaltflächen hinzufügen. Möglicherweise haben Sie dies bei E-Mail-Benachrichtigungen oder Tweets bemerkt, mit denen Sie sofort „antworten“ oder „Favorit“ können.

Ihre App kann mithilfe von Kategorien umsetzbare Benachrichtigungen definieren, wenn Sie sich für Benachrichtigungen registrieren. Jede Benachrichtigungskategorie kann einige voreingestellte benutzerdefinierte Aktionen enthalten.

Nach der Registrierung kann Ihr Server die Kategorie einer Push-Benachrichtigung festlegen. Die entsprechenden Aktionen stehen dem Benutzer nach Erhalt zur Verfügung.

Für WenderCast definieren Sie eine Nachrichtenkategorie mit einer benutzerdefinierten Aktion namens View. Mit dieser Aktion können Benutzer den Nachrichtenartikel in der App anzeigen, wenn sie möchten.

Fügen Sie in registerForPushNotifications() Folgendes direkt unter der Wache und über dem Aufruf von getNotificationSettings() ein:

// 1let viewAction = UNNotificationAction( identifier: Identifiers.viewAction, title: "View", options: )// 2let newsCategory = UNNotificationCategory( identifier: Identifiers.newsCategory, actions: , intentIdentifiers: , options: )// 3UNUserNotificationCenter.current().setNotificationCategories()

Gehen Sie dies Schritt für Schritt durch:

  1. Erstellen Sie eine neue Benachrichtigungsaktion mit der Titelansicht auf der Schaltfläche, die die App beim Auslösen im Vordergrund öffnet. Die Aktion hat eine eindeutige Kennung, die iOS verwendet, um zwischen anderen Aktionen in derselben Benachrichtigung zu unterscheiden.
  2. Definieren Sie die News-Kategorie, die die View-Aktion enthält. Dies hat auch eine eindeutige Kennung, die Ihre Nutzlast enthalten muss, um anzugeben, dass die Push-Benachrichtigung zu dieser Kategorie gehört.
  3. Registrieren Sie die neue umsetzbare Benachrichtigung, indem Sie setNotificationCategories aufrufen.

Erstellen Sie die App und führen Sie sie aus, um die neuen Benachrichtigungseinstellungen zu registrieren.

Starten Sie die App und senden Sie dann die folgende Nutzlast über das Dienstprogramm xcrun simctl:

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}

Wenn die Benachrichtigung angezeigt wird, ziehen Sie sie nach unten, um die Ansichtsaktion anzuzeigen:

Push-Benachrichtigung mit der angezeigten Ansichtsaktion

Schön! Durch Tippen auf View wird WenderCast gestartet, aber es macht noch nichts Aufregendes. Damit die Nachricht angezeigt wird, müssen Sie im Delegaten weitere Ereignisbehandlungen durchführen.

Umgang mit Benachrichtigungsaktionen

Wenn eine Benachrichtigungsaktion ausgelöst wird, UNUserNotificationCenter informiert seinen Delegaten. Zurück in AppDelegate.fügen Sie als Nächstes die folgende Klassenerweiterung am Ende der Datei hinzu:

// MARK: - UNUserNotificationCenterDelegateextension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter( _ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void ) { // 1 let userInfo = response.notification.request.content.userInfo // 2 if let aps = userInfo as? , let newsItem = NewsItem.makeNewsItem(aps) { (window?.rootViewController as? UITabBarController)?.selectedIndex = 1 // 3 if response.actionIdentifier == Identifiers.viewAction, let url = URL(string: newsItem.link) { let safari = SFSafariViewController(url: url) window?.rootViewController? .present(safari, animated: true, completion: nil) } } // 4 completionHandler() }}

Dies ist der Rückruf, den Sie erhalten, wenn die App aufgrund einer benutzerdefinierten Aktion geöffnet wird. Es mag so aussehen, als wäre viel los, aber hier gibt es nicht viel Neues:

  1. Holen Sie sich das userInfo Wörterbuch.
  2. Erstellen Sie ein NewsItem aus dem aps Wörterbuch und navigieren Sie zur Registerkarte News.
  3. Überprüfen Sie die actionIdentifier. Wenn es sich um die Aktion „Ansicht“ handelt und der Link eine gültige URL ist, wird der Link in einem SFSafariViewController .
  4. Rufen Sie den Completion-Handler auf, den das System an Sie übergibt.

Es gibt noch ein letztes Bit: Sie müssen den Delegaten auf UNUserNotificationCenter . Fügen Sie diese Zeile oben in application(_:didFinishLaunchingWithOptions:) hinzu:

UNUserNotificationCenter.current().delegate = self

Erstellen und ausführen. Schließen Sie die App erneut und senden Sie dann eine weitere Nachrichtenbenachrichtigung mit der folgenden Nutzlast:

{ "aps": { "alert": "New Posts!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}

Ziehen Sie die Benachrichtigung herunter und tippen Sie auf die Aktion anzeigen, und Sie werden sehen, dass WenderCast direkt nach dem Start einen Safari View Controller präsentiert:

URL des Benachrichtigungslinks, der in einer Safari-Ansicht geöffnet wurde

Herzlichen Glückwunsch, Sie haben eine umsetzbare Benachrichtigung implementiert! Senden Sie ein paar mehr und versuchen Sie, die Benachrichtigung auf verschiedene Arten zu öffnen, um zu sehen, wie sie sich verhält.

Senden an ein reales Gerät

Wenn Sie keine Push-Benachrichtigungen an ein reales Gerät senden möchten oder noch keine stillen Push-Benachrichtigungen benötigen, können Sie diesen Abschnitt überspringen und von hier aus zu Wohin gehen?

Wenn Sie jedoch ein Gefühl dafür bekommen möchten, wie Sie Push-Benachrichtigungen an ein echtes Gerät senden und Silent Push ausprobieren können, müssen Sie einige zusätzliche Einstellungen vornehmen. Laden Sie das Dienstprogramm PushNotifications herunter. Mit dieser Dienstprogramm-App können Sie Benachrichtigungen an ein echtes Gerät senden. Um es zu installieren, folgen Sie den Anweisungen unter Installation. Achten Sie besonders darauf, wie Sie die App öffnen, da Sie einige Einstellungen ändern müssen, um dieses Dienstprogramm auszuführen.

Gehen Sie zum Apple Developer Member Center und melden Sie sich an.

Zum Senden von Push-Benachrichtigungen ist ein Authentifizierungsschlüssel erforderlich. Wählen Sie im Mitgliedercenter Zertifikate, Bezeichner & Profile aus und suchen Sie im linken Bereich nach Schlüsseln. Rechts neben dem Titel der Tasten befindet sich eine Schaltfläche +. Klicken Sie darauf, um einen neuen Schlüssel zu erstellen.

Geben Sie dem Schlüssel einen Namen, z. B. Push Notification Key. Wählen Sie unter Wichtige Dienste die Option Apple Push Notifications Service (APNs) aus.

Beispiel Push-Benachrichtigungsschlüssel

Klicken Sie auf Weiter und registrieren Sie sich im nächsten Bildschirm, um Ihren neuen Schlüssel zu erstellen. Tippen Sie auf Herunterladen. Die heruntergeladene Datei hat einen Namen wie AuthKey_4SVKWF966R.p8. Behalten Sie diese Datei im Auge — Sie benötigen sie, um Ihre Benachrichtigungen zu senden! Der Teil 4SVKWF966R des Dateinamens ist die Schlüssel-ID. Du wirst das auch brauchen.

Das letzte Element, das Sie benötigen, ist Ihre Team-ID. Navigieren Sie zur Seite mit den Mitgliederdetails des Mitgliedercenters, um sie zu finden.

Du hast es geschafft! Mit Ihrem neuen Schlüssel können Sie jetzt Ihre erste Push-Benachrichtigung senden! Du brauchst nur noch eine Sache.

Führen Sie die App auf Ihrem realen Gerät aus, kopieren Sie das Geräte-Token von der Debugger-Konsole und halten Sie es bereit.Starten Sie PushNotifications und führen Sie die folgenden Schritte aus:

  1. Wählen Sie unter Authentifizierung Token aus.
  2. Klicken Sie auf die Schaltfläche Select P8 und wählen Sie die .p8-Datei aus dem vorherigen Abschnitt.
  3. Geben Sie Ihre Key-ID und Team-ID in die entsprechenden Felder ein.
  4. Geben Sie unter Body die Bundle-ID Ihrer App und Ihr Gerätetoken ein.
  5. Ändern Sie den Anforderungstext folgendermaßen:
{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

Klicken Sie in PushNotifications auf die Schaltfläche Senden.

Push notifications Tester

Sie sollten Ihre Push-Benachrichtigung erhalten:

Ihre erste Push-Benachrichtigung

Fehlerbehebung bei häufigen Problemen

Hier sind ein paar Probleme, die auftreten können:

  • Einige Benachrichtigungen kommen an, aber nicht alle: Wenn Sie viele Push-Benachrichtigungen benachrichtigungen gleichzeitig, aber Sie erhalten nur wenige, keine Angst! Das ist durch Design. APNs verwaltet für jedes Gerät eine QoS-Warteschlange (Quality of Service). Die Größe dieser Warteschlange beträgt 1. Wenn Sie also mehrere Benachrichtigungen senden, wird die letzte Benachrichtigung überschrieben.
  • Problem beim Verbinden mit dem Push-Benachrichtigungsdienst: Eine Möglichkeit könnte sein, dass eine Firewall die von APNs verwendeten Ports blockiert. Stellen Sie sicher, dass Sie diese Ports entsperren.

Verwenden von stillen Push-Benachrichtigungen

Stille Push-Benachrichtigungen können Ihre App leise aufwecken, um einige Aufgaben im Hintergrund auszuführen. WenderCast kann diese Funktion verwenden, um die Podcast-Liste leise zu aktualisieren.

Mit einer richtigen Serverkomponente kann dies sehr effizient sein. Ihre App muss nicht ständig nach Daten abfragen. Sie können ihm eine stille Push-Benachrichtigung senden, wenn neue Daten verfügbar sind.

Um zu beginnen, wählen Sie das WenderCast-Ziel erneut aus. Klicken Sie nun auf die Registerkarte Signing & Capabilities und fügen Sie die Funktion Background Modes hinzu. Aktivieren Sie dann die Option Remote-Benachrichtigungen:

Überprüfen Sie die Remote-Benachrichtigungen Option für Hintergrundmodi Berechtigung

Jetzt wird Ihre App im Hintergrund aufwachen, wenn es eine dieser Push-Benachrichtigungen empfängt.

In Appdelegieren.finden Sie schnell application(_:didReceiveRemoteNotification:fetchCompletionHandler:) . Ersetzen Sie den Aufruf von NewsItem.makeNewsItem() durch Folgendes:

// 1if aps as? Int == 1 { let podcastStore = PodcastStore.sharedStore // 2 podcastStore.refreshItems { didLoadNewItems in // 3 completionHandler(didLoadNewItems ? .newData : .noData) }} else { // 4 NewsItem.makeNewsItem(aps) completionHandler(.newData)}

Gehen Sie den Code durch:

  1. Sie prüfen, ob content-available auf 1 gesetzt ist. Wenn ja, handelt es sich um eine stille Benachrichtigung.
  2. Sie aktualisieren die Podcast-Liste, bei der es sich um einen asynchronen Netzwerkaufruf handelt.
  3. Wenn die Aktualisierung abgeschlossen ist, rufen Sie den Completion-Handler auf, um dem System mitzuteilen, ob die App neue Daten geladen hat.
  4. Wenn es sich nicht um eine stille Benachrichtigung handelt, handelt es sich um eine Nachricht.

Stellen Sie sicher, dass Sie den Completion-Handler mit dem ehrlichen Ergebnis aufrufen. Das System misst den Batterieverbrauch und die Zeit, die Ihre App im Hintergrund verwendet, und kann Ihre App bei Bedarf drosseln.

Das ist alles. Um es zu testen, zu erstellen und auszuführen, starten Sie die App neu und pushen Sie die folgende Nutzlast über das Dienstprogramm PushNotifications:

{ "aps": { "content-available": 1 }}

Wenn alles gut geht, sollte nichts passieren, es sei denn, ein neuer Podcast wurde gerade zur entfernten Datenbank hinzugefügt. Um zu bestätigen, dass der Code wie erwartet ausgeführt wurde, setzen Sie einen Haltepunkt in application(_:didReceiveRemoteNotification:fetchCompletionHandler:) und durchlaufen Sie ihn, nachdem die Benachrichtigung gesendet wurde.

Wohin von hier aus?

Herzlichen Glückwunsch! Sie haben dieses Tutorial abgeschlossen und WenderCast zu einer voll funktionsfähigen App mit Push-Benachrichtigungen gemacht!

Sie können das abgeschlossene Projekt über die Schaltfläche Materialien herunterladen oben oder unten in diesem Lernprogramm herunterladen.

Möchten Sie tiefer in alles eintauchen, was Sie mit Push-Benachrichtigungen tun können, z. B. das Erstellen benutzerdefinierter Benutzeroberflächen und das Senden kritischer Warnungen? In unserem Buch Push Notifications by Tutorials lernen Sie die erweiterten Funktionen von Push Notifications kennen.Eine weitere Ressource ist das Push Notifications Tutorial für iOS: Rich Push Notifications Tutorial.Obwohl Push-Benachrichtigungen ein wichtiger Bestandteil moderner Apps sind, ist es auch sehr üblich, dass Benutzer Berechtigungen für Ihre App ablehnen, wenn Sie die Benachrichtigungen übertreiben. Mit durchdachtem Design können Push-Benachrichtigungen jedoch dazu führen, dass Ihre Benutzer immer wieder zu Ihrer App zurückkehren!

Nette Katze Benachrichtigungsglocke

Diese Katze erhielt eine Push-Benachrichtigung, dass sein Abendessen fertig war!

Ich hoffe, Ihnen hat dieses Tutorial für Push-Benachrichtigungen gefallen. Wenn Sie Fragen haben, können Sie diese gerne im unten stehenden Diskussionsforum hinterlassen.

raywenderlich.com Wöchentlich

Die raywenderlich.com newsletter ist der einfachste Weg, um über alles auf dem Laufenden zu bleiben, was Sie als mobiler Entwickler wissen müssen.

Holen Sie sich einen wöchentlichen Überblick über unsere Tutorials und Kurse und erhalten Sie als Bonus einen kostenlosen ausführlichen E-Mail-Kurs!

Durchschnittliche Bewertung

4.9/5

Fügen Sie eine Bewertung für diesen Inhalt hinzu

Melden Sie sich an, um eine Bewertung hinzuzufügen

17 Bewertungen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.