Erste Schritte mit Firebase Cloud Messaging in Apps für Apple-Plattformen

Plattform auswählen: iOS+ Android Web Flutter Unity C++


In diesem Leitfaden wird beschrieben, wie Sie Firebase Cloud Messaging in Ihren Client-Apps für Apple-Plattformen (z. B. iOS) einrichten, damit Sie Nachrichten zuverlässig senden können.

Bei Apple-Client-Apps können Sie Benachrichtigungs- und Daten-Payloads mit einer Größe von bis zu 4.096 Byte über die Firebase Cloud Messaging-APNs-Schnittstelle empfangen.

Wenn Sie Ihren Clientcode in Objective-C oder Swift schreiben möchten, empfehlen wir die Verwendung der FIRMessaging-API. Das Kurzanleitungsbeispiel enthält Beispielcode für beide Sprachen.

Bevor Sie beginnen, fügen Sie Ihrem Apple-Projekt Firebase hinzu.

Method Swizzling in Firebase Cloud Messaging

Das FCM SDK führt das Method Swizzling in zwei wichtigen Bereichen aus: Zuordnung Ihres APNs-Tokens zur Firebase-Installations-ID oder zum FCM-Registrierungstoken und Erfassung von Analysedaten während der Callback-Verarbeitung von Downstream-Nachrichten. Entwickler, die kein Swizzling verwenden möchten, können es deaktivieren, indem sie das Flag FirebaseAppDelegateProxyEnabled in der Info.plist-Datei der App hinzufügen und auf den booleschen Wert NO setzen. In den relevanten Bereichen der Anleitungen finden Sie Codebeispiele mit und ohne aktiviertes Method Swizzling.

APNs-Authentifizierungsschlüssel hochladen

Laden Sie Ihren APNs-Authentifizierungsschlüssel in Firebase hoch. Wenn Sie noch keinen APNs-Authentifizierungsschlüssel haben, erstellen Sie einen im Apple Developer Member Center.

  1. Rufen Sie in der Firebase-Konsole Einstellungen > Allgemein auf. Klicken Sie dann auf den Tab Cloud Messaging.
  2. Klicken Sie unter Konfiguration der iOS-App bei APNs-Authentifizierungsschlüssel auf Hochladen, um Ihren Entwicklungs- oder Produktions-Authentifizierungsschlüssel oder beide hochzuladen. Mindestens eine Angabe ist erforderlich.
  3. Suchen Sie nach dem Speicherort des 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 (verfügbar im Apple Developer Member Center) und klicken Sie auf Hochladen.

Für Remote-Benachrichtigungen registrieren

Registrieren Sie Ihre App entweder beim Start oder an der gewünschten Stelle im Anwendungsablauf für Remote-Benachrichtigungen. Rufen Sie registerForRemoteNotifications wie folgt auf:

Swift

UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
  options: authOptions,
  completionHandler: { _, _ in }
)

application.registerForRemoteNotifications()

Objective-C

[UNUserNotificationCenter currentNotificationCenter].delegate = self;
UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
    UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
[[UNUserNotificationCenter currentNotificationCenter]
    requestAuthorizationWithOptions:authOptions
    completionHandler:^(BOOL granted, NSError * _Nullable error) {
      // ...
    }];

[application registerForRemoteNotifications];

Auf die Firebase-Installations-ID zugreifen

Standardmäßig registriert das FCM SDK die App-Instanz bei FCM und gibt beim Start der App eine Firebase-Installations-ID (FID) für die Client-App-Instanz zurück. Ähnlich wie beim APNs-Gerätetoken können Sie mit dieser FID gezielte Benachrichtigungen an eine bestimmte Instanz Ihrer App senden.

So wie Apple-Plattformen in der Regel beim Starten einer App ein APNs-Gerätetoken bereitstellen, stellt FCM eine FID für das Targeting von Benachrichtigungen bereit. Das FCM SDK liefert die FID über die Methode FIRMessagingDelegate messaging:didReceiveRegistration:. Es überwacht automatisch auf FID-Änderungen und ruft die Methode mit einer neuen FID auf, wenn eine Änderung erkannt wird. Wir empfehlen, die FID regelmäßig abzurufen und hochzuladen, da sie sich nach dem ersten Start ändern kann.

Weitere Informationen dazu, wann FIDs neu ausgestellt werden und wie Sie sie manuell überwachen können, finden Sie unter Lebenszyklus der Firebase-Installations-ID überwachen.

Registrierung über die Firebase-Installations-ID aktivieren

