Sobald Ihre Client-App auf einem Gerät installiert ist, kann sie Nachrichten über die FCM-APNs-Schnittstelle empfangen. Sie können sofort mit dem Versenden von Benachrichtigungen an Benutzersegmente mit dem Notifications Composer oder von auf Ihrem Anwendungsserver erstellten Nachrichten beginnen.
Behandeln Sie Warnmeldungen
FCM übermittelt alle Nachrichten, die an Apple-Apps gerichtet sind, über APNs. Weitere Informationen zum Empfang von APNs-Benachrichtigungen über UNUserNotificationCenter finden Sie in der Dokumentation von Apple zum Umgang mit Benachrichtigungen und benachrichtigungsbezogenen Aktionen .
Sie müssen den UNUserNotificationCenter-Delegaten festlegen und die entsprechenden Delegatenmethoden implementieren, um Anzeigebenachrichtigungen von FCM zu erhalten.
Schnell
extension AppDelegate: UNUserNotificationCenterDelegate { // Receive displayed notifications for iOS 10 devices. func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification) async -> UNNotificationPresentationOptions { let userInfo = notification.request.content.userInfo // With swizzling disabled you must let Messaging know about the message, for Analytics // Messaging.messaging().appDidReceiveMessage(userInfo) // ... // Print full message. print(userInfo) // Change this to your preferred presentation option return [[.alert, .sound]] } func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse) async { let userInfo = response.notification.request.content.userInfo // ... // With swizzling disabled you must let Messaging know about the message, for Analytics // Messaging.messaging().appDidReceiveMessage(userInfo) // Print full message. print(userInfo) } }
Ziel c
// Receive displayed notifications for iOS 10 devices. // Handle incoming notification messages while app is in the foreground. - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler { NSDictionary *userInfo = notification.request.content.userInfo; // With swizzling disabled you must let Messaging know about the message, for Analytics // [[FIRMessaging messaging] appDidReceiveMessage:userInfo]; // ... // Print full message. NSLog(@"%@", userInfo); // Change this to your preferred presentation option completionHandler(UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionAlert); } // Handle notification messages after display notification is tapped by the user. - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler { NSDictionary *userInfo = response.notification.request.content.userInfo; if (userInfo[kGCMMessageIDKey]) { NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]); } // With swizzling disabled you must let Messaging know about the message, for Analytics // [[FIRMessaging messaging] appDidReceiveMessage:userInfo]; // Print full message. NSLog(@"%@", userInfo); completionHandler(); }
Wenn Sie Ihren Benachrichtigungen benutzerdefinierte Aktionen hinzufügen möchten, legen Sie den Parameter click_action
in der Benachrichtigungsnutzlast fest. Verwenden Sie den Wert, den Sie für den category
in der APNs-Nutzlast verwenden würden. Benutzerdefinierte Aktionen müssen registriert werden, bevor sie verwendet werden können. Weitere Informationen finden Sie im Programmierhandbuch für lokale und Remote-Benachrichtigungen von Apple.
Einblicke in die Nachrichtenübermittlung an Ihre App erhalten Sie im FCM-Berichts-Dashboard , das die Anzahl der auf Apple- und Android-Geräten gesendeten und geöffneten Nachrichten sowie Daten zu „Impressionen“ (von Benutzern gesehene Benachrichtigungen) für Android-Apps aufzeichnet.
Behandeln Sie stille Push-Benachrichtigungen
Beim Senden von Nachrichten mit dem Schlüssel „ content_available
(entspricht dem Schlüssel content-available
von APNs) werden die Nachrichten als stille Benachrichtigungen zugestellt, wodurch Ihre App im Hintergrund für Aufgaben wie Hintergrunddatenaktualisierung aktiviert wird. Im Gegensatz zu Vordergrundbenachrichtigungen müssen diese Benachrichtigungen über die application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
Methode.
Implementieren Sie application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
wie gezeigt:
Schnell
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) async -> UIBackgroundFetchResult { // If you are receiving a notification message while your app is in the background, // this callback will not be fired till the user taps on the notification launching the application. // TODO: Handle data of notification // With swizzling disabled you must let Messaging know about the message, for Analytics // Messaging.messaging().appDidReceiveMessage(userInfo) // Print message ID. if let messageID = userInfo[gcmMessageIDKey] { print("Message ID: \(messageID)") } // Print full message. print(userInfo) return UIBackgroundFetchResult.newData }
Ziel c
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { // If you are receiving a notification message while your app is in the background, // this callback will not be fired till the user taps on the notification launching the application. // TODO: Handle data of notification // With swizzling disabled you must let Messaging know about the message, for Analytics // [[FIRMessaging messaging] appDidReceiveMessage:userInfo]; // ... // Print full message. NSLog(@"%@", userInfo); completionHandler(UIBackgroundFetchResultNewData); }
Apple-Plattformen garantieren nicht die Zustellung von Hintergrundbenachrichtigungen. Weitere Informationen zu Bedingungen, die dazu führen können, dass Hintergrundbenachrichtigungen fehlschlagen, finden Sie in den Dokumenten von Apple zum Übertragen von Hintergrundaktualisierungen an Ihre App .
Interpretieren der Nutzlast der Benachrichtigungsnachricht
Die Nutzlast von Benachrichtigungsnachrichten ist ein Wörterbuch mit Schlüsseln und Werten. Über APNs gesendete Benachrichtigungsnachrichten folgen dem APNs-Nutzlastformat wie folgt:
{ "aps" : { "alert" : { "body" : "great match!", "title" : "Portugal vs. Denmark", }, "badge" : 1, }, "customKey" : "customValue" }
Behandeln Sie Nachrichten mit deaktiviertem Methoden-Swizzling
Wenn Sie die App-Delegatenklasse Ihrer App den Eigenschaften UNUserNotificationCenter
und Messaging
Delegaten zuweisen, wechselt FCM standardmäßig Ihre App-Delegatenklasse, um Ihr FCM-Token automatisch mit dem APNs-Token des Geräts zu verknüpfen und benachrichtigungsempfangene Ereignisse an Analytics weiterzuleiten. Wenn Sie das Methoden-Swizzling explizit deaktivieren, wenn Sie eine SwiftUI-App erstellen oder wenn Sie eine separate Klasse für einen der Delegaten verwenden, müssen Sie beide Aufgaben manuell ausführen.
Um das FCM-Token mit dem APNs-Token des Geräts zu verknüpfen, übergeben Sie das APNs-Token über die Eigenschaft apnsToken
an die Messaging
Klasse im Token-Aktualisierungshandler Ihres App-Delegierten.
Schnell
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken; }
Ziel c
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
Um Benachrichtigungsempfangsinformationen an Analytics zu übergeben, verwenden Sie die Methode appDidReceiveMessage(_:)
.
Schnell
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { let userInfo = notification.request.content.userInfo Messaging.messaging().appDidReceiveMessage(userInfo) // Change this to your preferred presentation option completionHandler([[.alert, .sound]]) } func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { let userInfo = response.notification.request.content.userInfo Messaging.messaging().appDidReceiveMessage(userInfo) completionHandler() } func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { Messaging.messaging().appDidReceiveMessage(userInfo) completionHandler(.noData) }
Ziel c
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler { NSDictionary *userInfo = notification.request.content.userInfo; [[FIRMessaging messaging] appDidReceiveMessage:userInfo]; // Change this to your preferred presentation option completionHandler(UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionAlert); } - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler { NSDictionary *userInfo = response.notification.request.content.userInfo; [[FIRMessaging messaging] appDidReceiveMessage:userInfo]; completionHandler(); } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler { [[FIRMessaging messaging] appDidReceiveMessage:userInfo]; completionHandler(UIBackgroundFetchResultNoData); }