iOS에서 Firebase 클라우드 메시징 클라이언트 앱 설정

iOS 클라이언트 앱의 경우 상호 보완적인 2가지 방법으로 Firebase 클라우드 메시징을 구현할 수 있습니다.

  • Firebase 클라우드 메시징 APN 인터페이스를 통해 최대 4KB의 기본 푸시 메시지를 수신합니다.

  • 포그라운드 앱에서 최대 4KB의 업스트림 메시지를 보내거나 다운스트림 페이로드를 수신합니다.

Objective-C 또는 Swift로 클라이언트 코드를 작성하려면 FIRMessaging API를 사용하는 것이 좋습니다. 빠른 시작 예에서 두 언어의 샘플 코드를 제공합니다.

Firebase 클라우드 메시징의 메소드 재구성

FCM SDK는 FCM 등록 토큰에 APN 토큰을 매핑하고 다운스트림 메시지 콜백 처리 중에 분석 데이터를 캡처하는 두 가지 주요 영역에서 메소드 재구성을 수행합니다. 재구성을 사용하지 않으려는 개발자는 앱의 Info.plist 파일에 FirebaseAppDelegateProxyEnabled 플래그를 추가하고 NO(부울 값)로 설정하여 재구성을 해제할 수 있습니다. 이 가이드의 관련 영역에서는 메소드 재구성을 사용할 때와 그렇지 않을 때의 코드 예를 모두 제공합니다.

iOS 프로젝트에 Firebase 추가

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

필수 조건

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

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

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

앱에 Firebase 추가

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

  1. Firebase 프로젝트가 없으면 Firebase 콘솔에서 프로젝트를 만듭니다. 모바일 앱에 연결된 기존 Google 프로젝트가 있으면 Google 프로젝트 가져오기를 클릭합니다. 그렇지 않은 경우 새 프로젝트 만들기를 클릭합니다.
  2. iOS 앱에 Firebase 추가를 클릭하고 설정 단계를 따릅니다. 기존 Google 프로젝트를 가져오면 이 단계가 자동으로 수행되므로 구성 파일만 다운로드하면 됩니다.
  3. 메시지가 표시되면 앱의 번들 ID를 입력합니다. 반드시 앱이 사용 중인 번들 ID를 입력해야 합니다. 이 설정은 Firebase 프로젝트에 앱을 추가할 때만 가능합니다.
  4. 마지막으로 GoogleService-Info.plist 파일을 다운로드합니다. 언제든지 다시 이 파일을 다운로드할 수 있습니다.
  5. 이 파일을 Xcode 프로젝트 루트에 복사하지 않았다면 지금 복사합니다.

SDK 추가

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

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. FirebaseApp 공유 인스턴스는 일반적으로 애플리케이션의 application:didFinishLaunchingWithOptions: 메소드에서 구성합니다.

    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 (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9_x_Max) {
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
} else {
  // iOS 10 or later
  #if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
  // 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) {
      }];
  #endif
}

[[UIApplication sharedApplication] registerForRemoteNotifications];

등록 토큰 액세스

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

이 섹션에서는 토큰을 검색하고 토큰의 변경을 모니터링하는 방법을 설명합니다. 토큰은 최초 시작 후에 회전될 수 있으므로 마지막으로 업데이트된 등록 토큰을 검색하는 것이 좋습니다.

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

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

현재 등록 토큰 검색

현재 토큰이 필요하면 토큰을 검색합니다. 토큰이 아직 생성되지 않은 경우 null이 반환될 수 있습니다.

Swift

let token = Messaging.messaging().fcmToken
print("FCM token: \(token ?? "")")

Objective-C

NSString *fcmToken = [FIRMessaging messaging].FCMToken;
NSLog(@"FCM registration token: %@", fcmToken);

토큰 생성 모니터링

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

Swift

func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
  print("Firebase registration token: \(fcmToken)")
}

Objective-C

- (void)messaging:(nonnull FIRMessaging *)messaging didRefreshRegistrationToken:(nonnull NSString *)fcmToken {
  // Note that this callback will be fired everytime a new token is generated, including the first
  // time. So if you need to retrieve the token as soon as it is available this is where that
  // should be done.
  NSLog(@"FCM registration token: %@", fcmToken);

  // TODO: If necessary send token to application server.
}

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

재구성 사용 중지됨: APN 토큰과 등록 토큰 매핑

메소드 재구성을 사용 중지했다면 APN 토큰을 명시적으로 FCM 등록 토큰에 매핑해야 합니다. didRegisterForRemoteNotificationsWithDeviceToken 메소드를 재정의하여 APN 토큰을 검색하고 setAPNSToken을 호출합니다.

APNSToken 속성을 사용하여 APN 토큰을 제공합니다.

Swift

func application(application: UIApplication,
                   didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
  Messaging.messaging().apnsToken = deviceToken
}

Objective-C

// With "FirebaseAppDelegateProxyEnabled": NO
    - (void)application:(UIApplication *)application
        didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
                 [FIRMessaging messaging].APNSToken = deviceToken;];
    }

FCM 등록 토큰이 생성된 후 재구성이 사용 설정되었을 때와 동일한 메소드를 사용하여 토큰에 액세스하고 새로고침 이벤트를 수신 대기할 수 있습니다.

기존 사용자 APN 토큰 가져오기

기존 사용자층을 FCM 클라이언트 앱으로 흡수하려면 인스턴스 ID가 제공하는 batchImport API를 사용합니다. 이 API를 사용하면 기존 iOS APN 토큰을 대량으로 FCM에 가져와서 유효한 새 등록 토큰에 매핑할 수 있습니다.

다음 단계

iOS 클라이언트를 설정하고 나면 앱에 메시지 처리 및 다른 고급 동작을 추가할 수 있습니다. 자세한 내용은 다음 가이드를 참조하세요.

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

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