Wenn Sie die Registrierung Ihrer App-Instanz bei FCM über die Firebase-Installations-ID (FID) aktivieren möchten, fügen Sie Ihrer Info.plist-Datei das folgende Metadaten-Flag hinzu, nicht Ihrer GoogleService-Info.plist-Datei:

FirebaseMessagingInstallationIdEnabled = YES

Bevollmächtigten für Nachrichten festlegen

Wenn Sie FIDs empfangen möchten, implementieren Sie das Messaging-Delegatenprotokoll und legen Sie die delegate-Eigenschaft von FIRMessaging nach dem Aufrufen von [FIRApp configure] fest. Wenn Ihr Anwendungs-Delegate beispielsweise dem Messaging-Delegate-Protokoll entspricht, können Sie das Delegate für application:didFinishLaunchingWithOptions: auf sich selbst festlegen.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

didReceiveRegistration-Methode implementieren

App-Instanzen werden nach Abschluss der Registrierung über die FID angesprochen. Implementieren Sie die Methode messaging:didReceiveRegistration:, um die FID bei der Registrierung zu erhalten. Diese Methode wird in der Regel einmal pro App-Start mit der FID aufgerufen. Wenn diese Methode aufgerufen wird, können Sie die folgenden Aktionen ausführen:

  • Wenn Sie die Geräte-ID noch nicht oder erst vor Kurzem an Ihren Server gesendet haben, senden Sie sie an Ihren Anwendungsserver.
  • Wenn das Abo neu ist oder der Nutzer die App neu installiert hat, abonnieren Sie die FID für Themen.

Swift

func messaging(_ messaging: Messaging, didReceiveRegistration installationId: String?) {
  print("Firebase Installation ID: \(String(describing: installationId))")
  // Note: This callback is fired at each app startup.

  if let installationId = installationId {
    // Send the Firebase Installation ID to your app server.
    sendRegistrationToServer(installationId)
  }
}
    

Objective-C

- (void)messaging:(FIRMessaging *)messaging didReceiveRegistration:(nullable NSString *)installationId {
  NSLog(@"Firebase Installation ID: %@", installationId);
  // Note: This callback is fired at each app startup.

  if (installationId != nil) {
    // Send the Firebase Installation ID to your app server.
    [self sendRegistrationToServer:installationId];
  }
}
    

Manuelle Registrierung, wenn die automatische Initialisierung deaktiviert ist

Wenn Sie die automatische Initialisierung deaktiviert haben, wird die FCM App-Instanz beim Start der App nicht automatisch mit FCM registriert. Sie müssen register beim Start der App aufrufen, um die Registrierung und die FID-Übermittlung über die Methode messaging:didReceiveRegistration: auszulösen:

Swift

// Trigger manual registration if auto-initialization is turned off.
Messaging.messaging().register { error in
    if let error = error {
        // Handle the error
        print("Failed registering: \(error)")
        return
    }
    // Registration was successful. FID is delivered through the messaging:didReceiveRegistration: method.
    print("Successfully registered.")
}
    

Objective-C

// Trigger manual registration if auto-initialization is turned off.
[[FIRMessaging messaging] registerWithCompletion:^(NSError * _Nullable error) {
    if (error) {
        // Handle the error
        NSLog(@"Failed registering: %@", error);
        return;
    }
    // Registration was successful. FID is delivered through the messaging:didReceiveRegistration: method.
    NSLog(@"Successfully registered.");
}];
    

Swizzling deaktiviert: APNs-Token und FID zuordnen

Wenn Sie das Method Swizzling deaktiviert haben oder eine SwiftUI-App entwickeln, müssen Sie Ihr APNs-Token explizit den Firebase-Installations-IDs (FIDs) zuordnen. Implementieren Sie die Methode application(_:didRegisterForRemoteNotificationsWithDeviceToken:), um das APNs-Token abzurufen, und legen Sie dann das Attribut apnsToken von Messaging fest:

Swift

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  Messaging.messaging().apnsToken = deviceToken
}

Objective-C

// With "FirebaseAppDelegateProxyEnabled": NO
- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [FIRMessaging messaging].APNSToken = deviceToken;
}

Sobald die FID registriert ist, können Sie mit denselben Methoden wie bei aktiviertem Swizzling darauf zugreifen und auf Aktualisierungsereignisse warten.

Auf das Registrierungstoken zugreifen

Standardmäßig generiert das FCM SDK beim Start der App ein Registrierungstoken für die Client-App-Instanz. Ähnlich wie beim APNs-Gerätetoken können Sie mit diesem Token gezielte Benachrichtigungen an eine bestimmte Instanz Ihrer App senden.

So wie Apple-Plattformen in der Regel beim Start einer App ein APNs-Gerätetoken bereitstellen, stellt FCM ein Registrierungstoken über die Methode messaging:didReceiveRegistrationToken: von FIRMessagingDelegate bereit. Das FCM SDK ruft beim ersten Starten der App und immer dann, wenn das Token aktualisiert oder ungültig gemacht wird, ein neues oder vorhandenes Token ab. In jedem Fall ruft das FCM SDK messaging:didReceiveRegistrationToken: mit einem gültigen Token auf.

Das Registrierungstoken kann sich ändern, wenn:

  • Die App wird auf einem neuen Gerät wiederhergestellt
  • Der Nutzer deinstalliert/installiert die App neu
  • Der Nutzer löscht App-Daten.

Bevollmächtigten für Nachrichten festlegen

Um Registrierungstokens zu erhalten, implementieren Sie das Messaging-Delegatenprotokoll und legen Sie die delegate-Eigenschaft von FIRMessaging nach dem Aufrufen von [FIRApp configure] fest. Wenn Ihr Anwendungs-Delegate beispielsweise dem Messaging-Delegate-Protokoll entspricht, können Sie das Delegate für application:didFinishLaunchingWithOptions: auf sich selbst festlegen.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

Aktuelles Registrierungstoken wird abgerufen

Registrierungstokens werden über die Methode messaging:didReceiveRegistrationToken: bereitgestellt. Diese Methode wird in der Regel einmal pro App-Start mit dem Registrierungstoken aufgerufen. Wenn diese Methode aufgerufen wird, ist der ideale Zeitpunkt für Folgendes:

  • Wenn das Registrierungstoken neu ist, senden Sie es an Ihren Anwendungsserver.
  • Registrierungstoken für Themen abonnieren Dies ist nur für neue Abos oder für Situationen erforderlich, in denen der Nutzer die App neu installiert hat.

Sie können das Token direkt mit token(completion:) abrufen. Wenn das Abrufen des Tokens aus irgendeinem Grund fehlgeschlagen ist, wird ein Fehler zurückgegeben, der nicht null ist.

Swift

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID token: \(token)")
  }
}

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching the remote FCM registration token: %@", error);
  } else {
    NSLog(@"Remote FCM registration token: %@", token);
    NSString* message =
      [NSString stringWithFormat:@"FCM registration token: %@", token];
    // display message
    NSLog(@"%@", message);
  }
}];

Sie können diese Methode jederzeit verwenden, um auf das Token zuzugreifen, anstatt es zu speichern.

Tokenaktualisierung überwachen

Wenn Sie benachrichtigt werden möchten, sobald das Token aktualisiert wird, müssen Sie einen Delegaten angeben, der dem Messaging-Delegatenprotokoll entspricht. Im folgenden Beispiel wird der Delegat registriert und die entsprechende Delegatmethode hinzugefügt:

Swift

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
  print("Firebase registration token: \(String(describing: fcmToken))")
  // TODO: If necessary send token to application server.
  // Note: This callback is fired at each app startup and whenever a new token is generated.
}

Objective-C

- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
    NSLog(@"FCM registration token: %@", fcmToken);
    // Notify about received token.
    NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"];
    [[NSNotificationCenter defaultCenter] postNotificationName:
     @"FCMToken" object:nil userInfo:dataDict];
    // TODO: If necessary send token to application server.
    // Note: This callback is fired at each app startup and whenever a new token is generated.
}

Alternativ können Sie auf ein NSNotification mit dem Namen kFIRMessagingRegistrationTokenRefreshNotification warten, anstatt eine Delegatenmethode anzugeben. Das Attribut „token“ hat immer den aktuellen Tokenwert.

Swizzling deaktiviert: APNs-Token und Registrierungstoken zuordnen

Wenn Sie das Method Swizzling deaktiviert haben oder eine SwiftUI-App erstellen, müssen Sie Ihr APNs-Token explizit dem FCM-Registrierungstoken zuordnen. Implementieren Sie die Methode application(_:didRegisterForRemoteNotificationsWithDeviceToken:), um das APNs-Token abzurufen, und legen Sie dann das Attribut apnsToken von Messaging fest:

Swift

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  Messaging.messaging().apnsToken = deviceToken
}

Objective-C

// With "FirebaseAppDelegateProxyEnabled": NO
- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [FIRMessaging messaging].APNSToken = deviceToken;
}

