FCM을 시작하기 위해 앱이 기기에서 백그라운드 상태일 때 개발 기기에 알림 작성기에서 생성된 테스트 알림 메시지를 보내는 가장 단순한 사용 사례부터 살펴보겠습니다. 이 페이지에는 설정부터 검증까지 이 작업을 수행하는 모든 단계가 나와 있으므로 FCM용 Apple 클라이언트 앱을 설정했으면 일부 단계는 이미 완료된 상태일 수 있습니다.
Apple 프로젝트에 Firebase 추가
이 섹션에서 설명하는 작업은 앱에 다른 Firebase 기능을 이미 사용 설정한 경우 이미 완료된 상태일 수 있습니다. FCM에만 해당하는 작업으로는 APNs 인증 키 업로드와 원격 알림 등록이 있습니다.
기본 요건
다음을 설치합니다.
- Xcode 15.2 이상
프로젝트가 다음 요구사항을 충족하는지 확인합니다.
- 프로젝트에서 다음 플랫폼 버전 이상을 타겟팅해야 합니다.
- iOS 13
- macOS 10.15
- tvOS 13
- watchOS 7
- 프로젝트에서 다음 플랫폼 버전 이상을 타겟팅해야 합니다.
실제 Apple 기기를 설정하여 앱을 실행하고 다음 작업을 완료합니다.
- Apple 개발자 계정의 Apple 푸시 알림 인증 키를 가져옵니다.
- XCode의 App(앱) > Capabilities(기능)에서 푸시 알림을 사용 설정합니다.
- Google 계정을 사용하여 Firebase에 로그인합니다.
Xcode 프로젝트가 준비되지 않았지만 Firebase 제품을 사용해 보고자 하는 경우 빠른 시작 샘플 중 하나를 다운로드하세요.
Firebase 프로젝트 만들기
Firebase를 Apple 앱에 추가하려면 먼저 앱에 연결할 Firebase 프로젝트를 만드세요. Firebase 프로젝트에 대한 자세한 내용은 Firebase 프로젝트 이해를 참조하세요.
Firebase 프로젝트 만들기
-
Firebase Console에서 프로젝트 추가를 클릭합니다.
-
기존 Google Cloud 프로젝트에 Firebase 리소스를 추가하려면 프로젝트 이름을 입력하거나 드롭다운 메뉴에서 선택합니다.
-
새 프로젝트를 만들려면 원하는 프로젝트 이름을 입력합니다. 필요한 경우 프로젝트 이름 아래에 표시되는 프로젝트 ID를 수정할 수도 있습니다.
-
-
메시지가 표시되면 Firebase 약관을 검토하고 이에 동의합니다.
-
계속을 클릭합니다.
-
(선택사항) 다음 Firebase 제품의 사용 환경을 최적화하려면 프로젝트에 Google Analytics를 설정합니다.
기존 Google Analytics 계정을 선택하거나 새 계정을 만듭니다.
새 계정을 만드는 경우 Analytics 보고 위치를 선택한 후 프로젝트의 데이터 공유 설정 및 Google Analytics 약관에 동의합니다.
-
프로젝트 만들기를 클릭합니다. 기존 Google Cloud 프로젝트를 사용하는 경우에는 Firebase 추가를 클릭합니다.
Firebase에서 Firebase 프로젝트용 리소스를 자동으로 프로비저닝합니다. 프로세스가 완료되면 Firebase Console에서 Firebase 프로젝트의 개요 페이지로 이동됩니다.
Firebase에 앱 등록
Apple 앱에서 Firebase를 사용하려면 Firebase 프로젝트에 앱을 등록해야 합니다. 앱 등록이란 보통 프로젝트에 앱을 '추가'하는 것을 의미합니다.
Firebase 콘솔로 이동
프로젝트 개요 페이지 중앙에 있는 iOS+ 아이콘을 클릭하여 설정 워크플로를 시작합니다.
Firebase 프로젝트에 앱을 이미 추가한 경우 앱 추가를 클릭하여 플랫폼 옵션을 표시합니다.
번들 ID 필드에 앱의 번들 ID를 입력합니다.
번들 ID는 무엇이며 어디에서 찾을 수 있나요?
번들 ID는 Apple 생태계에서 애플리케이션을 고유하게 식별하는 역할을 합니다.
번들 ID 찾기: Xcode에서 프로젝트를 열고 프로젝트 탐색기에서 최상위 앱을 선택한 다음 General(일반) 탭을 선택합니다.
Bundle Identifier(번들 식별자) 필드의 값이 번들 ID입니다(예:
com.yourcompany.yourproject
).번들 ID 값은 대소문자를 구분하며 Firebase 프로젝트에 등록한 후에는 해당 Firebase 앱의 번들 ID 값을 변경할 수 없습니다.
(선택사항) 다른 앱 정보(앱 닉네임 및 App Store ID)를 입력합니다.
Firebase에서 앱 닉네임과 App Store ID는 어떻게 사용되나요?
앱 닉네임: 닉네임은 편의상 지정하는 내부용 식별자로 Firebase 콘솔에서 본인만 볼 수 있습니다.
App Store ID: Firebase Dynamic Links에서 사용자를 App Store 페이지로 리디렉션하고 Google Analytics에서 Google Ads로 전환 이벤트를 가져오는 데 사용됩니다. 앱에 아직 App Store ID가 없으면 나중에 프로젝트 설정에서 ID를 추가할 수 있습니다.
앱 등록을 클릭합니다.
Firebase 구성 파일 추가
GoogleService-Info.plist 다운로드를 클릭하여 Firebase Apple 플랫폼 구성 파일(
GoogleService-Info.plist
)을 가져옵니다.이 구성 파일에 대해 알아야 할 사항은 무엇인가요?
Firebase 구성 파일에는 고유하지만 보안 비밀은 아닌 프로젝트 식별자가 있습니다. 이 구성 파일에 대한 자세한 내용은 Firebase 프로젝트 이해를 참조하세요.
언제든지 다시 Firebase 구성 파일을 다운로드할 수 있습니다.
구성 파일 이름에
(2)
와 같은 문자가 추가되지 않았는지 확인합니다.
구성 파일을 Xcode 프로젝트의 루트로 이동합니다. 메시지가 표시되면 모든 대상에 구성 파일을 추가하도록 선택합니다.
프로젝트에 번들 ID가 여러 개 있으면 각 앱에 자체 GoogleService-Info.plist
파일이 포함되도록 각 번들 ID를 Firebase 콘솔에서 등록된 앱과 연결해야 합니다.
앱에 Firebase SDK 추가
Swift Package Manager를 사용해 Firebase 종속 항목을 설치하고 관리하세요.
- 앱 프로젝트를 연 상태로 Xcode에서 File(파일) > Add Packages(패키지 추가)로 이동합니다.
- 메시지가 표시되면 Firebase Apple 플랫폼 SDK 저장소를 추가합니다.
- Firebase Cloud Messaging 라이브러리를 선택합니다.
- 타겟 빌드 설정의 Other Linker Flags(기타 링커 플래그) 섹션에
-ObjC
플래그를 추가합니다. - Firebase Cloud Messaging 사용 환경을 최적화하려면 Firebase 프로젝트에서 Google Analytics를 사용 설정하고 Google 애널리틱스용 Firebase SDK를 앱에 추가하는 것이 좋습니다. IDFA 수집이 없는 라이브러리 또는 IDFA 수집이 있는 라이브러리를 선택할 수 있습니다.
- 완료되면 Xcode가 백그라운드에서 자동으로 종속 항목을 확인하고 다운로드하기 시작합니다.
https://github.com/firebase/firebase-ios-sdk.git
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와 Authentication을 사용하려면 다음을 따르세요.import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- 앱 대리자의
application(_:didFinishLaunchingWithOptions:)
메서드에서FirebaseApp
공유 인스턴스를 구성합니다.// Use Firebase library to configure APIs FirebaseApp.configure()
// Use Firebase library to configure APIs FirebaseApp.configure()
// Use Firebase library to configure APIs [FIRApp configure];
- SwiftUI를 사용하는 경우 앱 대리자를 만들고
UIApplicationDelegateAdaptor
또는NSApplicationDelegateAdaptor
를 통해App
구조체에 연결해야 합니다. 앱 대리자 재구성도 중지해야 합니다. 자세한 내용은 SwiftUI 안내를 참조하세요.@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
원격 알림 등록
애플리케이션이 시작될 때 또는 적절한 시점에 원격 알림에 앱을 등록합니다. 다음과 같이registerForRemoteNotifications
를 호출합니다.
UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) application.registerForRemoteNotifications()
[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:
에서 대리자를 애플리케이션 대리자로 설정할 수 있습니다.
Messaging.messaging().delegate = self
[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)" } }
[[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. }
- (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 보고 대시보드를 확인합니다.
다음 단계
앱에 단순한 알림 메시지 이외에 더 많은 고급 기능을 추가하려면 다음을 참조하세요.