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

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


In dieser Anleitung wird beschrieben, wie Sie Firebase Cloud Messaging in Ihren Apple-Client-Apps (z. B. iOS) verwenden können, um zuverlässig Nachrichten zu senden.

Bei Apple-Client-Apps können Sie Benachrichtigungs- und Daten-Nutzlasten von bis zu 4096 Byte über die Firebase Cloud Messaging APNs-Schnittstelle empfangen.

Wenn Sie Ihren Clientcode in Objective-C oder Swift schreiben möchten, empfehlen wir Ihnen, die FIRMessaging API zu verwenden. Im Kurzanleitungsbeispiel finden Sie Beispielcode für beide Sprachen.

Fügen Sie Ihrem Apple-Projekt Firebase hinzu, bevor Sie beginnen.

Method Swizzling in Firebase Cloud Messaging

Das FCM SDK führt Method Swizzling in zwei Hauptbereichen aus: Zuordnung Ihres APNs-Tokens zu der Firebase-Installations-ID oder FCM Registrierungstoken und Erfassung von Analysedaten bei der Callback-Verarbeitung von Downstream-Nachrichten. Entwickler, die Swizzling nicht verwenden möchten, können es deaktivieren, indem sie das Flag FirebaseAppDelegateProxyEnabled in der Datei Info.plist der App hinzufügen und auf den booleschen Wert NO setzen. In den entsprechenden Abschnitten der Anleitungen finden Sie Codebeispiele mit und ohne aktiviertem 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 die Einstellungen > Allgemein auf. Klicken Sie dann auf den Cloud Messaging Tab.
  2. Klicken Sie unter APNs-Authentifizierungsschlüssel im Abschnitt Konfiguration der iOS-App auf Hochladen , um Ihren Authentifizierungsschlüssel für die Entwicklung oder den Authentifizierungsschlüssel für die Produktion oder beide hochzuladen. Mindestens einer ist erforderlich.
  3. Suchen Sie den Speicherort, an dem Sie den Schlüssel gespeichert haben, 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 gezeigt 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 Start der 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's 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 die FID 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 mit der Firebase-Installations-ID aktivieren

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

FirebaseMessagingInstallationIdEnabled = YES

Messaging-Delegaten festlegen

Wenn Sie FIDs empfangen möchten, implementieren Sie das Messaging-Delegatenprotokoll und legen Sie die delegate Property von FIRMessaging fest, nachdem Sie [FIRApp configure] aufgerufen haben. Wenn Ihr Anwendungsdelegat beispielsweise dem Messaging-Delegatenprotokoll entspricht, können Sie den Delegaten in application:didFinishLaunchingWithOptions: auf sich selbst setzen.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

Methode didReceiveRegistration implementieren

App-Instanzen werden nach Abschluss der Registrierung mit der FID angesprochen. Wenn Sie die FID bei der Registrierung erhalten möchten, implementieren Sie die messaging:didReceiveRegistration: Methode. Diese Methode wird in der Regel einmal pro App-Start mit der FID aufgerufen. Wenn diese Methode aufgerufen wird, haben Sie folgende Möglichkeiten:

  • Wenn Sie die FID noch nicht an Ihren Server gesendet haben oder sie erst vor Kurzem 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, registriert das FCM SDK die App-Instanz beim Start der App nicht automatisch bei FCM. Sie müssen beim Start der App register aufrufen, um die Registrierung und die FID-Übermittlung über die messaging:didReceiveRegistration: Methode 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 Method Swizzling deaktiviert haben oder eine SwiftUI-App erstellen, müssen Sie Ihr APNs-Token explizit den Firebase-Installations-IDs (FID) zuordnen. Implementieren Sie die application(_:didRegisterForRemoteNotificationsWithDeviceToken:) Methode, um das APNs-Token abzurufen, und legen Sie dann die apnsToken Property 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 darauf zugreifen und auf Aktualisierungs ereignisse warten. Verwenden Sie dazu dieselben Methoden wie bei aktiviertem Swizzling.

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 der App ein APNs-Gerätetoken bereitstellen, stellt FCM ein Registrierungstoken über die Methode FIRMessagingDelegate's messaging:didReceiveRegistrationToken: bereit. Das FCM SDK ruft beim ersten Start der App und immer dann, wenn das Token aktualisiert oder ungültig gemacht wird, ein neues oder vorhandenes Token ab. In allen Fällen ruft das FCM SDK messaging:didReceiveRegistrationToken: mit einem gültigen Token auf.

Das Registrierungstoken kann sich in folgenden Fällen ändern:

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

Messaging-Delegaten festlegen

Wenn Sie Registrierungstokens empfangen möchten, implementieren Sie das Messaging-Delegatenprotokoll und legen Sie die FIRMessaging's delegate Property fest, nachdem Sie [FIRApp configure] aufgerufen haben. Wenn Ihr Anwendungsdelegat beispielsweise dem Messaging-Delegatenprotokoll entspricht, können Sie den Delegaten in application:didFinishLaunchingWithOptions: auf sich selbst setzen.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

Aktuelles Registrierungstoken abrufen

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 folgende Aktionen:

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

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

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, wenn das Token aktualisiert wird, geben Sie einen Delegaten an, der dem Messaging-Delegatenprotokoll entspricht. Im folgenden Beispiel wird der Delegat registriert und die entsprechende Delegatenmethode 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. Die Token-Property enthält immer den aktuellen Tokenwert.

Swizzling deaktiviert: APNs-Token und Registrierungstoken zuordnen

Wenn Sie Method Swizzling deaktiviert haben oder eine SwiftUI-App erstellen, müssen Sie Ihr APNs-Token explizit dem FCM Registrierungstoken zuordnen. Implementieren Sie die application(_:didRegisterForRemoteNotificationsWithDeviceToken:) Methode, um das APNs-Token abzurufen, und legen Sie dann die Messaging's apnsToken Property 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 darauf zugreifen und auf Aktualisierungsereignisse warten. Verwenden Sie dazu dieselben Methoden wie bei aktiviertem Swizzling .

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 der Datei Info.plist (nicht der Datei GoogleService-Info.plist) einen Metadatenwert 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 Neustarts der App erhalten.

Benachrichtigungsdienst-Erweiterung einrichten

Wenn Sie Benachrichtigungen mit Bildern an Apple-Geräte senden möchten, müssen Sie eine Benachrichtigungsdienst-Erweiterung hinzufügen. Mit dieser Erweiterung können Geräte Bilder anzeigen, die in der Benachrichtigungs-Nutzlast enthalten sind. Wenn Sie keine Bilder in Benachrichtigungen senden möchten, können Sie diesen Schritt überspringen.

Führen Sie die erforderlichen Einrichtungsschritte aus, um Benachrichtigungen in APNs zu ändern und zu präsentieren, 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 Anfrage nach der Berechtigung, Remote-Benachrichtigungen zu empfangen.

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

  3. Rufen Sie in der Firebase Konsole 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. Klicken Sie 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 Ihr Registrierungstoken ein.

  8. Wählen Sie Testen aus.

Nachdem Sie Testen ausgewählt haben, sollte das Ziel-Clientgerät mit der App im Hintergrund die Benachrichtigung erhalten.

Informationen zur Zustellung von Nachrichten an Ihre App finden Sie in der Firebase Konsole unter DevOps & Engagement > Messaging > Berichte Dashboard. In diesem Dashboard wird die Anzahl der Nachrichten erfasst, die auf Apple- und Android-Geräten gesendet und geöffnet wurden, sowie Daten zu Impressionen (von Nutzern gesehene Benachrichtigungen) für Android-Apps.

Nächste Schritte

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