| Plattform auswählen : | iOS+ Android Web Flutter Unity C++ |
Sobald Ihre Client-App auf einem Gerät installiert ist, kann sie Nachrichten über die FCM APNs-Schnittstelle empfangen. Sie können sofort Benachrichtigungen an Nutzersegmente mit dem Benachrichtigungs-Composer in der Firebase Konsole oder Nachrichten senden, die auf Ihrem Anwendungsserver erstellt wurden.
Warnmeldungen verarbeiten
FCM liefert alle Nachrichten, die auf Apple-Apps ausgerichtet sind, über APNs. Weitere Informationen zum Empfangen von APNs-Benachrichtigungen mit UNUserNotificationCenter finden Sie in der Apple-Dokumentation unter Handling Notifications and Notification-Related Actions.
Sie müssen den UNUserNotificationCenter-Delegaten festlegen und die entsprechenden Delegatenmethoden implementieren, um Benachrichtigungen von FCMzu erhalten.
Swift
// 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
// Note: UNNotificationPresentationOptions.alert has been deprecated.
return [.list, .banner, .sound]
}
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse) async {
let userInfo = response.notification.request.content.userInfo
// ...
// Print full message.
print(userInfo)
}
Objective-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(UNNotificationPresentationOptionList |
UNNotificationPresentationOptionBanner |
UNNotificationPresentationOptionSound);
}
- (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.
}
- (void)logFCMToken {
NSString *fcmToken = [FIRMessaging messaging].FCMToken;
NSLog(@"Local FCM registration token: %@", fcmToken);
NSString* displayToken = [NSString stringWithFormat:@"Logged FCM token: %@", fcmToken];
[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
if (error != nil) {
NSLog(@"Error fetching the remote FCM registration token: %@", error);
} else {
NSLog(@"Remote FCM registration token: %@", token);
NSString* message =
[NSString stringWithFormat:@"FCM registration token: %@", token];
// display message
NSLog(@"%@", message);
}
}];
NSLog(@"%@", displayToken);
}
- (void)subsribeToTopic {
[[FIRMessaging messaging] subscribeToTopic:@"weather"
completion:^(NSError * _Nullable error) {
NSLog(@"Subscribed to weather topic");
}];
}
@end
Wenn Sie Ihren Benachrichtigungen benutzerdefinierte Aktionen hinzufügen möchten, legen Sie den click_action
Parameter in der
Benachrichtigungsnutzlast fest.
Verwenden Sie den Wert, den Sie für den Schlüssel 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
Local and Remote Notification Programming Guide von Apple
.
Informationen zur Nachrichtenübermittlung an Ihre App finden Sie auf dem DevOps & Engagement > Messaging > Berichte Dashboard in der Firebase Konsole. Auf diesem Dashboard wird die Anzahl der Nachrichten erfasst, die auf Apple- und Android-Geräten gesendet und geöffnet wurden, sowie Daten zu Impressionen (Benachrichtigungen, die von Nutzern gesehen wurden) für Android-Apps.
Stille Push-Benachrichtigungen verarbeiten
Wenn Sie Nachrichten mit dem Schlüssel content-available (entspricht content-available von APNs) senden, werden die Nachrichten als stille Benachrichtigungen zugestellt. Ihre App wird im Hintergrund für Aufgaben wie die Aktualisierung von Hintergrunddaten aktiviert.
Im Gegensatz zu Vordergrundbenachrichtigungen müssen diese Benachrichtigungen mit der
application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
Methode verarbeitet werden.
Implementieren Sie application(_:didReceiveRemoteNotification:fetchCompletionHandler:) wie unten gezeigt:
Swift
@MainActor
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 full message.
print(userInfo)
print("Call exportDeliveryMetricsToBigQuery() from AppDelegate")
Messaging.serviceExtension().exportDeliveryMetricsToBigQuery(withMessageInfo: userInfo)
return UIBackgroundFetchResult.newData
}
Objective-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 until 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 nicht zugestellt werden, finden Sie in der Apple-Dokumentation unter Pushing Background Updates to Your App.
Nutzlast von Benachrichtigungen interpretieren
Die Nutzlast von Benachrichtigungen ist ein Dictionary mit Schlüsseln und Werten. Benachrichtigungen, die über APNs gesendet werden, haben das folgende APNs-Nutzlastformat:
{
"aps" : {
"alert" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
},
"badge" : 1,
},
"customKey" : "customValue"
}
Nachrichten verarbeiten, bei denen Method Swizzling deaktiviert ist
Wenn Sie die App-Delegatenklasse Ihrer App standardmäßig den
UNUserNotificationCenter und Messaging Delegateneigenschaften zuweisen, FCM
swizzelt FCM die App-Delegatenklasse, um Ihr
FCM Token automatisch mit dem APNs-Token des Geräts zu verknüpfen und Ereignisse zu erhaltenen
Benachrichtigungen an Analytics zu übergeben. Wenn Sie Method Swizzling explizit deaktivieren, eine SwiftUI-App erstellen oder eine separate Klasse für einen der beiden 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 an die Messaging Klasse im Token-Aktualisierungshandler des App-Delegaten über die apnsToken Eigenschaft.
Swift
func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Messaging.messaging().apnsToken = deviceToken;
}
Objective-C
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[FIRMessaging messaging].APNSToken = deviceToken;
}
Verwenden Sie die
appDidReceiveMessage(_:) method, um Informationen zum Empfang von Benachrichtigungen an Analytics zu übergeben.
Swift
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)
}
Objective-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);
}