Apple 클라이언트 앱의 경우 Firebase Cloud Messaging APNs 인터페이스를 통해 최대 4000바이트의 알림 및 데이터 페이로드를 수신할 수 있습니다.
Objective-C 또는 Swift에서 클라이언트 코드를 작성하려면 FIRMessaging API 를 사용하는 것이 좋습니다. 빠른 시작 예제 는 두 언어에 대한 샘플 코드를 제공합니다.
Firebase Cloud Messaging의 메서드 재구성
FCM SDK 는 APNs 토큰을 FCM 등록 토큰에 매핑 하고 다운스트림 메시지 콜백 처리 중에 분석 데이터를 캡처하는 두 가지 주요 영역에서 메서드 재구성을 수행합니다. 재구성을 사용하지 않으려는 개발자는 앱의 Info.plist 파일에 FirebaseAppDelegateProxyEnabled
플래그를 추가하고 이를 NO(부울 값)로 설정하여 재구성을 비활성화할 수 있습니다. 가이드의 관련 영역에서는 메서드 재구성이 활성화된 경우와 그렇지 않은 경우 모두 코드 예제를 제공합니다.
Apple 프로젝트에 Firebase 추가
아직 추가하지 않았다면 Firebase를 Apple 프로젝트 에 추가합니다.
APNs 인증 키 업로드
APNs 인증 키를 Firebase에 업로드합니다. APNs 인증 키가 아직 없는 경우 Apple Developer Member Center 에서 하나 만드십시오.
Firebase 콘솔의 프로젝트 내에서 기어 아이콘을 선택하고 프로젝트 설정 을 선택한 다음 클라우드 메시징 탭을 선택합니다.
iOS 앱 구성 아래의 APNs 인증 키 에서 업로드 버튼을 클릭합니다.
키를 저장한 위치를 찾아 선택하고 열기 를 클릭합니다. 키의 키 ID를 추가하고( Apple Developer Member Center 에서 사용 가능) 업로드 를 클릭합니다.
원격 알림 등록
시작 시 또는 애플리케이션 흐름의 원하는 지점에서 원격 알림을 위해 앱을 등록합니다. 다음과 같이registerForRemoteNotifications
를 호출합니다.빠른
UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) application.registerForRemoteNotifications()
목표-C
[UNUserNotificationCenter currentNotificationCenter].delegate = self; UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { // ... }]; [application registerForRemoteNotifications];
등록 토큰에 액세스
기본적으로 FCM SDK는 앱 실행 시 클라이언트 앱 인스턴스에 대한 등록 토큰을 생성합니다. APN 장치 토큰과 마찬가지로 이 토큰을 사용하면 앱의 특정 인스턴스에 대상 알림을 보낼 수 있습니다.
Apple 플랫폼이 일반적으로 앱 시작 시 APNs 장치 토큰을 제공하는 것과 같은 방식으로 FCM은 FIRMessagingDelegate
의 messaging:didReceiveRegistrationToken:
메서드를 통해 등록 토큰을 제공합니다. FCM SDK는 초기 앱 실행 중에 그리고 토큰이 업데이트되거나 무효화될 때마다 신규 또는 기존 토큰을 검색합니다. 모든 경우에 FCM SDK는 유효한 토큰을 사용하여 messaging:didReceiveRegistrationToken:
을 호출합니다.
등록 토큰은 다음과 같은 경우에 변경될 수 있습니다.
- 앱이 새 기기에서 복원됩니다.
- 사용자가 앱을 제거/재설치합니다.
- 사용자가 앱 데이터를 지웁니다.
메시징 대리자 설정
등록 토큰을 받으려면 메시징 대리자 프로토콜을 구현하고 [FIRApp configure]
을 호출한 후 FIRMessaging
의 delegate
속성을 설정합니다. 예를 들어 애플리케이션 델리게이트가 메시징 델리게이트 프로토콜을 준수하는 경우 application:didFinishLaunchingWithOptions:
의 델리게이트를 자체로 설정할 수 있습니다.
빠른
Messaging.messaging().delegate = self
목표-C
[FIRMessaging messaging].delegate = self;
현재 등록 토큰 가져오기
등록 토큰은 messaging:didReceiveRegistrationToken:
메서드를 통해 전달됩니다. 이 메서드는 일반적으로 등록 토큰으로 앱 시작당 한 번 호출됩니다. 이 메서드가 호출되면 다음을 수행하기에 이상적인 시간입니다.
- 등록 토큰이 새로운 것이라면 애플리케이션 서버로 보내십시오.
- 주제에 대한 등록 토큰을 구독하십시오. 신규 구독 또는 사용자가 앱을 다시 설치한 경우에만 필요합니다.
token(completion:) 을 사용하여 토큰을 직접 검색할 수 있습니다. 어떤 식으로든 토큰 검색에 실패한 경우 null이 아닌 오류가 제공됩니다.
빠른
Messaging.messaging().token { token, error in if let error = error { print("Error fetching FCM registration token: \(error)") } else if let token = token { print("FCM registration token: \(token)") self.fcmRegTokenMessage.text = "Remote FCM registration token: \(token)" } }
목표-C
[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) { if (error != nil) { NSLog(@"Error getting FCM registration token: %@", error); } else { NSLog(@"FCM registration token: %@", token); self.fcmRegTokenMessage.text = token; } }];
토큰을 저장하는 대신 언제든지 이 방법을 사용하여 토큰에 액세스할 수 있습니다.
토큰 갱신 모니터링
토큰이 업데이트될 때마다 알림을 받으려면 메시징 대리자 프로토콜을 준수하는 대리자를 제공하십시오. 다음 예제에서는 대리자를 등록하고 적절한 대리자 메서드를 추가합니다.
빠른
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { print("Firebase registration token: \(String(describing: fcmToken))") let dataDict: [String: String] = ["token": fcmToken ?? ""] NotificationCenter.default.post( name: Notification.Name("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. }
목표-C
- (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. }
또는 대리자 메서드를 제공하는 대신 kFIRMessagingRegistrationTokenRefreshNotification
이라는 NSNotification
을 수신할 수 있습니다. 토큰 속성에는 항상 현재 토큰 값이 있습니다.
Swizzling 비활성화됨: APNs 토큰 및 등록 토큰 매핑
메서드 재구성을 비활성화했거나 SwiftUI 앱을 빌드하는 경우 APNs 토큰을 FCM 등록 토큰에 명시적으로 매핑해야 합니다. application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
메서드를 구현하여 APNs 토큰을 검색한 다음 Messaging
의 apnsToken
속성을 설정합니다.
빠른
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
목표-C
// With "FirebaseAppDelegateProxyEnabled": NO - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
FCM 등록 토큰이 생성된 후 재구성이 활성화된 경우와 동일한 방법을 사용하여 액세스하고 새로 고침 이벤트를 수신할 수 있습니다.
자동 초기화 방지
FCM 등록 토큰이 생성되면 라이브러리는 식별자와 구성 데이터를 Firebase에 업로드합니다. 먼저 사용자로부터 명시적 옵트인을 받으려면 FCM을 비활성화하여 구성 시 토큰 생성을 방지할 수 있습니다. 이렇게 하려면 Info.plist
( GoogleService-Info.plist
아님)에 메타데이터 값을 추가합니다.
FirebaseMessagingAutoInitEnabled = NO
FCM을 다시 활성화하려면 런타임 호출을 할 수 있습니다.
빠른
Messaging.messaging().autoInitEnabled = true
목표-C
[FIRMessaging messaging].autoInitEnabled = YES;
이 값은 일단 설정되면 앱을 다시 시작해도 지속됩니다.
다음 단계
Apple 클라이언트를 설정하고 나면 앱에 메시지 처리 및 기타 고급 동작을 추가할 준비가 된 것입니다. 자세한 내용은 다음 가이드를 참조하세요.