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 Clientcode in Objective-C oder Swift schreiben möchten, empfehlen wir die Verwendung der FIRMessaging API. Das Beispiel für die 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 Swizzling nicht verwenden möchten, können es deaktivieren, indem sie das Flag FirebaseAppDelegateProxyEnabled in die Info.plist-Datei der App einfügen und es auf NO (boolescher Wert) setzen. Relevante Bereiche der Anleitungen enthalten Codebeispiele, sowohl mit als auch ohne aktiviertes Methoden-Scrollen.

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 Sie noch keinen APN-Authentifizierungsschlüssel haben, erstellen Sie einen im Apple Developer Member Center.

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

  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 Anwendungsablauf für Remote-Benachrichtigungen. Rufen Sie registerForRemoteNotifications wie hier 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

Das FCM SDK generiert beim Start der App standardmäßig 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 neu.
  • Der Nutzer löscht die App-Daten.

Messaging-Delegierten festlegen

Um Registrierungstokens zu erhalten, implementiere das Messaging-Delegat-Protokoll und lege nach dem Aufrufen von [FIRApp configure] das Attribut delegate von FIRMessaging fest. 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 einem 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: Zuordnen von APNs-Token und Registrierungstoken

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 Registrierungstoken FCM generiert wurde, können Sie mit denselben Methoden wie bei aktiviertem Swizzling auf Aktualisierungsereignisse zugreifen.

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 Neustart der App 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: