Firebase Cloud Messaging-Client-App auf Apple-Plattformen einrichten

Bei Apple-Client-Apps können Sie Benachrichtigungen und Datennutzlasten mit bis zu 4.096 Byte über die Firebase Cloud Messaging-APNs-Schnittstelle empfangen.

Wir empfehlen die Verwendung der FIRMessaging API, um Ihren Clientcode in Objective-C oder Swift zu schreiben. Das Beispiel für die Kurzanleitung enthält Beispielcode für beide Sprachen.

Methoden-Swizzling in Firebase Cloud Messaging

Das FCM SDK führt den Methodenwechsel in zwei wichtigen Bereichen durch: Zuordnung Ihres APNs-Tokens zum FCM-Registrierungstoken und Erfassen von Analysedaten während der Verarbeitung von Nachrichtenrückrufen im Downstream. Entwickler, die Swizzling nicht verwenden möchten, können sie deaktivieren, indem sie in der Info.plist-Datei der App das Flag FirebaseAppDelegateProxyEnabled hinzufügen und auf NO (boolescher Wert) setzen. Die relevanten Bereiche der Anleitungen enthalten Codebeispiele, mit und ohne Methoden-Swizzling.

Firebase zu Ihrem Apple-Projekt hinzufügen

Falls noch nicht geschehen, fügen Sie Firebase Ihrem Apple-Projekt hinzu.

APNs-Authentifizierungsschlüssel hochladen

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

  1. Klicken Sie in Ihrem Projekt in der Firebase Console auf das Zahnradsymbol, wählen Sie Projekteinstellungen und dann den Tab Cloud Messaging aus.

  2. Klicken Sie im APNs-Authentifizierungsschlüssel unter iOS-App-Konfiguration auf die Schaltfläche Hochladen.

  3. Gehen Sie zum 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 Upload (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 Registrierungstoken zugreifen

Standardmäßig generiert das FCM SDK beim Start der App ein Registrierungstoken für die Client-App-Instanz. Ähnlich wie mit dem 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 messaging:didReceiveRegistrationToken: von FIRMessagingDelegate bereit. Das FCM SDK ruft beim ersten Start der App und immer dann, wenn das Token aktualisiert oder ungültig 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 die App und installiert sie neu.
  • Der Nutzer löscht die App-Daten.

Bevollmächtigten für die Nachrichtenfunktion festlegen

Implementieren Sie zum Empfangen von Registrierungstokens das Messaging-Delegate-Protokoll und legen Sie nach dem Aufrufen von [FIRApp configure] die delegate-Eigenschaft von FIRMessaging fest. Wenn Ihr Anwendungsdelegat beispielsweise dem Protokoll des Messaging-Delegaten entspricht, können Sie den Delegaten auf application:didFinishLaunchingWithOptions: auf sich selbst festlegen.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

Aktuelles Registrierungstoken wird abgerufen

Registrierungstokens werden mit der Methode messaging:didReceiveRegistrationToken: zugestellt. Diese Methode wird in der Regel einmal pro App-Start mit dem Registrierungstoken aufgerufen. Wenn diese Methode aufgerufen wird, ist dies der ideale Zeitpunkt, um:

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

Sie können das Token direkt mit token(complete:) abrufen. Wenn der Tokenabruf in irgendeiner Weise fehlgeschlagen ist, wird ein Fehler ungleich null angegeben.

Swift

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

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
  if (error != nil) {
    NSLog(@"Error getting FCM registration token: %@", error);
  } else {
    NSLog(@"FCM registration token: %@", token);
    self.fcmRegTokenMessage.text = token;
  }
}];

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

Tokenaktualisierung überwachen

Geben Sie einen Delegaten an, der dem Messaging-Delegatprotokoll entspricht, damit Sie bei jeder Aktualisierung des Tokens benachrichtigt werden. Im folgenden Beispiel wird der Delegate registriert und die richtige Delegate-Methode hinzugefügt:

Swift

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
  )
  // 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 namens kFIRMessagingRegistrationTokenRefreshNotification warten, anstatt eine Delegate-Methode anzugeben. Das Tokenattribut hat immer den aktuellen Tokenwert.

Swizzling deaktiviert: Zuordnung Ihres APNs- und Registrierungstokens

Wenn Sie Methoden-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 ein FCM-Registrierungstoken generiert wird, lädt die Bibliothek die Kennung und die Konfigurationsdaten in Firebase hoch. Wenn Sie zuerst eine ausdrückliche Zustimmung von Nutzern einholen möchten, können Sie die Generierung von Tokens bei der Konfiguration verhindern, indem Sie FCM deaktivieren. Fügen Sie dazu einen Metadatenwert zu Info.plist hinzu (nicht zu GoogleService-Info.plist):

FirebaseMessagingAutoInitEnabled = NO

Sie können FCM über einen Laufzeitaufruf wieder aktivieren:

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

Dieser Wert bleibt nach dem Festlegen von App-Neustarts bestehen.

Nächste Schritte

Nachdem Sie den Apple-Client eingerichtet haben, können Sie Ihrer Anwendung die Nachrichtenverarbeitung und andere erweiterte Verhaltensweisen hinzufügen. Weitere Informationen finden Sie in diesen Leitfäden: