클라이언트 앱이 기기에 설치되면 FCM APNs 인터페이스. 즉시 시작할 수 있습니다. 사용자 세그먼트로 알림을 전송하는 알림 작성기 또는 애플리케이션 서버입니다.
알림 처리
FCM는 APN을 통해 Apple 앱을 타겟팅하는 모든 메시지를 전송합니다. 자세히 알아보기 UNUserNotificationCenter를 통해 APN 알림을 수신하는 방법은 Apple 자세한 내용은 알림 및 알림 관련 작업 처리
먼저 UNUserNotificationCenter 위임 디스플레이 알림을 수신하는 적절한 대리자 메서드를 구현합니다. 최저가 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(); }
알림에 커스텀 작업을 추가하려면 알림 페이로드에서 click_action
매개변수를 설정하세요.
이때 APN 페이로드의 category
키에 사용할 값을 사용하세요. 커스텀 작업은 등록한 후 사용할 수 있습니다. 자세한 내용은 Apple의 Local and Remote Notification Programming Guide(로컬 및 원격 알림 프로그래밍 가이드)를 참조하세요.
앱으로의 메시지 전송에 대한 통계는 다음을 참조하세요. <ph type="x-smartling-placeholder"></ph> FCM 보고 대시보드에서 Apple 및 Android 기기에서 주고받은 메일 수와 '노출수' 데이터 (사용자에게 표시된 알림)을 제공합니다.
자동 푸시 알림 처리
content-available
키 (APN의 키와 같음)를 사용하여 메시지를 전송하는 경우
content-available
, 메시지가 무음 알림으로 전달됩니다.
백그라운드 데이터 새로고침과 같은 작업을 위해 백그라운드에서 앱의 절전 모드를 해제합니다.
포그라운드 알림과 달리 이러한 알림은 application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
메서드를 통해 처리되어야 합니다.
다음과 같이 application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
을 구현합니다.
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); }
Apple 플랫폼은 백그라운드 알림의 전송을 보장하지 않습니다. 백그라운드 알림이 실패할 수 있는 조건에 대한 자세한 내용은 Apple의 Pushing Background Updates to Your App(앱에 백그라운드 업데이트 푸시) 문서를 참조하세요.
알림 메시지 페이로드 해석
알림 메시지의 페이로드는 키와 값으로 구성된 사전입니다. APN을 통해 전송된 알림 메시지는 다음과 같이 APN 페이로드 형식을 따릅니다.
{ "aps" : { "alert" : { "body" : "great match!", "title" : "Portugal vs. Denmark", }, "badge" : 1, }, "customKey" : "customValue" }
메서드 재구성이 사용 중지된 경우의 메시지 처리
기본적으로 앱의 앱 대리자 클래스를
UNUserNotificationCenter
및 Messaging
위임 속성, FCM
앱 대리자 클래스를 재구성하여
FCM 토큰(기기의 APNs 토큰 포함) 및 notification-received 전달
이벤트를 Analytics로 전송합니다. 메서드 재구성을 명시적으로 중지하거나 SwiftUI 앱을 빌드하거나 둘 중 하나라도 대리자에 대해 별도의 클래스를 사용하는 경우 두 작업을 모두 수동으로 수행해야 합니다.
FCM 토큰을 기기 APN 토큰과 연결하려면 APN을 전달합니다.
앱 대리자의 Messaging
클래스에 대한 토큰
토큰 새로고침 핸들러
을(를) 통해
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; }
Analytics에 알림 영수증 정보를 전달하려면 다음을 사용합니다.
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); }