iOS-Apps Push-Benachrichtigungen hinzufügen

1. Einführung

Zuletzt aktualisiert:6. Januar 2020

Firebase Cloud Messaging (FCM) ist eine plattformübergreifende Messaging-Lösung, mit der Sie zuverlässig und kostenlos Nachrichten senden können.

Mit FCM können Sie eine Client-App benachrichtigen, dass neue E-Mails oder andere Daten zur Synchronisierung verfügbar sind. Sie können Benachrichtigungen senden, um die erneute Interaktion und Bindung von Nutzern zu fördern. Für Anwendungsfälle wie Instant Messaging kann eine Nachricht eine Nutzlast von bis zu 4 KB an eine Client-App übertragen.

Wie funktioniert das?

Eine FCM-Implementierung umfasst zwei Hauptkomponenten zum Senden und Empfangen:

  1. Eine vertrauenswürdige Umgebung wie Cloud Functions for Firebase oder ein Anwendungsserver, auf dem Nachrichten erstellt, ausgerichtet und gesendet werden können.
  2. Eine iOS-, Android- oder Web-Clientanwendung (JavaScript), die Nachrichten über den entsprechenden plattformspezifischen Transportdienst empfängt.

Architekturübersicht FCM

6636933bbe959ef2.png

FCM basiert auf den folgenden Komponenten, die Nachrichten erstellen, transportieren und empfangen:

  1. Tools zum Schreiben oder Erstellen von Nachrichtenanfragen. Notifications Composer bietet eine GUI-basierte Option zum Erstellen von Benachrichtigungsanfragen. Für eine vollständige Automatisierung und Unterstützung für alle Nachrichtentypen müssen Sie Nachrichtenanfragen in einer vertrauenswürdigen Serverumgebung erstellen, die das Firebase Admin SDK oder die FCM-Serverprotokolle unterstützt. Diese Umgebung kann Cloud Functions for Firebase, Google App Engine oder Ihr eigener Anwendungsserver sein.
  2. Das FCM-Back-End, das (unter anderem) Nachrichtenanfragen akzeptiert, ein Fanout von Nachrichten über Themen durchführt und Nachrichtenmetadaten wie die Nachrichten-ID generiert.
  3. Eine Transportschicht auf Plattformebene, die die Nachricht an das Zielgerät weiterleitet, die Nachrichtenzustellung verarbeitet und gegebenenfalls eine plattformspezifische Konfiguration anwendet. Diese Transportschicht umfasst:
  • Android Transport Layer (ATL) für Android-Geräte mit Google Play-Diensten
  • Apple Push Notification Service (APNs) für iOS-Geräte
  • Web-Push-Protokoll für Web-Apps
  1. Das FCM SDK auf dem Gerät des Nutzers, auf dem die Benachrichtigung angezeigt oder die Nachricht entsprechend dem Vorder-/Hintergrundstatus der App und der relevanten App-Logik verarbeitet wird.

Inhalt

In diesem Codelab fügen Sie einer iOS-Beispiel-App mit FCM Push-Benachrichtigungen hinzu.

Aufgaben in diesem Lab

  • Einen Nutzer für Push-Nachrichten abonnieren und abmelden
  • Umgang mit eingehenden Push-Nachrichten
  • Benachrichtigungen anzeigen
  • Auf Benachrichtigungsklicks reagieren

Voraussetzungen

  • Xcode 11.0 oder höher
  • CocoaPods 1.9.0 oder höher
  • Apple-Entwicklerkonto
  • Ein physisches iOS-Gerät zum Ausführen der App
  • Grundkenntnisse in Swift

2. Einrichtung

Beispielcode herunterladen

In diesem Codelab erstellen Sie Ihre eigene Test-App. Wenn Sie sich die vorhandene Beispiel-App ansehen und sie ausführen möchten, können Sie den Schnellstart-Beispielcode herunterladen.

Es gibt zwei Möglichkeiten, das Beispiel abzurufen:

  • Klonen Sie das Git-Repository:
$ git clone https://github.com/firebase/quickstart-ios.git
  • Laden Sie die ZIP-Datei herunter:

Wenn Sie die Quelle als ZIP-Datei herunterladen, erhalten Sie beim Entpacken den Stammordner quickstart-ios.

Neue App erstellen

Erstellen Sie mithilfe der folgenden Schritte Ihre eigene Test-App (die folgenden Schritte sind in XCode 12.3 enthalten):

  1. Öffnen Sie XCode und wählen Sie Create a new Xcode project (Neues Xcode-Projekt erstellen) aus.
  2. Wählen Sie App aus und klicken Sie auf Weiter.

e56c631b086c6d8.png

  1. Geben Sie einen Produktnamen ein (z. B. MessagingExample)
  2. Wählen Sie Team aus. Wenn Sie noch kein Team erstellt haben, konfigurieren Sie es im Apple-Entwicklerkonto.
  3. Geben Sie eine Organisations-ID ein (z. B. com.your-name)
  4. Geben Sie eine Bundle-ID ein (z. B. com.your-name.MessagingExample sollte sie unter allen iOS-Apps eindeutig sein.
  5. Wähle im Drop-down-Menü Schnittstelle die Option Storyboard aus.
  6. Wählen Sie im Drop-down-Menü Lebenszyklus die Option UIKit App Delegate aus.
  7. Wählen Sie unter Sprache die Option Swift aus.
  8. Klicken Sie auf Weiter.

fb860c0fa4a02818.png

Sie benötigen die Bundle-ID, wenn Sie einen APN-Schlüssel erstellen und Ihre App in Ihrem Firebase-Projekt registrieren.

3. APNs konfigurieren

Authentifizierungsschlüssel erstellen

In diesem Abschnitt wird beschrieben, wie Sie einen Authentifizierungsschlüssel für eine App-ID generieren, die für Push-Benachrichtigungen aktiviert ist. Wenn Sie bereits einen Schlüssel haben, können Sie diesen verwenden, anstatt einen neuen zu generieren.

So erstellen Sie einen Authentifizierungsschlüssel:

  1. Gehen Sie in Ihrem Entwicklerkonto zu Zertifikate, IDs und Profile und gehen Sie zu Keys.

19ae87d0f00402b1.png

  1. Klicken Sie rechts oben auf die Schaltfläche Hinzufügen (+).

c4acd10dbc4f721f.png

  1. Geben Sie eine Beschreibung für den APNs-Authentifizierungsschlüssel ein
  2. Klicken Sie unter „Key Services“ (Schlüsseldienste) das Kästchen „APNs“ an und dann auf Weiter.

6a3e8ff7457a8251.png

  1. Klicken Sie auf Registrieren und dann auf Herunterladen. Bewahren Sie Ihren Schlüssel an einem sicheren Ort auf. Dies ist ein einmaliger Download und der Schlüssel kann später nicht mehr abgerufen werden.

42c205e072fbd622.png

App-ID erstellen

Die App-ID ist eine Kennung, die eine App eindeutig identifiziert. Konventionsgemäß wird sie durch eine umgekehrte Domain dargestellt.

  1. Gehen Sie zum Apple Developer Member Center und melden Sie sich an.
  2. Gehen Sie zu Zertifikate, Kennungen und Profile.
  3. Gehen Sie zu Identifiers (Kennungen).
  4. Klicken Sie auf die Schaltfläche +, um eine neue App-ID zu erstellen. e04fc394c52a866f.png
  5. Wählen Sie das Optionsfeld App-IDs aus und klicken Sie auf Weiter.

d454fd5df3b8d93d.png

  1. Wählen Sie App aus und klicken Sie auf Weiter.

3bd2e836be5e0291.png

  1. So erstellen Sie die neue App-ID:
  2. Geben Sie einen Namen für die App-ID ein.
  3. Geben Sie eine Team-ID ein. Dieser Wert muss mit der Team-ID auf dem Tab „Mitgliedschaft“ übereinstimmen.
  4. Wählen Sie im Abschnitt App-ID-Suffix die Option Explizite App-ID aus und geben Sie dann Ihre Bundle-ID ein. 7363c4d1962b486d.png
  5. Achten Sie darauf, dass im Abschnitt App Services (App-Dienste) die Option Push-Benachrichtigungen aktiviert ist. 552ea08703f7e323.png
  6. Klicken Sie auf Weiter und prüfen Sie, ob Ihre Eingabe korrekt ist:
  7. Der Wert für Identifier sollte mit der Verkettung der Werte der Team-ID und der Bundle-ID übereinstimmen.
  8. Push-Benachrichtigungen sollten konfigurierbar sein.
  9. Klicken Sie auf Registrieren, um die App-ID zu erstellen.

Profil erstellen

Wenn du deine App während der Entwicklung testen möchtest, benötigst du ein Entwicklungsprofil, um deine Geräte für die Ausführung einer App zu autorisieren, die noch nicht im App Store veröffentlicht ist.

  1. Gehen Sie zum Apple Developer Member Center und melden Sie sich an.
  2. Gehen Sie zu Zertifikate, Kennungen und Profile.
  3. Wählen Sie im Drop-down-Menü oben links iOS, tvOS, watchOS aus, falls noch nicht ausgewählt, und gehen Sie zu Profile.
  4. Klicken Sie auf die Schaltfläche +, um ein neues Profil zu erstellen. 1fa2342cfe45a925.png
  5. Wählen Sie als Typ des Bereitstellungsprofils iOS-App-Entwicklung aus und klicken Sie auf Weiter.

507434a466220dfe.png

  1. Wählen Sie im Drop-down-Menü die App-ID aus, die Sie verwenden möchten, und klicken Sie auf Weiter.
  2. Wählen Sie das iOS-Entwicklungszertifikat der App-ID aus, die Sie im vorherigen Schritt ausgewählt haben, und klicken Sie auf Weiter.
  3. Wählen Sie die iOS-Geräte aus, die Sie in das Bereitstellungsprofil aufnehmen möchten, und klicken Sie dann auf Weiter. Wählen Sie alle Geräte aus, die Sie für den Test verwenden möchten.
  4. Geben Sie einen Namen für dieses Bereitstellungsprofil ein (z.B. MessagingExampleProfile) und klicken Sie dann auf Generate (Generieren).

4395f04647afa997.png

  1. Klicken Sie auf Herunterladen, um das Bereitstellungsprofil auf Ihrem Mac zu speichern.

106761fa786ba580.png

  1. Doppelklicken Sie auf die Datei für das Nutzerverwaltungsprofil, um sie zu installieren.

4. Firebase zu Ihrem iOS-Projekt hinzufügen

Firebase-Projekt erstellen

Bevor Sie Firebase zu Ihrer iOS-App hinzufügen können, müssen Sie ein Firebase-Projekt erstellen, um eine Verbindung zu Ihrer iOS-App herzustellen. Weitere Informationen zu Firebase-Projekten finden Sie unter Firebase-Projekte verstehen.

  1. Klicken Sie in der Firebase Console auf Projekt hinzufügen und wählen Sie dann einen Projektnamen aus oder geben Sie ihn ein. e462afd91c149238.png

Wenn Sie bereits ein GCP-Projekt (Google Cloud Platform) haben, können Sie das Projekt aus dem Drop-down-Menü auswählen, um ihm Firebase-Ressourcen hinzuzufügen.

  1. Optional: Wenn Sie ein neues Projekt erstellen, können Sie die Projekt-ID bearbeiten.

Firebase weist Ihrem Firebase-Projekt automatisch eine eindeutige ID zu. Unter „Informationen zu Firebase-Projekten“ erfahren Sie, wie Firebase die Projekt-ID verwendet.

  1. Klicken Sie auf Weiter.
  2. Richten Sie Google Analytics für Ihr Projekt ein, um die folgenden Firebase-Produkte optimal zu nutzen:
  • Firebase Crashlytics
  • Firebase Predictions
  • Firebase Cloud Messaging
  • Firebase In-App-Messaging
  • Firebase Remote Config
  • Firebase A/B Testing

Wenn Sie dazu aufgefordert werden, wählen Sie aus, ob Sie ein vorhandenes Google Analytics-Konto verwenden oder ein neues Konto erstellen möchten. Wenn Sie ein neues Konto erstellen möchten, wählen Sie den Speicherort für Analytics-Berichte aus und akzeptieren Sie dann die Einstellungen für die Datenfreigabe und die Google Analytics-Nutzungsbedingungen für Ihr Projekt.

1282a798556779ab.png

48ade68c8de27d2.png

  1. Klicken Sie auf Projekt erstellen. Falls Sie ein vorhandenes GCP-Projekt verwenden, klicken Sie auf Firebase hinzufügen.

Firebase stellt automatisch Ressourcen für Ihr Firebase-Projekt bereit. Nach Abschluss des Vorgangs werden Sie zur Übersichtsseite Ihres Firebase-Projekts in der Firebase Console weitergeleitet.

App bei Firebase registrieren

Nachdem Sie ein Firebase-Projekt erstellt haben, können Sie ihm Ihre iOS-App hinzufügen.

Unter Informationen zu Firebase-Projekten finden Sie weitere Informationen zu Best Practices und Überlegungen zum Hinzufügen von Apps zu einem Firebase-Projekt sowie zum Umgang mit mehreren Build-Varianten.

  1. Öffnen Sie die Firebase Console.
  2. Klicken Sie in der Mitte der Projektübersichtsseite auf das iOS-Symbol, um den Einrichtungsworkflow zu starten.

Wenn Sie Ihrem Firebase-Projekt bereits eine App hinzugefügt haben, klicken Sie auf App hinzufügen, um die Plattformoptionen aufzurufen.

93462beb642e8987.png

  1. Geben Sie die Bundle-ID Ihrer App in das Feld iOS-Bundle-ID ein.
  2. Optional: Geben Sie weitere App-Informationen ein: App-Alias und App Store-ID.
  3. Klicken Sie auf App registrieren.

2e7a00b0008344c1.png

Firebase-Konfigurationsdatei hinzufügen

  1. Klicken Sie auf GoogleService-Info.plist herunterladen, um die Firebase iOS-Konfigurationsdatei (GoogleService-Info.plist) herunterzuladen. 69004caf7d448989.png
  2. Verschieben Sie Ihre Konfigurationsdatei in das Stammverzeichnis Ihres Xcode-Projekts. Wenn Sie dazu aufgefordert werden, wählen Sie aus, dass die Konfigurationsdatei allen Zielen hinzugefügt werden soll.

7c5e0a46d07fa9c7.png

Wenn Sie in Ihrem Projekt mehrere Bundle-IDs haben, müssen Sie jede Bundle-ID in der Firebase Console einer registrierten App zuordnen, damit jede App eine eigene GoogleService-Info.plist-Datei haben kann.

Schließen Sie XCode.

Ihrer App Firebase SDKs hinzufügen

Wir empfehlen, die Firebase-Bibliotheken mit CocoaPods zu installieren. Wenn Sie CocoaPods jedoch nicht verwenden möchten, können Sie die SDK-Frameworks direkt einbinden oder die Betaversion von Swift Package Manager verwenden.

  1. Erstellen Sie eine Podfile-Datei, falls Sie noch keine haben. Wenn Sie das Schnellstart-Beispiel verwenden, sind das Xcode-Projekt und die Podfile (mit Pods) bereits vorhanden.
$ cd MessagingExample
$ pod init
  1. Fügen Sie der Podfile-Datei die Firebase-Pods hinzu, die Sie in Ihrer Anwendung verwenden möchten.

Sie können Ihrer iOS-App jedes der unterstützten Firebase-Produkte hinzufügen.

Im Schnellstart-Beispiel wurden die SDKs für Google Analytics und Firebase Cloud Messaging hinzugefügt.

# Add the Firebase pod for Google Analytics
pod 'Firebase/Analytics'

# Add the pod for Firebase Cloud Messaging
pod 'Firebase/Messaging'
  1. Installieren Sie die Pods und öffnen Sie dann die Datei .xcworkspace, um das Projekt in Xcode anzusehen:
$ pod install
  1. Öffnen Sie MessagingExample.xcworkspace und klicken Sie in der Firebase Console auf Weiter. 6d1f8230d16693e6.png

Firebase in Ihrer App initialisieren

Sie müssen Ihrer Anwendung Firebase-Initialisierungscode hinzufügen.

Importieren Sie das Firebase-Modul und konfigurieren Sie eine freigegebene Instanz. Im Schnellstart-Beispiel wurde das Firebase-Modul bereits importiert.

  1. Importieren Sie das Firebase-Modul in Ihr UIApplicationDelegate:

AppDelegate.swift

import UIKit
import Firebase // Add this line
  1. Konfigurieren Sie eine freigegebene FirebaseApp-Instanz, in der Regel in der application:didFinishLaunchingWithOptions:-Methode Ihrer App:

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  FirebaseApp.configure() // Add this line
  return true
}
  1. Klicken Sie in der Firebase Console auf Weiter. f9d37423d346ff0.png
  2. Ihrer App werden Firebase SDKs hinzugefügt. Klicken Sie auf Weiter zur Konsole. d1b1309cd3790f66.png

