FCM을 시작하기 위해 앱이 백그라운드 상태일 때 알림 작성기에서 개발 기기로 테스트 알림 메시지를 전송하는 가장 단순한 사용 사례부터 살펴보겠습니다. 이 페이지에는 설정부터 검증까지 이 작업을 수행하는 모든 단계가 나와 있으므로 FCM용 Apple 클라이언트 앱을 설정했으면 일부 단계는 이미 완료된 상태일 수 있습니다.
Apple 프로젝트에 Firebase 추가
이 섹션에서 설명하는 작업은 앱에 다른 Firebase 기능을 이미 사용 설정한 경우 이미 완료된 상태일 수 있습니다. FCM에만 해당하는 작업으로는 APNs 인증 키 업로드와 원격 알림 등록이 있습니다.
기본 요건
다음을 설치합니다.
- Xcode 14.1 이상
프로젝트가 다음 요구사항을 충족하는지 확인합니다.
- 프로젝트에서 다음 플랫폼 버전 이상을 타겟팅해야 합니다.
- iOS 11
- macOS 10.13
- tvOS 12
- watchOS 6
- 프로젝트에서 다음 플랫폼 버전 이상을 타겟팅해야 합니다.
실제 Apple 기기를 설정하여 앱을 실행하고 다음 작업을 완료합니다.
- Apple 개발자 계정의 Apple 푸시 알림 인증 키를 가져옵니다.
- XCode의 App(앱) > Capabilities(기능)에서 푸시 알림을 사용 설정합니다.
- Google 계정을 사용하여 Firebase에 로그인합니다.
Xcode 프로젝트가 준비되지 않았지만 Firebase 제품을 사용해 보고자 하는 경우 빠른 시작 샘플 중 하나를 다운로드하세요.
Firebase 프로젝트 만들기
Firebase를 Apple 앱에 추가하려면 먼저 앱에 연결할 Firebase 프로젝트를 만드세요. Firebase 프로젝트에 대한 자세한 내용은 Firebase 프로젝트 이해를 참조하세요.
Firebase에 앱 등록
Apple 앱에서 Firebase를 사용하려면 Firebase 프로젝트에 앱을 등록해야 합니다. 앱 등록이란 보통 프로젝트에 앱을 '추가'하는 것을 의미합니다.
Firebase Console로 이동합니다.
프로젝트 개요 페이지 중앙에 있는 iOS+ 아이콘을 클릭하여 설정 워크플로를 시작합니다.
Firebase 프로젝트에 앱을 이미 추가한 경우 앱 추가를 클릭하여 플랫폼 옵션을 표시합니다.
번들 ID 필드에 앱의 번들 ID를 입력합니다.
(선택사항) 다른 앱 정보(앱 닉네임 및 App Store ID)를 입력합니다.
앱 등록을 클릭합니다.
Firebase 구성 파일 추가
GoogleService-Info.plist 다운로드를 클릭하여 Firebase Apple 플랫폼 구성 파일(
GoogleService-Info.plist
)을 가져옵니다.구성 파일을 Xcode 프로젝트의 루트로 이동합니다. 메시지가 표시되면 모든 대상에 구성 파일을 추가하도록 선택합니다.
프로젝트에 번들 ID가 여러 개 있으면 각 앱에 자체 GoogleService-Info.plist
파일이 포함되도록 각 번들 ID를 Firebase Console에서 등록된 앱과 연결해야 합니다.
앱에 Firebase SDK 추가
Swift Package Manager를 사용해 Firebase 종속 항목을 설치하고 관리하세요.
- 앱 프로젝트를 연 상태로 Xcode에서 File(파일) > Add Packages(패키지 추가)로 이동합니다.
- 메시지가 표시되면 Firebase Apple 플랫폼 SDK 저장소를 추가합니다.
- Firebase 클라우드 메시징 라이브러리를 선택합니다.
- Firebase 클라우드 메시징 사용 환경을 최적화하려면 Firebase 프로젝트에서 Google 애널리틱스를 사용 설정하고 Google 애널리틱스용 Firebase SDK를 앱에 추가하는 것이 좋습니다. IDFA를 수집하지 않는 라이브러리 또는 IDFA를 수집하는 라이브러리를 선택할 수 있습니다.
- 완료되면 Xcode가 백그라운드에서 자동으로 종속 항목을 확인하고 다운로드하기 시작합니다.
https://github.com/firebase/firebase-ios-sdk
APNs 인증 키 업로드
Firebase에 APNs 인증 키를 업로드합니다. 아직 APNs 인증 키가 없다면 Apple Developer Member Center에서 만드세요.
-
Firebase Console 프로젝트 내에서 톱니바퀴 아이콘을 선택하고 프로젝트 설정을 선택한 다음 클라우드 메시징 탭을 선택합니다.
-
iOS 앱 구성의 APNs 인증 키에서 업로드 버튼을 클릭합니다.
-
키를 저장한 위치로 이동하여 키를 선택하고 열기를 클릭합니다. 해당하는 키 ID(Apple Developer Member Center에서 확인 가능)를 추가하고 업로드를 클릭합니다.
앱에서 Firebase 초기화
애플리케이션에 Firebase 초기화 코드를 추가해야 합니다. 다음과 같이 Firebase 모듈을 가져오고 공유 인스턴스를 구성합니다.
UIApplicationDelegate
의FirebaseCore
모듈과 앱 대리자가 사용하는 다른 Firebase 모듈을 가져옵니다. 예를 들어 Cloud Firestore와 인증을 사용하려면 다음과 같이 가져옵니다.SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- 앱 대리자의
application(_:didFinishLaunchingWithOptions:)
메서드에서FirebaseApp
공유 인스턴스를 구성합니다.SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- SwiftUI를 사용하는 경우 앱 대리자를 만들고
UIApplicationDelegateAdaptor
또는NSApplicationDelegateAdaptor
를 통해App
구조체에 연결해야 합니다. 앱 대리자 재구성도 중지해야 합니다. 자세한 내용은 SwiftUI 안내를 참조하세요.SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
원격 알림 등록
애플리케이션이 시작될 때 또는 적절한 시점에 원격 알림에 앱을 등록합니다. 다음과 같이registerForRemoteNotifications
를 호출합니다.
Swift
UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) application.registerForRemoteNotifications()
Objective-C
[UNUserNotificationCenter currentNotificationCenter].delegate = self; UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { // ... }]; [application registerForRemoteNotifications];
등록 토큰 액세스
특정 기기로 메시지를 보내려면 기기의 등록 토큰을 알아야 합니다. 이 튜토리얼을 완료하려면 알림 작성기의 필드에 토큰을 입력해야 하므로 토큰을 가져온 후 복사하거나 안전하게 저장해야 합니다.
기본적으로 FCM SDK는 앱을 시작할 때 클라이언트 앱 인스턴스용 등록 토큰을 생성합니다. APNs 기기 토큰과 마찬가지로 이 토큰을 사용하여 타겟팅된 알림을 앱의 모든 특정 인스턴스로 전송할 수 있습니다.
Apple 플랫폼이 일반적으로 앱 시작 시 APNs 기기 토큰을 전달하는 것과 마찬가지로 FCM은 FIRMessagingDelegate
의 messaging:didReceiveRegistrationToken:
메서드를 통해 등록 토큰을 제공합니다.
FCM SDK는 최초 앱 시작 시 그리고 토큰이 업데이트되거나 무효화될 때마다 신규 또는 기존 토큰을 가져옵니다.
어떠한 경우든 FCM SDK는 유효한 토큰이 있는 messaging:didReceiveRegistrationToken:
을 호출합니다.
다음과 같은 경우에 등록 토큰이 변경될 수 있습니다.
- 새 기기에서 앱 복원
- 사용자가 앱 제거/재설치
- 사용자가 앱 데이터 삭제
메시지 대리자 설정
등록 토큰을 수신하려면 [FIRApp configure]
를 호출한 후 메시지 대리자 프로토콜을 구현하고 FIRMessaging
의 delegate
속성을 설정합니다.
예를 들어 애플리케이션 대리자가 메시지 대리자 프로토콜을 준수하는 경우 application:didFinishLaunchingWithOptions:
에서 대리자를 애플리케이션 대리자로 설정할 수 있습니다.
Swift
Messaging.messaging().delegate = self
Objective-C
[FIRMessaging messaging].delegate = self;
현재 등록 토큰 가져오기
등록 토큰은 messaging:didReceiveRegistrationToken:
메서드를 통해 전달됩니다. 일반적으로 앱 시작 시 등록 토큰을 사용하여 이 메서드를 한 번 호출합니다. 이 메서드가 호출되면 다음과 같은 작업을 할 수 있습니다.
- 새 등록 토큰이라면 애플리케이션 서버에 전송합니다.
- 등록 토큰을 주제에 구독 처리합니다. 이 작업은 신규 구독 또는 사용자의 앱 재설치 같은 상황에서만 필요합니다.
token(completion:)을 사용하여 직접 토큰을 가져올 수 있습니다. 어떤 방식으로든 토큰 가져오기에 실패할 경우 null이 아닌 오류가 제공됩니다.
Swift
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)" } }
Objective-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; } }];
언제든지 이 메서드를 사용하여 토큰을 저장하지 않고도 토큰에 액세스할 수 있습니다.
토큰 갱신 모니터링
토큰이 업데이트될 때마다 알림을 받으려면 메시지 대리자 프로토콜을 준수하는 대리자를 제공합니다. 다음은 대리자를 등록하고 적절한 대리자 메서드를 추가하는 예시입니다.
Swift
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. }
Objective-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
을 수신 대기할 수도 있습니다. 토큰 속성은 항상 현재 토큰 값을 갖습니다.
알림 메시지 전송
대상 기기에 앱을 설치하고 실행합니다. Apple 기기에서는 원격 알림을 수신할 수 있는 권한 요청을 수락해야 합니다.
앱을 기기에서 백그라운드 상태로 만듭니다.
Firebase Console에서 메시지 페이지를 엽니다.
첫 번째 메시지인 경우 첫 번째 캠페인 만들기를 선택합니다.
- Firebase 알림 메시지를 선택하고 만들기를 선택합니다.
그렇지 않으면 캠페인 탭에서 새 캠페인을 선택한 후 알림을 선택합니다.
메시지 본문을 입력합니다. 다른 모든 필드는 선택사항입니다.
오른쪽 창에서 테스트 메시지 전송을 선택합니다.
FCM 등록 토큰 추가 필드에 이 가이드의 앞선 섹션에서 가져온 등록 토큰을 입력합니다.
테스트를 선택합니다.
테스트를 선택하면 타겟팅된 클라이언트 기기(앱은 백그라운드 상태임)에서 알림을 수신합니다.
앱으로 전송된 메시지의 통계를 파악하려면, Apple 및 Android 기기에서 열린 전송 메시지 수와 Android 앱의 '노출수'(사용자에게 표시된 알림) 데이터가 기록된 FCM 보고 대시보드를 확인합니다.
다음 단계
앱에 단순한 알림 메시지 이외에 더 많은 고급 기능을 추가하려면 다음을 참조하세요.