เมื่อติดตั้งแอปไคลเอนต์ของคุณบนอุปกรณ์แล้ว แอปจะสามารถรับข้อความผ่านอินเทอร์เฟซ FCM APN คุณสามารถเริ่มส่งการแจ้งเตือนไปยังกลุ่มผู้ใช้ได้ทันทีด้วย ตัวเขียนการแจ้งเตือน หรือข้อความที่สร้างขึ้นบนเซิร์ฟเวอร์แอปพลิเคชันของคุณ
จัดการการแจ้งเตือน
FCM ส่งข้อความทั้งหมดที่กำหนดเป้าหมายไปยังแอป Apple ผ่าน APN หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการรับการแจ้งเตือน APN ผ่าน UNUserNotificationCenter โปรดดูเอกสารประกอบของ Apple เกี่ยวกับ การจัดการการแจ้งเตือนและการดำเนินการที่เกี่ยวข้องกับการแจ้งเตือน
คุณต้องตั้ง ค่าผู้รับมอบสิทธิ์ UNUserNotificationCenter และใช้วิธีการมอบหมายที่เหมาะสมเพื่อรับการแจ้งเตือนที่แสดงจาก FCM
สวิฟต์
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) } }
วัตถุประสงค์-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(); }
หากคุณต้องการเพิ่มการดำเนินการที่กำหนดเองในการแจ้งเตือน ให้ตั้งค่าพารามิเตอร์ click_action
ใน เพย์โหลดการแจ้งเตือน ใช้ค่าที่คุณจะใช้สำหรับคีย์ category
ในเพย์โหลด APN ต้องลงทะเบียนการดำเนินการแบบกำหนดเองก่อนจึงจะสามารถใช้งาน สำหรับข้อมูลเพิ่มเติม โปรดดูที่ คู่มือการตั้งโปรแกรมการแจ้งเตือนในพื้นที่และระยะไกล ของ Apple
สำหรับข้อมูลเชิงลึกเกี่ยวกับการส่งข้อความไปยังแอปของคุณ โปรดดูแด ชบอร์ดการรายงาน FCM ซึ่งบันทึกจำนวนข้อความที่ส่งและเปิดบนอุปกรณ์ Apple และ Android พร้อมด้วยข้อมูลสำหรับ "การแสดงผล" (การแจ้งเตือนที่ผู้ใช้เห็น) สำหรับแอป Android
จัดการการแจ้งเตือนแบบเงียบ
เมื่อส่งข้อความด้วยคีย์ content_available
(เทียบเท่ากับ content-available
ของ APN ข้อความจะถูกส่งเป็นการแจ้งเตือนแบบเงียบ ปลุกแอปของคุณในพื้นหลังสำหรับงานต่างๆ เช่น การรีเฟรชข้อมูลเบื้องหลัง ซึ่งแตกต่างจากการแจ้งเตือนเบื้องหน้า การแจ้งเตือนเหล่านี้ต้องได้รับการจัดการผ่าน application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
วิธีการ
ใช้ application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
ดังที่แสดง:
สวิฟต์
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 }
วัตถุประสงค์-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 ไม่รับประกันการส่งการแจ้งเตือนเบื้องหลัง หากต้องการเรียนรู้เกี่ยวกับเงื่อนไขที่อาจทำให้การแจ้งเตือนในพื้นหลังล้มเหลว โปรดดูเอกสารของ Apple เกี่ยวกับ การพุชการอัปเดตเบื้องหลังไปยังแอปของคุณ
การตีความเพย์โหลดข้อความแจ้งเตือน
เพย์โหลดของข้อความแจ้งเตือนคือพจนานุกรมของคีย์และค่าต่างๆ ข้อความแจ้งเตือนที่ส่งผ่าน APN เป็นไปตามรูปแบบเพย์โหลดของ APN ดังนี้:
{ "aps" : { "alert" : { "body" : "great match!", "title" : "Portugal vs. Denmark", }, "badge" : 1, }, "customKey" : "customValue" }
จัดการข้อความโดยปิดใช้งานวิธีการหมุน
ตามค่าเริ่มต้น หากคุณกำหนดคลาสผู้รับมอบสิทธิ์แอปของแอปให้กับคุณสมบัติผู้รับมอบสิทธิ์ UNUserNotificationCenter
และ Messaging
FCM จะหมุนคลาสผู้รับมอบสิทธิ์แอปของคุณเพื่อเชื่อมโยงโทเค็น FCM ของคุณกับโทเค็น APN ของอุปกรณ์โดยอัตโนมัติ และส่งเหตุการณ์ที่ได้รับการแจ้งเตือนไปยัง Analytics หากคุณปิดการใช้งานเมธอด swizzling อย่างชัดเจน หากคุณกำลังสร้างแอป SwiftUI หรือหากคุณใช้คลาสแยกต่างหากสำหรับผู้รับมอบสิทธิ์ คุณจะต้องดำเนินการทั้งสองอย่างด้วยตนเอง
ในการเชื่อมโยงโทเค็น FCM กับโทเค็น APN ของอุปกรณ์ ให้ส่งโทเค็น APNs ไปยังคลาส Messaging
ใน ตัวจัดการการรีเฟรชโทเค็นของผู้รับ มอบสิทธิ์แอปของคุณผ่าน คุณสมบัติ apnsToken
สวิฟต์
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken; }
วัตถุประสงค์-C
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
หากต้องการส่งข้อมูลการรับการแจ้งเตือนไปยัง Analytics ให้ใช้ เมธอด appDidReceiveMessage(_:)
สวิฟต์
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) }
วัตถุประสงค์-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); }