5. FCM-Client konfigurieren

APNs-Authentifizierungsschlüssel hochladen

Laden Sie Ihren APNs-Authentifizierungsschlüssel in Firebase hoch.

  1. Klicken Sie in Ihrem Projekt in der Firebase Console auf das Zahnradsymbol, wählen Sie Projekteinstellungen und dann den Tab Cloud Messaging aus. ba8b5f95241327fe.png
  2. Klicken Sie im Abschnitt APNs-Authentifizierungsschlüssel unter iOS-App-Konfiguration auf die Schaltfläche Hochladen. 357ddc0d4b182492.png
  3. Gehen Sie zum Speicherort Ihres Schlüssels, wählen Sie ihn aus und klicken Sie auf Öffnen. Fügen Sie die Schlüssel-ID für den Schlüssel hinzu. Sie finden sie im Apple Developer Member Center unter Certificates, Identifiers &Profiles (Zertifikate, Kennungen und Profile) und klicken Sie auf Hochladen. 3dae27f2327daf9e.png

Für Remote-Benachrichtigungen registrieren

Registrieren Sie Ihre App entweder beim Start oder an der gewünschten Stelle im Anwendungsablauf für Remote-Benachrichtigungen.

Im Schnellstart-Beispiel wurde registerForRemoteNotifications bereits hinzugefügt.

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  FirebaseApp.configure()
  // [START register for remote notifications]
  if #available(iOS 10.0, *) {
    // For iOS 10 display notification (sent via APNS)
    UNUserNotificationCenter.current().delegate = self
        
    let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
    UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: {_, _ in })
  } else {
    let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
    application.registerUserNotificationSettings(settings)
  }

  application.registerForRemoteNotifications()
  // [END register for remote notifications]
  return true
}

Weisen Sie die Delegat-Property von UNUserNotificationCenter zu, indem Sie diese Zeilen am Ende von AppDelegate.swift hinzufügen.

AppDelegate.swift

@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {

  // Receive displayed notifications for iOS 10 devices.
  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              willPresent notification: UNNotification,
    withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    let userInfo = notification.request.content.userInfo

    // Print full message.
    print(userInfo)

    // Change this to your preferred presentation option
    completionHandler([[.alert, .sound]])
  }

  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              didReceive response: UNNotificationResponse,
                              withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo

    // Print full message.
    print(userInfo)

    completionHandler()
  }
}

Nachrichtendelegierter festlegen

Um Registrierungstokens zu erhalten, implementiere das Messaging-Delegat-Protokoll und lege das delegate-Attribut von FIRMessaging fest, nachdem du [FIRApp configure] aufgerufen hast. Wenn Ihr Anwendungsdelegat beispielsweise dem Messaging-Delegate-Protokoll entspricht, können Sie den Delegat in application:didFinishLaunchingWithOptions: auf sich selbst setzen (im Schnellstart-Beispiel ist er bereits festgelegt).

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  FirebaseApp.configure()
  Messaging.messaging().delegate = self // Add this line
  // [START register for remote notifications]
  if #available(iOS 10.0, *) {
    // For iOS 10 display notification (sent via APNS)
    UNUserNotificationCenter.current().delegate = self
        
    let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
    UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: {_, _ in })
  } else {
    let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
    application.registerUserNotificationSettings(settings)
  }

  application.registerForRemoteNotifications()
  // [END register for remote notifications]
  return true
}