Nachdem das FCM-Registrierungstoken generiert wurde, können Sie mit denselben Methoden wie bei aktiviertem Swizzling darauf zugreifen und auf Aktualisierungsereignisse warten.

Automatische Initialisierung verhindern

Wenn eine FCM-Registrierung generiert wird, lädt die Bibliothek die Kennung und die Konfigurationsdaten in Firebase hoch. Wenn Sie zuerst eine ausdrückliche Einwilligung von Nutzern einholen möchten, können Sie die automatische Registrierung bei der Konfiguration verhindern, indem Sie FCM deaktivieren. Fügen Sie dazu einen Metadatenwert zu Ihrer Info.plist (nicht zu Ihrer GoogleService-Info.plist) hinzu:

FirebaseMessagingAutoInitEnabled = NO

Wenn Sie FCM wieder aktivieren möchten, können Sie einen Laufzeitaufruf ausführen:

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

Dieser Wert bleibt nach dem Festlegen auch nach dem Neustart der App erhalten.

Benachrichtigungsdienst-Erweiterung einrichten

Wenn Sie Benachrichtigungen mit Bildern an Apple-Geräte senden möchten, müssen Sie eine Erweiterung für den Benachrichtigungsdienst hinzufügen. Mit dieser Erweiterung können auf Geräten Bilder angezeigt werden, die in der Benachrichtigungs-Payload enthalten sind. Wenn Sie keine Bilder in Benachrichtigungen senden möchten, können Sie diesen Schritt überspringen.

Wenn Sie eine Dienst-Erweiterung hinzufügen möchten, führen Sie die erforderlichen Einrichtungsaufgaben zum Ändern und Präsentieren von Benachrichtigungen in APNs aus und fügen Sie dann die FCM-Erweiterungs-Helper-API in NotificationService.m hinzu. Anstatt den Callback mit self.contentHandler(self.bestAttemptContent); abzuschließen, schließen Sie ihn mit FIRMessaging extensionHelper ab, wie unten gezeigt:

@interface NotificationService () <NSURLSessionDelegate>
@property(nonatomic) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property(nonatomic) UNMutableNotificationContent *bestAttemptContent;
@end

@implementation NotificationService

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];

    // Modify the notification content here as you want
self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]",
self.bestAttemptContent.title];

  // Call FIRMessaging extension helper API.
  [[FIRMessaging extensionHelper] populateNotificationContent:self.bestAttemptContent
withContentHandler:contentHandler];

}
...

Benachrichtigung senden

  1. Installieren Sie die App auf dem Zielgerät und führen Sie sie aus. Akzeptieren Sie auf Apple-Geräten die Berechtigungsanfrage zum Empfangen von Remote-Benachrichtigungen.

  2. Prüfen Sie, ob die App auf dem Gerät im Hintergrund ausgeführt wird.

  3. Rufen Sie in der Firebase Console die Seite DevOps & Engagement > Messaging auf.

  4. Erstellen Sie eine Kampagne.

    • Wenn dies Ihre erste Nachricht ist:

      1. Wählen Sie Erste Kampagne erstellen aus.

      2. Wählen Sie Firebase-Benachrichtigungen und dann Erstellen aus.

    • Wenn Sie bereits Kampagnen erstellt haben:

      1. Wählen Sie auf dem Tab Kampagnen die Option Neue Kampagne aus.

      2. Klicke auf Benachrichtigungen.

  5. Geben Sie den Nachrichtentext ein.

  6. Wählen Sie im rechten Bereich Testnachricht senden aus.

  7. Geben Sie im Feld Firebase-Installations-ID oder FCM-Registrierungstoken hinzufügen Ihr Registrierungstoken ein.

  8. Wählen Sie Testen aus.

Nachdem Sie Testen ausgewählt haben, sollte das Zielclientgerät die Benachrichtigung erhalten, während die App im Hintergrund ausgeführt wird.

Wenn Sie Informationen zur Zustellung von Nachrichten an Ihre App erhalten möchten, rufen Sie in der Firebase-Konsole das Dashboard „Berichte“ unter DevOps & Engagement > Messaging auf. In diesem Dashboard wird die Anzahl der auf Apple- und Android-Geräten gesendeten und geöffneten Nachrichten erfasst. Außerdem sind Daten zu „Impressionen“ (von Nutzern gesehene Benachrichtigungen) für Android-Apps enthalten.

Nächste Schritte

Nachdem Sie die Einrichtungsschritte abgeschlossen haben, haben Sie folgende Möglichkeiten, mit FCM für Apple-Plattformen fortzufahren: