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.
-
Klicken Sie in Ihrem Projekt in der Firebase Console auf das Zahnradsymbol, wählen Sie Projekteinstellungen und dann den Tab Cloud Messaging aus.
-
Klicken Sie im APNs-Authentifizierungsschlüssel unter iOS-App-Konfiguration auf die Schaltfläche Hochladen.
-
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 SieregisterForRemoteNotifications
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: