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 Senden von Benachrichtigungen an Benutzersegmente mit dem Benachrichtigungs-Composer oder auf Ihrem Anwendungsserver erstellten Nachrichten beginnen.
Behandeln Sie Warnmeldungen
FCM übermittelt alle Nachrichten, die auf Apple-Apps abzielen, über APNs. Weitere Informationen zum Empfangen von APNs-Benachrichtigungen über UNUserNotificationCenter finden Sie in der Apple-Dokumentation zum Umgang mit Benachrichtigungen und Benachrichtigungsbezogenen Aktionen .
Sie müssen den UNUserNotificationCenter-Delegaten festlegen und die entsprechenden Delegatmethoden 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 entfernte Benachrichtigungen von Apple.
Einen Einblick 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 aufzeichnet, zusammen mit Daten für „Impressionen“ (von Benutzern gesehene Benachrichtigungen) für Android-Apps.
Behandeln Sie stille Push-Benachrichtigungen
Beim Senden von Nachrichten mit dem Schlüssel content_available
(entspricht content-available
von APNs) werden die Nachrichten als stille Benachrichtigungen zugestellt, wodurch Ihre App für Aufgaben wie die Aktualisierung von Hintergrunddaten im Hintergrund aktiviert wird. Im Gegensatz zu Vordergrundbenachrichtigungen müssen diese Benachrichtigungen über die application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
Methode.
Implementieren 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. Informationen zu Bedingungen, die dazu führen können, dass Hintergrundbenachrichtigungen fehlschlagen, finden Sie in der Apple-Dokumentation zum Pushen von Hintergrundaktualisierungen an Ihre App .
Interpretieren der Nutzlast der Benachrichtigungsnachricht
Die Nutzlast von Benachrichtigungsmeldungen ist ein Wörterbuch aus Schlüsseln und Werten. Benachrichtigungsmeldungen, die über APNs gesendet werden, folgen dem APNs-Nutzdatenformat wie folgt:
{ "aps" : { "alert" : { "body" : "great match!", "title" : "Portugal vs. Denmark", }, "badge" : 1, }, "customKey" : "customValue" }
Behandeln Sie Nachrichten mit deaktiviertem Methodenwechsel
Wenn Sie die App-Delegatklasse Ihrer App den UNUserNotificationCenter
und Messaging
-Delegateigenschaften zuweisen, swizzelt FCM standardmäßig Ihre App-Delegatklasse, um Ihr FCM-Token automatisch mit dem APNs-Token des Geräts zu verknüpfen und Benachrichtigungsempfangsereignisse an Analytics weiterzuleiten. Wenn Sie 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 diese beiden Aufgaben manuell ausführen.
Um das FCM-Token mit dem Geräte-APNs-Token zu verknüpfen, übergeben Sie das APNs-Token an die Messaging
-Klasse im Token -Aktualisierungshandler Ihres App-Delegierten über die Eigenschaft apnsToken
.
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; }
Verwenden Sie die Methode appDidReceiveMessage(_:)
, um Informationen zum Erhalt von Benachrichtigungen an Analytics zu übergeben.
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); }