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

Bei Apple-Client-Apps können Sie Benachrichtigungs- und Datennutzlasten 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 Beispiel in der Kurzanleitung enthält Beispielcode für beide Sprachen.

Method Swizzling in Firebase Cloud Messaging

Das FCM SDK führt das Methoden-Swizzling in zwei wichtigen Bereichen aus: Beim Zuordnen deines APNs-Tokens zum FCM-Registrierungstoken und beim Erfassen von Analysedaten während der Downstream-Nachrichten-Callback-Verarbeitung. Entwickler, die das Zusammenführen nicht verwenden möchten, können es deaktivieren, indem sie das Flag FirebaseAppDelegateProxyEnabled in der Info.plist-Datei der App hinzufügen und auf „NO“ (boolescher Wert) setzen. In den relevanten Bereichen der Anleitungen finden Sie Codebeispiele, sowohl mit als auch ohne aktiviertes Methoden-Swizzling.

Firebase zu Ihrem Apple-Projekt hinzufügen

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

APNs-Authentifizierungsschlüssel hochladen

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

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

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

  3. Rufen Sie den Speicherort auf, 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 Ablauf Ihrer Anwendung 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 Starten 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 beim Starten der App in der Regel ein APNs-Gerätetoken senden, stellt FCM über die messaging:didReceiveRegistrationToken:-Methode von FIRMessagingDelegate ein Registrierungstoken bereit. Das FCM SDK ruft beim ersten Start der App und jedes Mal, wenn das Token aktualisiert oder ungültig 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 in folgenden Fällen ändern:

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

Messaging-Delegierten festlegen

Wenn du Registrierungstokens erhalten möchtest, implementiere das Messaging-Delegierungsprotokoll und setze das delegate-Attribut von FIRMessaging nach dem Aufruf von [FIRApp configure]. Wenn Ihr Anwendungsdelegat beispielsweise dem Messaging-Delegatprotokoll entspricht, können Sie den Delegaten unter 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: gesendet. Diese Methode wird in der Regel einmal pro App-Start mit dem Registrierungstoken aufgerufen. Wenn diese Methode aufgerufen wird, ist es 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 für Situationen erforderlich, in denen der Nutzer die App neu installiert hat.

Sie können das Token direkt mit token(completion:) abrufen. Wenn der Abruf des Tokens 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 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

Wenn Sie benachrichtigt werden möchten, wenn das Token aktualisiert wird, geben Sie einen Bevollmächtigten an, der dem Messaging Delegate Protocol entspricht. Im folgenden Beispiel wird der Delegate registriert und die entsprechende 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 eine NSNotification mit dem Namen kFIRMessagingRegistrationTokenRefreshNotification warten, anstatt eine Delegating-Methode anzugeben. Die Token-Eigenschaft hat immer den aktuellen Tokenwert.

Swizzling deaktiviert: Zuordnung Ihres APNs-Tokens und Registrierungstokens

Wenn Sie das Methoden-Swizzling deaktiviert haben oder eine SwiftUI-App entwickeln, 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 die Eigenschaft 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, kannst du darauf zugreifen und mit denselben Methoden wie bei aktiviertem Swapping 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 explizite Einwilligung der Nutzer einholen möchten, können Sie die Tokengenerierung bei der Konfiguration verhindern, indem Sie FCM deaktivieren. Fügen Sie dazu Ihrem Info.plist (nicht Ihrem GoogleService-Info.plist) einen Metadatenwert hinzu:

FirebaseMessagingAutoInitEnabled = NO

Sie können FCM wieder aktivieren, indem Sie einen Runtime-Aufruf ausführen:

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

Dieser Wert bleibt nach dem Festlegen auch nach App-Neustarts erhalten.

Nächste Schritte

Nachdem Sie Ihren Apple-Client eingerichtet haben, können Sie Ihrer App die Nachrichtenverarbeitung und andere erweiterte Funktionen hinzufügen. Weitere Informationen finden Sie in diesen Anleitungen: