Sau khi được cài đặt trên một thiết bị, ứng dụng khách của bạn có thể nhận tin nhắn qua giao diện APN FCM. Bạn có thể bắt đầu ngay gửi thông báo đến phân khúc người dùng bằng Trình soạn thông báo hoặc thông báo được tạo dựa trên máy chủ ứng dụng.
Xử lý thông báo cảnh báo
FCM cung cấp tất cả thông báo nhắm đến các ứng dụng của Apple thông qua APN. Để tìm hiểu thêm về cách nhận thông báo APN qua UNUserNotificationCenter, hãy xem tài liệu về Xử lý thông báo và các hành động liên quan đến thông báo.
Bạn phải đặt Người được uỷ quyền của UNUserNotificationCenter và triển khai các phương thức uỷ quyền thích hợp để nhận thông báo hiển thị từ FCM.
Swift
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) } }
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(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(); }
Nếu bạn muốn thêm thao tác tuỳ chỉnh vào thông báo, hãy đặt
Tham số click_action
trong
tải trọng thông báo.
Sử dụng giá trị mà bạn sẽ dùng cho
Khoá category
trong tải trọng APN. Bạn phải đăng ký hành động tuỳ chỉnh trước
để sử dụng. Để biết thêm thông tin, hãy xem
Hướng dẫn lập trình thông báo cục bộ và thông báo từ xa.
Để biết thông tin chi tiết về cách gửi thư đến ứng dụng của bạn, hãy xem Trang tổng quan báo cáo FCM, nơi ghi lại các số thư được gửi và mở trên thiết bị Apple và Android, cùng với dữ liệu về "lượt hiển thị" (thông báo mà người dùng nhìn thấy) đối với ứng dụng Android.
Xử lý thông báo đẩy im lặng
Khi gửi thông báo bằng khoá content-available
(tương đương với khoá của APN
content-available
, tin nhắn sẽ được gửi dưới dạng thông báo im lặng,
đánh thức ứng dụng của bạn ở chế độ nền để thực hiện các tác vụ như làm mới dữ liệu nền.
Không giống như thông báo trên nền trước, những thông báo này phải được xử lý thông qua
application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
.
Triển khai application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
như được hiển thị:
Swift
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 }
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 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); }
Các nền tảng của Apple không đảm bảo việc gửi các thông báo trong nền. Để tìm hiểu về các điều kiện có thể khiến thông báo trong nền không hoạt động, hãy xem tài liệu của Apple trên Đẩy cập nhật ở chế độ nền cho ứng dụng.
Diễn giải tải trọng tin nhắn thông báo
Tải trọng của thông báo là từ điển của khoá và giá trị. Các tin nhắn thông báo gửi qua APN sẽ đi theo APN tải trọng như sau:
{ "aps" : { "alert" : { "body" : "great match!", "title" : "Portugal vs. Denmark", }, "badge" : 1, }, "customKey" : "customValue" }
Xử lý thông báo khi tắt phương thức xoáy
Theo mặc định, nếu bạn chỉ định lớp uỷ quyền ứng dụng của ứng dụng cho
Các thuộc tính uỷ quyền UNUserNotificationCenter
và Messaging
, FCM
sẽ tạo nhanh lớp uỷ quyền ứng dụng của bạn để tự động liên kết
Mã thông báo FCM có mã thông báo APN của thiết bị và truyền thông báo đã nhận được
sự kiện đến Analytics. Nếu bạn rõ ràng vô hiệu hoá phương thức xoáy, nếu bạn
tạo một ứng dụng SwiftUI hoặc nếu bạn sử dụng một lớp riêng cho một trong hai lớp uỷ quyền, bạn
cần thực hiện cả hai tác vụ này theo cách thủ công.
Để liên kết mã thông báo FCM với mã thông báo APN của thiết bị, hãy chuyển APN
mã thông báo cho lớp Messaging
trong lớp uỷ quyền của ứng dụng
trình xử lý làm mới mã thông báo
qua
thuộc tính apnsToken
.
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; }
Để chuyển thông tin về biên nhận thông báo đến Analytics, hãy sử dụng
Phương thức appDidReceiveMessage(_:)
.
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); }