Weisen Sie die Delegat-Property von FIRMessaging zu, indem Sie diese Zeilen am Ende von AppDelegate.swift hinzufügen.

AppDelegate.swift

extension AppDelegate : MessagingDelegate {
  func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
    print("Firebase registration token: \(String(describing: fcmToken))")
    
    let dataDict:[String: String] = ["token": fcmToken ?? ""]
    NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
  }
}

Funktionen hinzufügen

Sie haben die Funktion für Push-Benachrichtigungen im Abschnitt zum Erstellen einer App-ID hinzugefügt, müssen sie aber auch zu XCode hinzufügen. Gehen Sie dazu folgendermaßen vor (die folgenden Schritte sind in XCode 12.3 enthalten):

  1. Klicken Sie im Navigatorbereich auf den Projektnamen.
  2. Klicken Sie auf Signieren und Funktionen.
  3. Klicken Sie auf + Funktion.

eaf41aefb3bf2c9e.png

  1. Doppelklicken Sie auf Hintergrundmodi.
  2. Klicken Sie noch einmal auf + Funktion.
  3. Klicke doppelt auf Push-Benachrichtigungen.
  4. Klicke in den Abschnitten Hintergrundmodi das Kästchen Remote-Benachrichtigungen an.

e5d0fc08651e04a9.png

6. Benachrichtigung senden

So senden Sie eine Testnachricht:

  1. Installieren Sie die App auf dem Zielgerät und führen Sie sie aus. Du musst die Berechtigungsanfrage für den Empfang von Remote-Benachrichtigungen akzeptieren.
  2. Rufen Sie das Registrierungstoken aus dem XCode-Log ab.

a2e49a92f9807d34.png

  1. Achte darauf, dass die App auf dem Gerät im Hintergrund ausgeführt wird.
  2. Öffnen Sie Mitteilungen und wählen Sie Neue Benachrichtigung aus.
  3. Geben Sie den Nachrichtentext ein. f485d7fbd2456ae0.png
  4. Wählen Sie Testnachricht senden aus.
  5. Geben Sie in das Feld FCM-Registrierungstoken hinzufügen das Registrierungstoken ein, das Sie in Schritt 2 erhalten haben.
  6. Klicken Sie auf Testen.

Nachdem Sie auf Testen geklickt haben, sollte die Benachrichtigung im Benachrichtigungscenter auf dem Zielclientgerät (mit der App im Hintergrund) eingehen.

Informationen zur Zustellung von Nachrichten an Ihre App finden Sie im FCM-Berichts-Dashboard. Dort wird die Anzahl der Nachrichten aufgezeichnet, die auf iOS- und Android-Geräten gesendet und geöffnet wurden.

6570eea7b5228513.png

7. Glückwunsch

Die Testnachricht wurde erfolgreich gesendet.

In FCM gibt es viele weitere Funktionen und Konfigurationen, z. B. Themenabos.

Weitere Informationen finden Sie im offiziellen Entwicklerdokument.

Was liegt als Nächstes an?

Sehen Sie sich einige dieser Codelabs an.

Weitere Informationen