Bei Apple-Client-Apps können Sie Benachrichtigungs- und Daten-Payloads mit einer Größe 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 Kurzanleitungsbeispiel enthält Beispielcode für beide Sprachen.
Method Swizzling in Firebase Cloud Messaging
Das FCM SDK führt das Method Swizzling in zwei wichtigen Bereichen aus:
Zuordnung Ihres APNs-Tokens zum FCM-Registrierungstoken und Erfassung von Analysedaten während der Callback-Verarbeitung von Downstream-Nachrichten.
Entwickler, die kein Swizzling 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 mit und ohne aktivierte Method 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 APNs-Authentifizierungsschlüssel haben, müssen Sie einen im Apple Developer Member Center erstellen.
-
Wählen Sie in Ihrem Projekt in der Firebase-Konsole das Zahnradsymbol aus, dann Projekteinstellungen und schließlich den Tab Cloud Messaging.
-
Klicken Sie unter Konfiguration der iOS-App bei APNs-Authentifizierungsschlüssel auf die Schaltfläche Hochladen.
-
Suchen Sie nach dem 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 SieregisterForRemoteNotifications
wie folgt 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 in der Regel beim Start einer 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 gemacht 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 ändern, wenn:
- Die App wird auf einem neuen Gerät wiederhergestellt
- Der Nutzer deinstalliert/installiert die App neu
- Der Nutzer löscht App-Daten.
Bevollmächtigten für Nachrichten festlegen
Um Registrierungstokens zu erhalten, implementieren Sie das Messaging-Delegatenprotokoll und legen Sie die delegate
-Eigenschaft von FIRMessaging
nach dem Aufrufen von [FIRApp configure]
fest.
Wenn Ihr Anwendungs-Delegate beispielsweise dem Messaging-Delegate-Protokoll entspricht, können Sie das Delegate für application:didFinishLaunchingWithOptions:
auf sich selbst festlegen.
Swift
Messaging.messaging().delegate = self
Objective-C
[FIRMessaging messaging].delegate = self;
Aktuelles Registrierungstoken wird abgerufen
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.
- Registrierungstoken für Themen abonnieren 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 das Abrufen des Tokens fehlschlägt, 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, sobald das Token aktualisiert wird, müssen Sie einen Delegaten angeben, der dem Messaging-Delegatenprotokoll entspricht. Im folgenden Beispiel wird der Delegat registriert und die entsprechende Delegatmethode 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
mit dem Namen kFIRMessagingRegistrationTokenRefreshNotification
warten, anstatt eine Delegatmethode anzugeben. Das Attribut „token“ hat immer den aktuellen Tokenwert.
Swizzling deaktiviert: APNs-Token und Registrierungstoken zuordnen
Wenn Sie das Method 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 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 zu Firebase hoch. Wenn Sie zuerst eine explizite 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
(nicht zu Ihrer GoogleService-Info.plist
) hinzu:
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 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 den folgenden Anleitungen: