Für Apple-Client-Apps können Sie Benachrichtigungen und Datennutzlasten von bis zu 4.000 Byte über die Firebase Cloud Messaging APNs-Schnittstelle empfangen.
Um Ihren Client-Code in Objective-C oder Swift zu schreiben, empfehlen wir die Verwendung der FIRMessaging-API . Das Schnellstartbeispiel enthält Beispielcode für beide Sprachen.
Methodenwechsel in Firebase Cloud Messaging
Das FCM SDK führt Methoden-Swizzling in zwei Schlüsselbereichen durch: Zuordnen Ihres APNs-Tokens zum FCM-Registrierungstoken und Erfassen von Analysedaten während der nachgelagerten Nachrichtenrückrufverarbeitung . Entwickler, die Swizzling lieber nicht verwenden möchten, können es deaktivieren, indem sie das Flag FirebaseAppDelegateProxyEnabled
in der Info.plist-Datei der App hinzufügen und es auf NO (boolescher Wert) setzen. Relevante Bereiche der Leitfäden enthalten Codebeispiele, sowohl mit als auch ohne aktiviertem Methoden-Swizzling.
Fügen Sie Firebase zu Ihrem Apple-Projekt hinzu
Falls noch nicht geschehen, fügen Sie Firebase zu Ihrem Apple-Projekt hinzu .
Laden Sie Ihren APNs-Authentifizierungsschlüssel hoch
Laden Sie Ihren APNs-Authentifizierungsschlüssel auf Firebase hoch. Wenn Sie noch keinen APNs-Authentifizierungsschlüssel haben, erstellen Sie unbedingt einen im Apple Developer Member Center .
Wählen Sie in Ihrem Projekt in der Firebase-Konsole das Zahnradsymbol aus, wählen Sie Projekteinstellungen und dann die Registerkarte Cloud-Messaging aus.
Klicken Sie unter „APNs-Authentifizierungsschlüssel“ unter „iOS-App-Konfiguration“ auf die Schaltfläche „Hochladen“ .
Navigieren Sie zu dem Speicherort, an dem Sie Ihren 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 .
Registrieren Sie sich für Fernbenachrichtigungen
Registrieren Sie Ihre App entweder beim Start oder an der gewünschten Stelle in Ihrem Anwendungsablauf für Remote-Benachrichtigungen. Rufen SieregisterForRemoteNotifications
wie gezeigt auf:Schnell
UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) application.registerForRemoteNotifications()
Ziel c
[UNUserNotificationCenter currentNotificationCenter].delegate = self; UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { // ... }]; [application registerForRemoteNotifications];
Greifen Sie auf das Registrierungstoken zu
Standardmäßig generiert das FCM SDK beim App-Start ein Registrierungstoken für die Client-App-Instanz. Ähnlich wie das APNs-Gerätetoken ermöglicht Ihnen dieses Token, gezielte Benachrichtigungen an jede bestimmte Instanz Ihrer App zu senden.
Auf die gleiche Weise, wie Apple-Plattformen normalerweise beim App-Start ein APNs-Gerätetoken bereitstellen, stellt FCM ein Registrierungstoken über die Methode messaging:didReceiveRegistrationToken:
von FIRMessagingDelegate
bereit. Das FCM SDK ruft beim ersten App-Start und immer dann, wenn das Token aktualisiert oder ungültig gemacht wird, ein neues oder vorhandenes Token ab. In allen Fällen ruft das FCM SDK messaging:didReceiveRegistrationToken:
mit einem gültigen Token auf.
Der Registrierungstoken kann sich ändern, wenn:
- Die App wird auf einem neuen Gerät wiederhergestellt
- Der Benutzer deinstalliert/neuinstalliert die App
- Der Benutzer löscht App-Daten.
Legen Sie den Nachrichtendelegierten fest
Um Registrierungstoken zu empfangen, implementieren Sie das Messaging-Delegatprotokoll und legen Sie delegate
von FIRMessaging
fest, nachdem Sie [FIRApp configure]
aufgerufen haben. Wenn Ihr Anwendungsdelegat beispielsweise dem Messaging-Delegatprotokoll entspricht, können Sie den Delegaten für application:didFinishLaunchingWithOptions:
auf sich selbst festlegen.
Schnell
Messaging.messaging().delegate = self
Ziel c
[FIRMessaging messaging].delegate = self;
Abrufen des aktuellen Registrierungstokens
Registrierungstoken werden über die Methode messaging:didReceiveRegistrationToken:
übermittelt. Diese Methode wird im Allgemeinen einmal pro App-Start mit Registrierungstoken aufgerufen. Wenn diese Methode aufgerufen wird, ist dies der ideale Zeitpunkt für Folgendes:
- Wenn das Registrierungstoken neu ist, senden Sie es an Ihren Anwendungsserver.
- Abonnieren Sie das Registrierungstoken für Themen. Dies ist nur für neue Abonnements oder für Situationen erforderlich, in denen der Benutzer die App erneut installiert hat.
Sie können das Token direkt mit token(completion:) abrufen. Wenn der Tokenabruf in irgendeiner Weise fehlgeschlagen ist, wird ein Fehler ungleich Null ausgegeben.
Schnell
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)" } }
Ziel 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; } }];
Mit dieser Methode können Sie jederzeit auf den Token zugreifen, anstatt ihn zu speichern.
Überwachen Sie die Tokenaktualisierung
Um bei jeder Aktualisierung des Tokens benachrichtigt zu werden, stellen Sie einen Delegaten bereit, der dem Messaging-Delegatenprotokoll entspricht. Das folgende Beispiel registriert den Delegaten und fügt die richtige Delegatenmethode hinzu:
Schnell
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. }
Ziel 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 Delegate-Methode bereitzustellen. Die Token-Eigenschaft hat immer den aktuellen Token-Wert.
Swizzling deaktiviert: Zuordnung Ihres APNs-Tokens und Registrierungstokens
Wenn Sie das Methoden-Swizzling deaktiviert haben oder eine SwiftUI-App erstellen, müssen Sie Ihr APNs-Token explizit dem FCM-Registrierungstoken zuordnen. Implementieren Sie die application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
um das APNs-Token abzurufen, und legen Sie dann die Eigenschaft apnsToken
von Messaging
fest:
Schnell
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
Ziel c
// With "FirebaseAppDelegateProxyEnabled": NO - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
Nachdem das FCM-Registrierungstoken generiert wurde, können Sie darauf zugreifen und auf Aktualisierungsereignisse warten, indem Sie dieselben Methoden verwenden wie bei aktiviertem Swizzling.
Verhindern Sie die automatische Initialisierung
Wenn ein FCM-Registrierungstoken generiert wird, lädt die Bibliothek die Kennung und Konfigurationsdaten in Firebase hoch. Wenn Sie zuerst eine explizite Zustimmung der Benutzer einholen möchten, können Sie die Token-Generierung zum Zeitpunkt der Konfiguration verhindern, indem Sie FCM deaktivieren. Fügen Sie dazu einen Metadatenwert zu Ihrer Info.plist
hinzu (nicht zu Ihrer GoogleService-Info.plist
):
FirebaseMessagingAutoInitEnabled = NO
Um FCM wieder zu aktivieren, können Sie einen Laufzeitaufruf durchführen:
Schnell
Messaging.messaging().autoInitEnabled = true
Ziel c
[FIRMessaging messaging].autoInitEnabled = YES;
Dieser Wert bleibt über App-Neustarts hinweg bestehen, sobald er festgelegt wurde.
Nächste Schritte
Nachdem Sie Ihren Apple-Client eingerichtet haben, können Sie Ihrer App die Nachrichtenverarbeitung und andere, erweiterte Verhaltensweisen hinzufügen. Weitere Informationen finden Sie in diesen Leitfäden: