백그라운드 앱으로 첫 번째 메시지 보내기

FCM을 시작하기 위해 앱이 백그라운드 상태일 때 알림 작성기에서 특정 사용자의 기기로 알림 메시지를 전송하는 가장 단순한 사용 사례부터 살펴 보겠습니다. 이 페이지에는 설정에서 검증까지 이 작업을 수행하는 모든 단계가 제시되어 있으므로, FCM용 iOS 클라이언트 앱 설정을 마친 경우 일부 단계는 이미 완료된 상태일 수 있습니다.

iOS 프로젝트에 Firebase 추가

이 섹션에서 설명하는 작업은 앱에서 다른 Firebase 기능을 사용 설정한 경우 이미 완료되었을 수 있습니다. FCM과 관련해서는 APN 인증 키를 업로드하고 원격 알림을 등록해야 합니다.

기본 요건

시작하기 전에 몇 가지 환경 설정이 필요합니다.

  • Xcode 9.0 이상
  • iOS 8 이상을 타겟팅하는 Xcode 프로젝트
  • Swift 프로젝트의 경우 Swift 3.0 이상 사용
  • 앱의 번들 식별자
  • CocoaPods 1.4.0 이상
  • 클라우드 메시징:
    • 실제 iOS 기기
    • Apple 개발자 계정의 Apple 푸시 알림 인증 키
    • Xcode의 App > Capabilities에서 푸시 알림 사용 설정

Xcode 프로젝트를 준비하지 않았다면 빠른 시작 샘플 중 하나를 다운로드하여 Firebase 기능을 시험해 볼 수 있습니다. 빠른 시작을 사용한다면 프로젝트 설정에서 번들 식별자를 확인해야 합니다. 다음 단계에서 이 식별자가 필요합니다.

앱에 Firebase 추가

앱에 Firebase를 추가할 차례입니다. 그러려면 Firebase 프로젝트 및 앱의 Firebase 구성 파일이 필요합니다.

Firebase 프로젝트를 만드는 방법은 다음과 같습니다.

  1. Firebase 프로젝트가 없으면 Firebase 콘솔에서 프로젝트를 만듭니다. 프로젝트 추가를 클릭합니다. 모바일 앱에 연결된 기존 Google 프로젝트가 있으면 프로젝트 이름 드롭다운 메뉴에서 선택합니다. 그렇지 않을 경우 프로젝트 이름을 입력하여 새 프로젝트를 만듭니다.
  2. 선택사항: Project ID를 수정합니다. 프로젝트에는 고유 ID가 자동으로 지정되며, 고유 ID는 데이터베이스 URL 및 Firebase 호스팅 하위 도메인과 같이 공개적으로 표시되는 Firebase 기능에 사용됩니다. 특정 하위 도메인을 사용하려는 경우 변경할 수 있습니다.
  3. 나머지 설정 단계를 따르고 프로젝트 만들기(기존 프로젝트를 사용 중인 경우 Firebase 추가)를 클릭하여 프로젝트 리소스 프로비저닝을 시작합니다. 이 작업은 일반적으로 몇 분 정도 걸립니다. 프로세스가 완료되면 프로젝트 개요로 이동하게 됩니다.

이제 프로젝트가 준비되었으므로 iOS 앱을 추가할 수 있습니다.

  1. Add Firebase to your iOS app(iOS 앱에 Firebase 추가)을 클릭하고 설정 단계를 따릅니다. 기존 Google 프로젝트를 가져오면 이 단계가 자동으로 이루어지므로 구성 파일만 다운로드하면 됩니다.
  2. 메시지가 표시되면 앱의 번들 ID를 입력합니다. 앱에서 사용하는 번들 ID를 입력해야 합니다. 이 설정은 Firebase 프로젝트에 앱을 추가할 때만 가능합니다.
  3. 이 프로세스 중에 GoogleService-Info.plist 파일을 다운로드하게 됩니다. 언제든지 다시 이 파일을 다운로드할 수 있습니다.
  4. 초기화 코드를 추가한 후 앱을 실행하여 Firebase를 성공적으로 설치했다는 확인을 Firebase 콘솔에 보냅니다.

SDK 추가

새 프로젝트를 설정할 때는 SDK를 설치해야 합니다. 이 단계는 Firebase 프로젝트를 만들 때 이미 완료했을 수 있습니다.

CocoaPods를 사용하여 라이브러리를 설치하는 것이 좋습니다. Cocoapods를 설치하려면 설치 안내를 따릅니다. CocoaPods를 사용하지 않으려는 경우 CocoaPods를 사용하지 않고 SDK 프레임워크를 직접 통합할 수 있습니다.

빠른 시작 샘플 중 하나를 다운로드하고 실행하려는 경우 Xcode 프로젝트 및 Podfile은 이미 있지만 pod를 설치하고 GoogleService-Info.plist 파일을 다운로드해야 합니다. 자신의 프로젝트 중 하나에 Firebase 라이브러리를 통합하려면 사용할 라이브러리에 대한 pod를 추가해야 합니다.

  1. 아직 Xcode 프로젝트가 없으면 지금 만듭니다.

  2. Podfile이 없으면 새로 만듭니다.

    $ cd your-project directory
    $ pod init
    
  3. 설치할 pod를 추가합니다. 다음과 같이 Podfile에 Pod를 포함할 수 있습니다.

    pod 'Firebase/Core'
    pod 'Firebase/Messaging'
    

    이렇게 하면 iOS 앱에서 Firebase 및 Firebase용 Google 애널리틱스를 사용하기 위한 필수 라이브러리가 추가됩니다. 현재 사용 가능한 pod 및 하위 스펙은 아래를 참조하세요. 기능별 설정 가이드에도 이 내용이 링크되어 있습니다.

  4. pod를 설치하고 .xcworkspace 파일을 열어 Xcode에서 프로젝트를 확인합니다.

    $ pod install
    $ open your-project.xcworkspace
    
  5. Firebase 콘솔에서 GoogleService-Info.plist 파일을 다운로드하여 앱에 포함합니다.

APN 인증 키 업로드

Firebase에 APN 인증 키를 업로드합니다. 아직 APN 인증 키가 없으면 FCM에서 APN 구성을 참조하세요.

  1. Firebase 콘솔의 프로젝트 내에서 톱니바퀴 아이콘을 선택하고 프로젝트 설정을 선택한 다음 클라우드 메시징 탭을 선택합니다.

  2. iOS 앱 구성APN 인증 키에서 업로드 버튼을 클릭합니다.

  3. 키를 저장한 위치로 이동하여 키를 선택하고 열기를 클릭합니다. 키에 해당하는 키 ID(Apple Developer Member CenterCertificates, Identifiers & Profiles(인증서, 식별자, 프로필)에서 확인 가능)를 추가하고 업로드를 클릭합니다.

앱에서 Firebase 초기화

애플리케이션에 Firebase 초기화 코드를 추가해야 합니다. 다음과 같이 Firebase 모듈을 가져오고 공유 인스턴스를 구성합니다.

  1. UIApplicationDelegate에서 Firebase 모듈을 가져옵니다.

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  2. 일반적으로 애플리케이션의 application:didFinishLaunchingWithOptions: 메소드에서 FirebaseApp 공유 인스턴스를 구성합니다.

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    

원격 알림 등록

애플리케이션이 시작될 때 또는 적절한 시점에 원격 알림에 앱을 등록합니다. 다음과 같이 registerForRemoteNotifications를 호출합니다.

Swift

if #available(iOS 10.0, *) {
  // For iOS 10 display notification (sent via APNS)
  UNUserNotificationCenter.current().delegate = self

  let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
  UNUserNotificationCenter.current().requestAuthorization(
    options: authOptions,
    completionHandler: {_, _ in })
} else {
  let settings: UIUserNotificationSettings =
  UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
  application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()

Objective-C

if ([UNUserNotificationCenter class] != nil) {
  // iOS 10 or later
  // For iOS 10 display notification (sent via APNS)
  [UNUserNotificationCenter currentNotificationCenter].delegate = self;
  UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
      UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
  [[UNUserNotificationCenter currentNotificationCenter]
      requestAuthorizationWithOptions:authOptions
      completionHandler:^(BOOL granted, NSError * _Nullable error) {
        // ...
      }];
} else {
  // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [application registerUserNotificationSettings:settings];
}

[application registerForRemoteNotifications];

등록 토큰 액세스

특정 기기로 메시지를 보내려면 기기의 등록 토큰을 알아야 합니다. 알림 작성기의 필드에 토큰을 입력해야 이 가이드를 마칠 수 있으므로 토큰을 검색한 후 복사하거나 안전하게 저장해 두세요.

기본적으로 FCM SDK는 앱을 시작할 때 클라이언트 앱 인스턴스용 등록 토큰을 생성합니다. APN 기기 토큰과 마찬가지로 이 토큰을 사용하여 타겟팅한 알림을 앱의 모든 특정 인스턴스로 전송할 수 있습니다.

iOS가 일반적으로 앱 시작 시 APN 기기 토큰을 전달하는 것과 마찬가지로, FCM은 FIRMessagingDelegatemessaging:didReceiveRegistrationToken: 메소드를 통해 등록 토큰을 제공합니다. FCM SDK는 최초 앱 시작 시 및 토큰이 업데이트/무효화될 때마다 신규 또는 기존 토큰을 검색합니다. 어떠한 경우든 FCM SDK는 유효한 토큰이 있는 messaging:didReceiveRegistrationToken:을 호출합니다.

다음과 같은 경우에 등록 토큰이 변경될 수 있습니다.

  • 새 기기에서 앱 복원
  • 사용자가 앱 삭제/재설치
  • 사용자가 앱 데이터 소거

메시지 대리자 설정

등록 토큰을 받으려면 [FIRApp configure]을 호출한 후 메시지 대리자 프로토콜을 구현하고 FIRMessagingdelegate 속성을 설정합니다. 예를 들어 애플리케이션 대리자가 메시지 대리자 프로토콜을 준수하는 경우 application:didFinishLaunchingWithOptions:에서 대리자를 자기 자신으로 설정할 수 있습니다.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

현재 등록 토큰 가져오기

등록 토큰은 메소드인 messaging:didReceiveRegistrationToken:을 통해 전달됩니다. 일반적으로 앱 시작 시 FCM 토큰을 사용하여 이 메소드를 한 번 호출합니다. 이 메소드가 호출되면 다음과 같은 작업을 수행할 수 있습니다.

  • 새 등록 토큰이라면 애플리케이션 서버에 전송합니다.
  • 등록 토큰을 주제에 구독 처리합니다. 이 작업은 신규 구독 또는 사용자의 앱 재설치 같은 상황에서만 필요합니다.

instanceIDWithHandler:를 사용하여 직접 토큰을 검색할 수 있습니다. 이 콜백은 토큰을 포함하는 InstanceIDResult를 제공합니다. 어떤 방식으로든 InstanceID 검색이 실패할 경우 null이 아닌 오류가 제공됩니다.

Swift

InstanceID.instanceID().instanceID { (result, error) in
  if let error = error {
    print("Error fetching remote instange ID: \(error)")
  } else if let result = result {
    print("Remote instance ID token: \(result.token)")
    self.instanceIDTokenMessage.text  = "Remote InstanceID token: \(result.token)"
  }
}

Objective-C

[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                    NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching remote instance ID: %@", error);
  } else {
    NSLog(@"Remote instance ID token: %@", result.token);
    NSString* message =
      [NSString stringWithFormat:@"Remote InstanceID token: %@", result.token];
    self.instanceIDTokenMessage.text = message;
  }
}];

일반적으로 로컬에서 토큰을 사용할 수 있기 때문에 이 메소드는 네트워크 연결을 열지 않습니다. 언제든지 이 메소드를 사용하여 저장하는 대신 토큰에 액세스할 수 있습니다.

토큰 새로고침 모니터링

토큰이 업데이트될 때마다 알림을 받으려면 메시지 대리자 프로토콜을 준수하는 대리자를 제공합니다. 다음 예제에서는 대리자를 등록하고 적절한 대리자 메소드를 추가합니다.

Swift

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
  print("Firebase registration token: \(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.
}

대리자 메소드를 제공하는 대신 NSNotification이라는 kFIRMessagingRegistrationTokenRefreshNotification을 수신 대기할 수도 있습니다. 토큰 속성은 항상 현재 토큰 값을 갖습니다.

알림 메시지 전송

  1. 타겟 기기에 앱을 설치하고 실행합니다. 원격 알림 수신에 대한 허가 요청을 수락해야 합니다.

  2. 앱을 기기에서 백그라운드 상태로 만듭니다.

  3. 알림 작성기를 열고 새 메시지를 선택합니다.

  4. 메시지 본문을 입력합니다.

  5. 메시지 타겟으로 단일 기기를 선택합니다.

  6. FCM 등록 토큰 필드에 이 가이드의 앞 섹션에서 확인한 등록 토큰을 입력합니다.

메시지 보내기를 클릭하면 타겟팅된 클라이언트 기기에서 앱이 백그라운드 상태인 경우 알림 센터에 알림이 수신됩니다.

앱으로 전달된 메시지 통계를 파악하려면, 전송되어 iOS 및 Android 기기에서 열린 메시지 수와 Android 앱의 '노출수'(사용자에게 표시된 알림) 데이터를 기록하는 FCM 보고 대시보드를 확인합니다.

다음 단계

앱에 단순한 알림 메시지 이외에 더 많은 고급 기능을 추가하려면 다음을 참조하세요.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.