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 in Ihren Client-Apps für Apple-Plattformen (z. B. iOS) mit Firebase Cloud Messaging beginnen, damit Sie zuverlässig Nachrichten senden können.

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

Wenn Sie Ihren Clientcode in Objective-C oder Swift schreiben möchten, empfehlen wir Ihnen, die FIRMessaging API zu verwenden. Das Kurzanleitungs beispiel 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 Method Swizzling in zwei Hauptbereichen aus: Zuordnung Ihres APNs-Tokens zum FCM Registrierungstoken und Erfassung von Analysedaten bei der Callback-Verarbeitung von Downstream-Nachrichten handling. 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 es auf NO (boolescher Wert) 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. Wählen Sie in Ihrem Projekt in der Firebase Console das Zahnradsymbol und dann Project Settings und den Tab Cloud Messaging aus.

  2. Klicken Sie unter APNs-Authentifizierungsschlüssel im Abschnitt Konfiguration der iOS-App auf die Schaltfläche Hochladen , um Ihren Authentifizierungsschlüssel für die Entwicklung oder den Authentifizierungsschlüssel für die Produktion oder beide hochzuladen. Mindestens eine Angabe 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 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 normalerweise 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-Delegate festlegen

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

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 Folgendes:

  • Wenn das Registrierungstoken neu ist, senden Sie es an Ihren Anwendungsserver.
  • Registrieren 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 ein Delegate an, das dem Messaging-Delegate-Protokoll entspricht. Im folgenden Beispiel wird das Delegate registriert und die entsprechende Delegate-Methode 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 eine NSNotification mit dem Namen kFIRMessagingRegistrationTokenRefreshNotification warten, anstatt eine Delegate-Methode 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 ein FCM Registrierungstoken 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 Tokengenerierung bei der Konfiguration verhindern, indem Sie FCM deaktivieren. Fügen Sie dazu einen Metadatenwert zu Ihrer Info.plist-Datei hinzu (nicht zu GoogleService-Info.plist):

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 zum Empfangen von Remote-Benachrichtigungen.
  2. Prüfen Sie, ob die App auf dem Gerät im Hintergrund ausgeführt wird.
  3. Öffnen Sie in der Firebase Console die Seite „Messaging“.
  4. Wenn dies Ihre erste Nachricht ist, wählen Sie Erste Kampagne erstellen aus.
    1. Wählen Sie Firebase-Benachrichtigungen und dann Erstellen aus.
  5. Wählen Sie andernfalls auf dem Tab Kampagnen die Option Neue Kampagne und dann Benachrichtigungen aus.
  6. Geben Sie den Nachrichtentext ein.
  7. Wählen Sie im rechten Bereich Testnachricht senden aus.
  8. Geben Sie im Feld Registrierungstoken hinzufügen Ihr Registrierungstoken ein.FCM
  9. Wählen Sie Testen aus.

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

Informationen zur Zustellung von Nachrichten an Ihre App finden Sie im FCM Bericht Dashboard, dort wird die Anzahl der Nachrichten erfasst, die auf Apple- und Android Geräten gesendet und geöffnet wurden.

Nächste Schritte

Nachdem Sie die Einrichtungsschritte abgeschlossen haben, finden Sie hier einige Optionen, wie Sie mit FCM für Apple-Plattformen fortfahren können: