Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

Apple 플랫폼에서 Firebase 클라우드 메시징 클라이언트 앱 설정

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Apple 클라이언트 앱의 경우 Firebase 클라우드 메시징 APN 인터페이스를 통해 최대 4000바이트의 알림 및 데이터 페이로드를 수신할 수 있습니다.

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

Firebase 클라우드 메시징의 메서드 스위즐링

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

Apple 프로젝트에 Firebase 추가

아직 추가하지 않았다면 Apple 프로젝트에 Firebase를 추가합니다 .

APN 인증 키 업로드

Firebase에 APN 인증 키를 업로드합니다. APN 인증 키가 아직 없는 경우 Apple 개발자 회원 센터 에서 생성해야 합니다.

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

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

  3. 키를 저장한 위치를 찾아 선택하고 열기 를 클릭합니다. 키에 대한 키 ID를 추가하고( Apple 개발자 회원 센터 에서 사용 가능) 업로드 를 클릭합니다.

원격 알림 등록

시작 시 또는 애플리케이션 흐름의 원하는 지점에서 원격 알림을 위해 앱을 등록합니다. 다음과 같이 registerForRemoteNotifications 를 호출합니다.

빠른

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()

오브젝티브-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 장치 토큰과 유사하게 이 토큰을 사용하면 앱의 특정 인스턴스에 대상 알림을 보낼 수 있습니다.

Apple 플랫폼이 일반적으로 앱 시작 시 APN 장치 토큰을 전달하는 것과 같은 방식으로 FCM은 FIRMessagingDelegatemessaging:didReceiveRegistrationToken: 메서드를 통해 등록 토큰을 제공합니다. FCM SDK는 초기 앱 실행 중 그리고 토큰이 업데이트되거나 무효화될 때마다 새 토큰이나 기존 토큰을 검색합니다. 모든 경우에 FCM SDK는 유효한 토큰을 사용하여 messaging:didReceiveRegistrationToken: 을 호출합니다.

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

  • 앱이 새 기기에서 복원됩니다.
  • 사용자가 앱을 제거/재설치합니다.
  • 사용자가 앱 데이터를 지웁니다.

메시징 대리인 설정

등록 토큰을 받으려면 메시징 대리자 프로토콜을 구현하고 [FIRApp configure] 호출 후 FIRMessagingdelegate 속성을 설정하십시오. 예를 들어 응용 프로그램 대리자가 메시징 대리자 프로토콜을 준수하는 경우 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 비활성화됨: APN 토큰 및 등록 토큰 매핑

메서드 스위즐링을 비활성화했거나 SwiftUI 앱을 빌드하는 경우 APN 토큰을 FCM 등록 토큰에 명시적으로 매핑해야 합니다. application(_:didRegisterForRemoteNotificationsWithDeviceToken:) 메서드를 구현하여 APN 토큰을 검색한 다음 MessagingapnsToken 속성을 설정합니다.

빠른

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 등록 토큰이 생성된 후 swizzling이 활성화된 경우와 동일한 방법을 사용하여 FCM 등록 토큰에 액세스하고 새로 고침 이벤트를 수신할 수 있습니다.

자동 초기화 방지

FCM 등록 토큰이 생성되면 라이브러리가 식별자와 구성 데이터를 Firebase에 업로드합니다. 먼저 사용자로부터 명시적 옵트인을 얻으려면 FCM을 비활성화하여 구성 시 토큰 생성을 방지할 수 있습니다. 이렇게 하려면 Info.plist ( GoogleService-Info.plist 아님)에 메타데이터 값을 추가하세요.

FirebaseMessagingAutoInitEnabled = NO

FCM을 다시 활성화하려면 런타임 호출을 할 수 있습니다.

빠른

Messaging.messaging().autoInitEnabled = true

오브젝티브-C

[FIRMessaging messaging].autoInitEnabled = YES;

이 값은 일단 설정되면 앱을 다시 시작해도 유지됩니다.

다음 단계

Apple 클라이언트를 설정했으면 메시지 처리 및 기타 고급 동작을 앱에 추가할 준비가 된 것입니다. 자세한 내용은 다음 가이드를 참조하세요.